5

イメージ プロセッサの 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

私が探しているものがわからない。お知らせ下さい。

4

1 に答える 1

2

実行しているphpのバージョンによっては、コメントでhek2mglが述べたように、これはバグである可能性があります。これを回避したい場合は、filepermsを使用して、ファイルのアクセス許可に基づいてロジックを追加できます。

于 2013-01-09T00:52:24.653 に答える