Archives by date

You are browsing the site archives by date.

【PHP】プロセスをバックグラウンド処理する。

よく使うので自分用メモ。

// 実行ファイル(.php)パス
$execFilePath = '/path/to/target.php';
// パラメーターを渡したい場合は以下の通り
$arg1 = 'param1';
$arg2 = 'param2';
$arg3 = 'param3';
$arg4 = 'param4';
$arg5 = 'param5';
// 実行コマンドを整形する(最後のアンパサンドは、処理をバックグラウンドで行うという意味)
$cmd = "nohup php -c '' '".$execFilePath."' '".$arg1."' '".$arg2."' '".$arg3."' '".$arg4."' '".$arg5."' > /dev/null &";
// バックグラウンド実行されたコマンドのプロセスIDを取得したい場合は、実行コマンドの末尾を以下のようにする
$cmd = "nohup php -c '' '".$execFilePath."' '".$arg1."' '".$arg2."' '".$arg3."' > /dev/null & echo $!";
// 実行する。
$output = array();
// $outputにバックグラウンドで実行中のプロセスIDが格納されている
exec($cmd, $output);

なぜ「echo $!」でプロセスIDが取得できるのかというと、Linuxがバックグラウンド処理中のPIDを変数$!に突っ込んでくれているからである。

 

【PHP】関数のエイリアスを把握する。

fwrite()関数とfprintf()関数の違いを調べていたらエイリアスという概念があることを知ったのでメモ。

エイリアスとは、複数の名前を持つけれども動作は同じ関数のことを言うらしい。

たとえばfputs()関数はfwrite()関数のエイリアスであり、使用されている拡張モジュールが同一なため、実行結果として同一の値を得ることができる。

よく使うところで例を挙げると、die()もexit()のエイリアス関数だったりする。

まとめると、互換性の観点で古い名前を残しているからどっち使っても良いけど、なるべく元の関数を使おうね!という話である。

その他の関数エイリアス一覧は以下URLを参照されたし。
http://php.net/manual/ja/aliases.php

 

【PHP】fprintf()、vfprintf()の違い。

前回の記事←に引き続き、printf()系の関数はこれで出尽くしたかな。

■fprintf()

フォーマットした文字列をファイルストリームに書き込む。
第一引数にファイルポインタを指定し、第二引数にフォーマット、それ以降に置換文字列を指定する。

■vfprintf()

フォーマットした文字列をファイルストリームに書き込む。
上記関数との違いは置換文字列を配列として受け取る点。(第三引数に配列で置換文字列を渡してあげればよい。)

 

にしても種類が多い。
printf(), sprintf(), vprintf(), vsprintf(), fprintf(), vfprintf()

細かいけど重要。