Edw*_*ams 2 php directory permissions cpanel
这真是愚蠢,但我一直在尝试几十种不同的事情,我不能为我的生活弄清楚我做错了什么.
我有一个cpanel安装,使用通常的public_html目录并访问下面的目录(调用该目录"USER").我正在用图像测试一些东西.
我已将一个图像文件放在public_html上面的USER目录中.
我写了一个测试PHP脚本,它只有几行:
if(is_file("../1.jpg")){
echo "<img src=\"../1.jpg\" />";
}else{
echo "not there";
}
Run Code Online (Sandbox Code Playgroud)
is_file总能找到该文件.还尝试了file_exists和is_readable,这些都可以找到文件.
但即使脚本看到该文件,我也无法确定如何将该文件输出到浏览器.或者即使有可能这样做.
我已将文件的权限更改为可读.
我试过从根开始放一个绝对路径.
我尝试使用imagejpeg.
这些都不起作用.
您可能想知道为什么我不只是将图像放在public_html中,但是这个脚本是我正在做的测试因为我需要弄清楚在同一服务器上提供来自其他域/帐户的图像时有什么可能(它是一个专用的服务器).
我可以理解,也许这是一个权限的事情或者什么 - 在这种情况下我不明白为什么脚本可以找到文件 - 好吧无论如何我可能忽略了一些非常愚蠢或基本的东西.所以如果有人能指出我正确的方向,我会很感激.
非常感谢
Mar*_*c B 11
那是不可能做到的.当您输出img标签时,这只是服务器上的一些文本.它被发送到浏览器,浏览器试图获取该src="..."部分中列出的文件.这是通过HTTP请求完成的,因此如果图像位于文档根目录之外,则无法按定义直接获取文件.
如果您只是src="../../../../picture.jpg"在文档根目录之外执行并获取图像,则可以在服务器上获取任何文件,包括配置文件,密码文件,等等等等.这是一个足以让人有资格疯狂的安全漏洞.
如果要提供对文档根目录之外的文件的访问权限,则必须通过脚本执行此操作.最简单的方法是:
image.php:
<?php
header('Content-type: image/jpeg');
readfile('/path/to/picture/outside/doc/root/file.jpg');
Run Code Online (Sandbox Code Playgroud)
在你的HTML中:
<img src="image.php">
Run Code Online (Sandbox Code Playgroud)
还有其他更糟糕的选择,例如使用Apache别名指令将外部目录映射到"内部"目录,重写URL等等......但这只会使事情变得更加复杂.