
Ubuntu日本語フォーラム

ログインしていません。
このたびhttpサーバ(apache2)のOSをDebian6(squeeze)からUbuntu11.10serverに替えたところ、PHP5でファイルパスを取得しそのファイルパスとファイルサイズを表示する次のコードの部分において、ファイルパスは表示されるもののファイルサイズが表示されなくなりました。($file_lengthの表示部には何も表示されない)
$fname = "/FILE/PATH";
$file_length = exec('stat -c "%s" ' . $fname);
echo "file-name : " . $fname . "<br>";
echo "file-size : " . $file_length . "<br>";
対象ファイルが19MBでも4.2GBでも大小を問わず同じです。
サーバOSをDebianに戻すとちゃんと表示されます。
Ubuntuで表示されない理由がわかりませんでしょうか。
2012 Jan. 21.
オフライン
PHPはよく、というか、全くと言ってよいほど知らないのですが、
http://www.php.net/manual/en/function.exec.php
http://php.net/manual/en/function.shell-exec.php
http://www.softel.co.jp/blogs/tech/archives/2195
が参考にならないでしょうか。
根本的な原因に心当たりはないのですが、どこかで改行文字の取扱いか何かに差がでて、Ubuntuでの実行時には空行が格納されていたりするんではないかと想像しています。
オフライン
hmatsueさま、ありがとうございます。
shell_exec('stat -c "%s" ' . $fname);
passthru('stat -c "%s" ' . $fname);
をやってみましたが、残念ながら変化はありませんでした。
2012 Jan. 22.
オフライン
前後のコード含めて正しく記述されているのに、passthruで出力をとれないという状況である場合は、
外部コマンドの呼び出し、実行ができていないということなのかも知れません。
apacheやapparmorの設定を確認して、外部コマンドの呼び出しができる状態になっているか確認してみてはいかがでしょう。
オフライン
hmatsueさま、ありがとうございます。
大変恥ずかしながら、httpサーバをdebianからubuntuに替えた時に問題となっている対象ファイルのファイルシステムをマウントしていなかっただけのことでした。
対象ファイルは別ホストにあるのですが、httpでパス無しファイル名を取ってきているだけでパスはnfsでマウントしていることを前提にphpコードの中で決め打ちしていました。
それなのに、httpサーバにnfsマウントしていませんでした。
/etc/fstabにマウント設定を書き込んだ上で、コードを次のように修正してファイルサイズを表示できました。
$filepath = shell_exec('mount | grep FILESERVERDIR | cut -d " " -f 3');
$filepath = trim($filepath);
if ( $filepath == NULL) {
exit("filepath : NULL<br>");
}
$fullpath = $filepath . "/" . $fname;
$file_length = exec('stat -c "%s" ' . $fullpath);
2012 Jan. 22.
オフライン