PHP is_readable 为不可读文件返回 true

标签 php file-permissions getimagesize

我有一个图像处理器 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

不确定我在寻找什么。请指教。

最佳答案

根据您运行的 php 版本,这可能是一个错误,正如 hek2mgl 在评论中所说。如果你想解决这个问题,你可以添加基于文件权限的逻辑,使用 fileperms

关于PHP is_readable 为不可读文件返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226386/

相关文章:

PHP cURL 突然无缘无故无法工作

php - PHP PEAR Mail->发送成功/失败结果?

javascript - 获取不同名称的单选按钮的表单数据

PHP getimagesize() 抛出 "SSL: The specified procedure could not be found"

php - 如何检查上传的文件是否是受支持的文件

php - 维护良好的 PHP SMTP 身份验证类,无需发送电子邮件(登录测试)?

php - 在 IIS 7 上添加对 PHP 的写入权限

linux - PyCharm 中项目目录的读写权限

java - 从 JApplet 读取文件

php - 如何检查图像完整性?