<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="https://tm.root-n.com/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel>
        <title>Tipsというかメモ programming:php:etc</title>
        <description></description>
        <link>https://tm.root-n.com/</link>
        <lastBuildDate>Tue, 18 Nov 2025 19:59:29 +0900</lastBuildDate>
        <generator>FeedCreator 1.7.2-ppt DokuWiki</generator>
        <image>
            <url>https://tm.root-n.com/lib/images/favicon.ico</url>
            <title>Tipsというかメモ</title>
            <link>https://tm.root-n.com/</link>
        </image>
        <item>
            <title>PHP :: abstractクラスを使ったバリデータの例</title>
            <link>https://tm.root-n.com/programming:php:etc:abstract_validator</link>
            <description>&lt;?
abstract class abstractValidator
{
    abstract function Validate();

    protected $name;
    protected $value;

    public function __construct($name, $value)
    {
        $this-&gt;name  = $name;
        $this-&gt;value = $value;
    }

    public function getName()
    {
        return $this-&gt;name;
    }

    public function getValue()
    {
        return $this-&gt;value;
    }
}

class boolValidator extends abstractValidator
{
    public function Validate()
    {
        return is_bool($this-&gt;v…</description>
        <category>programming:php:etc</category>
            <pubDate>Sun, 16 Mar 2008 22:48:11 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: リファラーを残さずにリンクする</title>
            <link>https://tm.root-n.com/programming:php:etc:anti_referer</link>
            <description>HTTPヘッダーで Refresh を指示します。

例として、下記のような「goto.php」を作ります。


	*  goto.php


&lt;?php

$url = isset($_GET['url']) ? $_GET['url'] : '';

// リファラーを残さない
header(&quot;Refresh: 0; url={$url}&quot;);

exit;</description>
        <category>programming:php:etc</category>
            <pubDate>Mon, 21 Jun 2010 09:57:37 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: flock のバッドノウハウ</title>
            <link>https://tm.root-n.com/programming:php:etc:bad_knowhow_flock</link>
            <description>以下のような、flock の戻り値を受ける変数名を使いまわすコードは危険。


/**
 * flock バッドノウハウ
 */

$fp = fopen('lock', 'w');
flock($fp, LOCK_EX);

 :
 :

// ↓これが呼ばれた瞬間、上部の`排他ロック'は解除されてしまう。。
$fp = fopen('hoge.txt', 'w');

 :
 :</description>
        <category>programming:php:etc</category>
            <pubDate>Fri, 17 Oct 2008 10:58:14 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: base_convert()関数で 0 ～ 35 を 1byte で表現してみる</title>
            <link>https://tm.root-n.com/programming:php:etc:base_convert</link>
            <description>以下の表のように、0 ～ 35 を [0-9a-z] の 1byte で表現します。

base_convert()関数を使うことで、あらかじめ配列等でマッピングテーブルを定義しておく必要がなくなります。

0  01  12  23  34  45  56  67  78  89  9a 10b 11c 12d 13e 14f 15g 16h 17i 18j 19k 20l 21m 22n 23o 24p 25q 26r 27s 28t 29u 30v 31w 32x 33y 34z 35</description>
        <category>programming:php:etc</category>
            <pubDate>Fri, 14 Jun 2019 11:31:48 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: boolean型はスカラー変数</title>
            <link>https://tm.root-n.com/programming:php:etc:boolean_is_scalar</link>
            <description>マニュアルにも記載されていますが、boolean型は スカラー変数 です。

スカラー変数には integer、float、string あるいは boolean が含まれます。 

array、object および resource はスカラーではありません。</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 16 Mar 2010 19:29:29 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: コールバック関数</title>
            <link>https://tm.root-n.com/programming:php:etc:callback_function</link>
            <description>PHP では、配列の値や正規表現にマッチした値に対してビルトイン関数やユーザが自由に定義した関数を適用する仕組みがあります。

これを「コールバック関数」といいます。


コールバック関数のメリット

配列のすべての値や正規表現にマッチした文字列すべてに対して特定の処理を行いたい場合、foreach 等を使って反復処理を書かなくていいので、コードがすっきりするメリットがあります。…</description>
        <category>programming:php:etc</category>
            <pubDate>Wed, 26 Aug 2009 16:29:07 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: clearstatcache() - ファイルのステータスのキャッシュをクリアする</title>
            <link>https://tm.root-n.com/programming:php:etc:clearstatcache</link>
            <description>キャッシュ機構を実装する場合に注意が必要。

先日、どうしても重いクエリを実行しなければ表示できないページがあり、キャッシュ機構を自前実装して対応する案件があった。(DB設計に問題があるというのはおいといて)</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 13 Jan 2009 13:04:38 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: error_log() 関数を利用したロギング</title>
            <link>https://tm.root-n.com/programming:php:etc:error_log</link>
            <description>ログの出力先をファイルにする時、排他ロックを掛けておかないとファイルを破損する場合があります。

その為、通常は下記のように「ロック→書き込み→アンロック」というように書くと思います。

(pear::log などを使わない場合)</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 26 May 2009 13:21:04 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: 秀丸で開いているPHPスクリプトの構文エラーを検出する</title>
            <link>https://tm.root-n.com/programming:php:etc:find_php_lint_on_hidemaru</link>
            <description>秀丸で開いているphpスクリプトの構文エラー(syntax error)をリアルタイムで検出します。

普段、秀丸でphpスクリプトをコーディングしている人は設定しておくといいかもしれません。</description>
        <category>programming:php:etc</category>
            <pubDate>Thu, 16 May 2019 10:25:59 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: Notepad++で開いているPHPスクリプトの構文エラーを検出する</title>
            <link>https://tm.root-n.com/programming:php:etc:find_php_lint_on_notepad_pp</link>
            <description>Notepad++で開いているphpスクリプトの構文エラー(syntax error)をリアルタイムで検出します。

普段、Notepad++でphpスクリプトをコーディングしている人は設定しておくといいかもしれません。</description>
        <category>programming:php:etc</category>
            <pubDate>Fri, 11 Apr 2014 10:51:42 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: foreach ループ内で、next() と current()</title>
            <link>https://tm.root-n.com/programming:php:etc:foreach_next_current</link>
            <description>foreach ブロック内で、配列ポインタが終端(最後の要素)に達したかどうかを判定する Tips です。


&lt;?php
    $arr = array(
        '001' =&gt; 'りんご', 
        '002' =&gt; 'みかん', 
        '003' =&gt; 'メロン', 
        '004' =&gt; 'バナナ'
    );
?&gt;</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 30 Jul 2013 17:09:05 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: コマンドラインプログラムで重宝する関数「getopt」</title>
            <link>https://tm.root-n.com/programming:php:etc:getopt</link>
            <description>コマンドラインプログラムを作る上で重宝する関数だけど、挙動にくせがあるので注意が必要。





getopt -- コマンドラインの引数リストからオプションを取得する


array getopt ( string options [, array longopts] )</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 14 Oct 2008 16:13:18 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: POSTリクエストを送信する for PHP4</title>
            <link>https://tm.root-n.com/programming:php:etc:http_post_request_php4</link>
            <description>class HTTP
{
    /**
     * POSTリクエストを送信する (プロトコルは http のみに対応)
     * 
     * for PHP 4
     * 
     * @param string $uri 送信先URI (http://～)
     * @param array $data 送信するデータ array('name'=&gt;'value', ...)
     * @param float $timeout タイムアウト秒
     * @return boolean
     * @access public
     * @static
     */
    function postRequest($uri, $data, $timeout = 60)
    {
        $elem = parse_url($uri);
        $host = $elem['host'];
        $path = $elem['path'];
        $scheme = $elem['scheme'];

   …</description>
        <category>programming:php:etc</category>
            <pubDate>Sun, 16 Mar 2008 22:48:12 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: POSTリクエストを送信する for PHP5</title>
            <link>https://tm.root-n.com/programming:php:etc:http_post_request_php5</link>
            <description>class HTTP
{
    /**
     * POSTリクエストを送信する (プロトコルは http のみに対応)
     * 
     * for PHP 5
     * 
     * @param string $uri 送信先URI (http://～)
     * @param array $data 送信するデータ array('name'=&gt;'value', ...)
     * @param float $timeout タイムアウト秒
     * @return boolean
     * @access public
     * @static
     */
    public static function postRequest($uri, $data, $optional_headers = null)
    {
        $elem = parse_url($uri);
        if ($elem['scheme']) !== 'http') {
            return false;
       …</description>
        <category>programming:php:etc</category>
            <pubDate>Sun, 16 Mar 2008 22:48:12 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: imagettfbbox()関数について - イメージ関数(image) -</title>
            <link>https://tm.root-n.com/programming:php:etc:imagettfbbox</link>
            <description>imagettfbbox

TypeType フォントを使用したテキストの bounding box の生成


array imagettfbbox ( float size, float angle, string fontfile, string text )


この関数は TrueType テキストの bounding box をピクセル単位で計算して返します。 



size

ピクセル単位のフォントの大きさ。



angle

測定する text の角度(度単位)。



fontfile

TrueType フォントファイルのファイル名(URL)。PHP が使用している GD ライブラリのバージョンによっては、'/' から始まり '.ttf' で終わるような ファイル名で探し、またライブラリによって定義されているフォントパスで 探そうと試みます。



text

測定する文字列。…</description>
        <category>programming:php:etc</category>
            <pubDate>Sat, 11 Oct 2008 13:07:17 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: 否定の!、is_null()、isset()、empty() の挙動の違い</title>
            <link>https://tm.root-n.com/programming:php:etc:isnull_isset_empty</link>
            <description>否定の!、is_null()、isset()、empty() の細かな挙動の違いをすぐ忘れるのでメモ。

check() という関数を作り、「空文字」「文字列の0」「数値の0」「false」「null」「空の配列」で動作確認を行った。



動作確認で使用したコード</description>
        <category>programming:php:etc</category>
            <pubDate>Wed, 10 Feb 2010 10:04:35 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: static を使って関数をメモ化する</title>
            <link>https://tm.root-n.com/programming:php:etc:memoization</link>
            <description>メモ化とは 

http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E5%8C%96


	*  引用


メモ化された関数は、以前の呼び出しの際の結果をそのときの引数と共に記憶しておき、
後で同じ引数で呼び出されたとき、計算せずにその格納されている結果を返す。
メモ化可能な関数は参照透過性を備えたものに限られる。
すなわち、メモ化されたことで副作用が生じない場合に限られる。</description>
        <category>programming:php:etc</category>
            <pubDate>Thu, 10 Apr 2014 18:06:20 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: ob_start() は入れ子にできる</title>
            <link>https://tm.root-n.com/programming:php:etc:ob_start_stackable</link>
            <description>出力のバッファリングを有効にする ob_start はネストさせることが可能。


	*  見やすいようにインデントを入れてます


&lt;?php

ob_start(); // ---------------- hoge

    echo 'hoge'.PHP_EOL;

    ob_start(); // ------------ fuga

        echo 'fuga'.PHP_EOL;

        ob_start(); // -------- piyo

            echo 'piyo'.PHP_EOL;

        $piyo = ob_get_clean();

    $fuga = ob_get_clean();

$hoge = ob_get_clean();

echo $piyo;
echo $fuga;
echo $hoge;

?&gt;</description>
        <category>programming:php:etc</category>
            <pubDate>Sat, 12 Apr 2014 19:39:27 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: PHP Screw で PHPソースを暗号化</title>
            <link>https://tm.root-n.com/programming:php:etc:php_screw</link>
            <description>PHP Screw はオープンソースソフトウェアで、ロイヤリティフリー(無償)で使えます。



	*  webサイト
		*  &lt;http://www.pm9.com/newpm9/itbiz/php/phpscrew/&gt;


	*  ドキュメント
		*  &lt;http://www.pm9.com/newpm9/itbiz/php/phpscrew/phpscrew.txt&gt;</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 14 Oct 2008 13:37:20 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: phpDocumentor on cygwin</title>
            <link>https://tm.root-n.com/programming:php:etc:phpdocumentor_on_cygwin</link>
            <description>java の javadoc と同じように、php にもソースファイルからリファレンスマニュアルを自動生成してくれる「phpDocumentor」というのがあります。

今回、cygwin上で phpDocumentor を動作させたのですが、プチハマリがあったのでメモ。</description>
        <category>programming:php:etc</category>
            <pubDate>Mon, 15 Jun 2009 13:10:19 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: 可読性を上げる制御構文</title>
            <link>https://tm.root-n.com/programming:php:etc:readability_syntax</link>
            <description>HTMLなどに直接PHPを書き、条件分岐や反復処理により文字列を出力する場合、下記のように記述すると可読性が大幅にアップします。

■ 条件分岐 (if ... endif; )


&lt;?php if ($var1 == 123): ?&gt;
    $var1 は 123 です。
&lt;?php elseif ($var1 == 789): ?&gt;
    $var1 は 789 です。
&lt;?php else: ?&gt;
    $var1 は 123, 789 以外です。
&lt;?php endif; ?&gt;</description>
        <category>programming:php:etc</category>
            <pubDate>Thu, 09 Apr 2009 12:05:03 +0900</pubDate>
        </item>
        <item>
            <title>DB(MySQL) :: transaction(トランザクション)を含むメソッドの再利用</title>
            <link>https://tm.root-n.com/programming:php:etc:reuse_transaction_method</link>
            <description>トランザクションのネスト


MySQL において、トランザクションのネストは出来ません。

例えば以下のコードは動作しません。


&lt;?php

/**
 * a_tbl{1,2} のトランザクション
 */
function execA(PDO $db)
{
    try {
        $db-&gt;beginTransaction();
        $db-&gt;exec('INSERT INTO a_tbl1 ... ');
        $db-&gt;exec('INSERT INTO a_tbl2 ... ');
        $db-&gt;commit();
    } catch (Exception $e) {
        $db-&gt;rollback();
        throw $e;
    }
}

/**
 * b_tbl{1,2} のトランザクション
 */
function execB(PDO $db)
{
    try {
        $db-&gt;beginTransaction();
        $db-&gt;exec('INSERT IN…</description>
        <category>programming:php:etc</category>
            <pubDate>Sun, 27 Oct 2013 15:30:16 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: キャッシュを制御するヘッダ「session.cache_limiter」</title>
            <link>https://tm.root-n.com/programming:php:etc:session.cache_limiter</link>
            <description>php はSESSIONを使うとデフォルトで No Cache、つまり「キャッシュ禁止」を指示する HTTPヘッダを3種類吐きます。

(PHP 5.2.0 で検証)

吐かれる HTTPヘッダ


Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache</description>
        <category>programming:php:etc</category>
            <pubDate>Wed, 03 Feb 2010 16:06:18 +0900</pubDate>
        </item>
        <item>
            <title>simplexml_load_string で CDATA の取得</title>
            <link>https://tm.root-n.com/programming:php:etc:simplexml_load_string_cdata</link>
            <description>&lt;![CDATA[&lt;strong&gt;美味い餃子&lt;/strong&gt;が食べられる店を教えてください。]]&gt;



CDATA とは、上記のようなフォーマットを持つ文字列で、&lt;HTML&gt;タグや&lt;SCRIPT&gt;タグの記述が可能になります。




xml などのレスポンスに CDATA が含まれていると、simplexml_load_string でオブジェクト化した時に CDATA の値だけ無くなって(見えなくなって)しまいます。

CDATA を正常に取得したいときは、下記のように第三引数に「LIBXML_NOCDATA」を指定します。…</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 09 Aug 2011 19:21:32 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: simplexml_load_string と serialize</title>
            <link>https://tm.root-n.com/programming:php:etc:simplexml_load_string_serialize</link>
            <description>simplexml_load_string で xml をパースできるのはとても便利。

しかし serialize との相性は悪い。

以下のようなケースが発生
PHP 5.2.10 にて
	*  simplexml_load_string() で xml からオブジェクトを生成。
	*  生成したオブジェクトを serialize() でシリアライズして、ファイルに書き出す。
	*  シリアライズしたファイルを読み込み、unserialize() でアンシリアライズ。
	*  すると、下記のようなエラーが…</description>
        <category>programming:php:etc</category>
            <pubDate>Fri, 11 Apr 2014 10:52:05 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: SimpleXMLElement で xpath</title>
            <link>https://tm.root-n.com/programming:php:etc:simplexmlelement_xpath</link>
            <description>Yahoo ショッピング の 商品検索 API で XML のパースに xpath を使った時のメモ。

ちなみに、同APIには 取得形式として「PHP seriallize」があり、PHPのシリアライズ化されたデータでの取得も可能ですが、今回はどうしても xpath を使ってみたかったので、XML で取得します。</description>
        <category>programming:php:etc</category>
            <pubDate>Fri, 10 Jul 2009 17:38:17 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: switch の case 文で厳密な型比較をする</title>
            <link>https://tm.root-n.com/programming:php:etc:strict_switch_case</link>
            <description>switch の case 文の比較は型を考慮しません。

比較演算子 == と同様の挙動です。





下記サンプルコードをご覧ください。



&lt;?php

function hoge($v)
{
    switch ($v) {
        case '1': // 文字列の1
            $ret = 'string: 1';
            break;

        case 1: // 数値の1
            $ret = 'integer: 1';
            break;
    }

    return $ret;
}

$v = 1;
var_dump(hoge($v));

$v = '1';
var_dump(hoge($v));</description>
        <category>programming:php:etc</category>
            <pubDate>Thu, 10 Apr 2014 20:50:11 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: 外部コマンドを実行する関数「system」と「exec」の比較</title>
            <link>https://tm.root-n.com/programming:php:etc:system_exec</link>
            <description>外部コマンドを実行する関数「system」と「exec」の比較



PHPでバッチやコマンドラインプログラムを作る時は手軽に外部コマンドをコールするのもありだと思う。

その際、「system」と「exec」どちらを使うべきか迷ったので両者の挙動を検証してみた。</description>
        <category>programming:php:etc</category>
            <pubDate>Tue, 27 Jul 2010 17:18:55 +0900</pubDate>
        </item>
        <item>
            <title>PHP :: HTTP HEADER「X-Powered-By:PHP」を送出しない</title>
            <link>https://tm.root-n.com/programming:php:etc:x_powered_by</link>
            <description>※このエントリーには間違えが含まれています。コメント欄を確認ください。

コメントにて、



header_remove('X-Powered-By'); 



とすることで、削除できると教えていただきました。




[ご注意] ▼以下のエントリー内容は、当時のまま修正していない内容です。</description>
        <category>programming:php:etc</category>
            <pubDate>Thu, 01 Oct 2020 18:22:31 +0900</pubDate>
        </item>
    </channel>
</rss>
