お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2012-01-21 12:42:10

Rasum
メンバ
登録日: 2008-12-07

DebianでできているPHPでのファイルサイズ取得がUbuntu11.10でできません

このたび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.

オフライン

 

#2 2012-01-21 23:57:33

hmatsue
アドバイザ
登録日: 2009-03-10

Re: DebianでできているPHPでのファイルサイズ取得がUbuntu11.10でできません

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での実行時には空行が格納されていたりするんではないかと想像しています。

オフライン

 

#3 2012-01-22 10:11:17

Rasum
メンバ
登録日: 2008-12-07

Re: DebianでできているPHPでのファイルサイズ取得がUbuntu11.10でできません

hmatsueさま、ありがとうございます。
shell_exec('stat -c "%s" ' . $fname);
passthru('stat -c "%s" ' . $fname);
をやってみましたが、残念ながら変化はありませんでした。
2012 Jan. 22.

オフライン

 

#4 2012-01-22 10:32:27

hmatsue
アドバイザ
登録日: 2009-03-10

Re: DebianでできているPHPでのファイルサイズ取得がUbuntu11.10でできません

前後のコード含めて正しく記述されているのに、passthruで出力をとれないという状況である場合は、
外部コマンドの呼び出し、実行ができていないということなのかも知れません。
apacheやapparmorの設定を確認して、外部コマンドの呼び出しができる状態になっているか確認してみてはいかがでしょう。

オフライン

 

#5 2012-01-22 18:18:22

Rasum
メンバ
登録日: 2008-12-07

Re: DebianでできているPHPでのファイルサイズ取得がUbuntu11.10でできません

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.

オフライン

 

Board footer

Powered by FluxBB