とりあえず引き継いだ自分がやらなきゃならんので、調査。
cron で実行してる。
運良く?実行時にログを吐くようにしているのでそれをみる・・。
fopen で ファイルが開けてない。んー。パスがおかしくね?
経緯
・こないだサーバ移行した (したのは別の人)
・構成は全く同じ
・それ以降変更はなし
んー。どうしたもんか。
とりあえず3,4年前のふるーいコードを追っていく。
やっぱりパスの解釈がおかしい??
でも・・・ 変更してないならなぜおこる?
調査結果
移行前は cgi 版を使って実行していたけど、 移行後は cli 版で実行していたため。
$_SERVER['DOCUMENT_ROOT']があるとき、
空であることは考えてなかった模様。。。
cronで実行させるんなら、 フツー cli だから合ってるんじゃね?とも思うけど、旧環境はcgi 版。自分の常識は通用しない。
cronで実行してるスクリプトの一部分だけもってきて、
似たような感じにしてテスト。
こんなかんじ。
--
if (isset($_SERVER['DOCUMENT_ROOT'])) {
$hoge = sprintf("%s/../hoge/fuga", $_SERVER['DOCUMENT_ROOT']);
} else {
$hoge = sprintf("%s/../hoge/fuga", $_SERVER['PWD']);
}
print "$hoge\n";
--
cli, cgi 版それぞれでチェック
cli
% cat /tmp/test.php|php -q
/../hoge/fuga
cgi
% cat /tmp/test.php|php-cgi -q
/home/katsuji/../hoge/fuga
正解。
cli版だと期待したパスになってない。
そらそーだ、$_SERVER['DOCUMENT_ROOT'] が空だから。
こんなかんじ。
% php -i |grep -i document
$_SERVER["DOCUMENT_ROOT"] =>
% php-cgi -i |grep -i document
・if (isset($_SERVER['DOCUMENT_ROOT'])) が悪
か、
・移行するときにちゃんと前の環境とそろえとけ
と。。。
if (isset($_SERVER['DOCUMENT_ROOT']) && $_SERVER['DOCUMENT_ROOT'] != NULL)
のような具合なら cli 版でもよかったね ( -_-)
0 件のコメント:
コメントを投稿