イメージ プロセッサの PHP スクリプトがあり、次のコードが含まれています。
if (!is_dir($fullFile)) {
if (is_readable($fullFile)) {
$im = getimagesize($fullFile); // Will be FALSE if not an image
場合によっては、スクリプトが getimagesize で失敗し、次のエラーが表示されます。
getimagesize(/path/to/file.jpg) [function.getimagesize]: failed to open stream: Permission denied at www.yada.yada/page.php
この場合、/path/to/file.jpg のアクセス許可は絶対に禁止されている (400) ため、is_readable テストがその時点に到達するのを妨げると予想していました。アクセス許可を別の方法で設定する以外に、これを解決するにはどうすればよいですか? is_readable の結果が間違っているように見えるのはなぜですか? getimagesize ではなく、is_readable がファイル所有者の EUID で動作している可能性はありますか? それが私にとって意味のある唯一の説明ですが、その知識でさえ解決には役立ちません.
@hek2mgl に促されて、この非常に複雑なスクリプトを readable.php という名前で作成しました。
<?php echo is_readable("/stora2/Pics/2009/2009-07-26/DSC00532.JPG") . "\n\n"; ?>
次に、ユーザーをWebサーバーユーザー(実際にはこのサーバーのwww-data)に切り替えて実行しました。結果は
1
次に、同じユーザーとして strace を実行しました。これらは私が使用したコマンドです。結果は 70KB 以上のファイルであり、SO はその全体を投稿することを許可していないため、http://pastebin.com/mFqiSBiz に投稿します。
dennis@luke:~$ sudo su - www-data
$ ls -l "/stora2/Pics/2009/2009-07-26/DSC00532.JPG"
-rw------- 1 dennis dennis 524288 2012-02-11 08:18 /stora2/Pics/2009/2009-07-26/DSC00532.JPG
$ file "/stora2/Pics/2009/2009-07-26/DSC00532.JPG"
/stora2/Pics/2009/2009-07-26/DSC00532.JPG: writable, regular file, no read permission
$ php /home/dennis/readable.php
1
$ strace php /home/dennis/readable.php > /tmp/strace.out 2>&1
私が探しているものがわからない。お知らせ下さい。