我有一个图像处理器 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 的结果不正确?is_readable 是否有可能使用文件所有者的 EUID 进行操作,而 getimagesize 不是?这是唯一对我有意义的解释,但即使是这种知识也无助于解决问题。
在@hek2mgl 的提示下,我创建了这个超复杂的脚本,名为 readable.php:
<?php echo is_readable("/stora2/Pics/2009/2009-07-26/DSC00532.JPG") . "\n\n"; ?>
然后我将用户切换到 Web 服务器用户(实际上是该服务器上的 www-data)并运行它。结果是
1
然后我以同一个用户的身份运行 strace。这些是我使用的命令。结果是一个 70KB+ 的文件,所以我不让我完整地发布它,所以它发布在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
不知道我在找什么。请指教。