我通过 PHP 扫描本地计算机上的一堆文件夹以查找图像并自动生成必要的 HTML 代码 ( <img...>
),将一些图片包含到网站中。但浏览器不显示图片,而是 - 按照图片的链接 - “禁止:您无权访问...”。
权限设置为 755(文件夹)和 644(文件)。当我在 Gimp 中打开图像并将它们保存为新文件时,浏览器将显示它们,即使我没有更改任何内容;只是打开和保存。问题是,我有数百张图片,我不想逐一打开每张图片。新文件和原始文件确实具有相同的权限。以下是证明: 末尾带有下划线的文件可以运行 (Baummarder Mai 14_.JPG)。其余文件则不行。
需要说明的是:我在同一个文件夹中有工作图片和不工作图片。我用 Gimp 保存为新文件的图片会显示出来,而原始图片(在同一个文件夹中)会显示“拒绝访问”默认图像。
Error_log 说:
(13)Permission denied: [client 127.0.0.1:38192] AH00035: access to /auwaldstation/quiz/Wildkamera/Bilder/Wildschwein/SchweinCdy00008.JPG denied (filesystem path '/var/www/html/auwaldstation/quiz/Wildkamera/Bilder/Wildschwein/SchweinCdy00008.JPG') because search permissions are missing on a component of the path, referer: http://localhost/auwaldstation/quiz/wildkamera_bilder.php
尽管完全的文件路径设置为 755。
(不要介意它是不同子文件夹中的不同文件 - 权限和将其包含在页面中的方式是相同的)
我很好奇问题可能出在哪里。可能是元数据导致的吗?我检查了这些,但没有发现任何明显的原因。这些文件是否可能以某种方式损坏或具有错误的元数据/标头或任何其他可能引起此类行为的东西?这是一个奇怪的权限处理错误/功能,即我没有创建也不拥有的文件?
有没有什么方法可以解决这个问题?是否可以使用一些 PHP 魔法来显示这些图片?
更新:我刚刚发现,以下 PHP 代码根本无法将原始图片识别为图像。但它可以将新创建的图片识别为图像。
function is_image($path)
{
$a = getimagesize($path);
$image_type = $a[2];
if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
{
return true;
}
return false;
}
顺便说一句:这些照片是用追踪摄像机拍摄的。不存在版权冲突。
使用:Fedora 23、Apache 2.4.23、PHP、HTML/CSS
答案1
解决方案与 SELINUX 上下文有关。通过 chcon 更改了上下文。现在它起作用了。 http://www.linux-commands-examples.com/chcon