我正在使用一些共享主机并拥有多个网站。每个网站的根文件夹都在域管理器上定义。如果可能的话,有必要从另一个不是网站根文件夹的文件夹中访问某些图像。
实施例
我有一些文件夹结构
example
demo
pictures
- 1.jpg
- 2.jpg
某些网站 www.example.com 指向文件夹示例,但我有一些图片放在我的网站主机的根目录图片< / strong>,文件夹图片没有用某个域定义,我只能从FTP访问它们。对于www.example.com网站,我需要显示图片文件夹中的图片。我知道MODx经理的工作方式是这样,我认为不可能,有人知道吗?
答案 0 :(得分:1)
这里的主要问题是 PHP如何运行,即在哪个用户之下。
然后,您的任何网站都可以访问您所有网站上的所有数据,只需指定绝对路径或相对路径(即.. / .. / ...)。要从浏览器端提供该信息,您需要使用一个带有URL的脚本,例如img.php?img = nameofimage,并使用不是从脚本的目录而是从其他地方获取的图像进行回复。 / p>
您需要验证用户参数,以避免此技巧成为可以访问您网站上所有内容的漏洞。例如,检查文件是否存在,它是否在相应的文件夹中(使用basename()剥离任何其他文件夹),并且它是一个图像(快速方式:getImageSize(),它还允许您收集正确的MIME类型)。
也就是说,www.example.com上的脚本作为exampleuser运行:apache,www.foo.com是foouser:apache的处理程序,依此类推。
在这种情况下你自己无能为力,如果有,那么同样的技巧将允许你阅读任何其他客户的网站,或允许他们阅读你的。你不想把你的习惯带到这样一家托管公司:这是一场等待发生的灾难。
您可以通过主持人的批准来做一些事情:要求他们更改您所有网站上的用户,以便现在所有网站都是同一个用户。然后应用案例1.请注意,此可能会影响其他内容,例如数据库连接(如果用户身份不是直接从PHP提供的,通常是这样)。它不应该适用于你,很可能它不适用于你,但如果你遇到了一些可能的原因。
在某些系统上, foouser 可以允许 baruser 到&#34; sudo&#34;一些功能。这通常需要root(即您的主人的知识,批准和可能的工作),但在某些设置中,您可以自己完成此操作。此时,您将能够使用cat
等命令运行脚本,并将文件复制到标准输出。虽然可能,但 凌乱而且效率不高。
妥协(仍然需要主持人的批准)是创建一个用户组(miomirgroup),将一些用户(exampleuser,foouser,baruser ...)放入该组,然后给予组读取权限您自己空间中的文件夹,以便对miomirgroup
进行分组。仅对于该文件夹,PHP的行为就像是案例1一样。
答案 1 :(得分:0)
图像需要放在公共文件夹中才能访问。您可以通过将图像放在公用文件夹中,或者将PHP脚本放在检索“隐藏”图像的公共文件夹中并将它们发送给它们打开请求来完成此操作。
示例1 - 公用文件夹中的图像
例如,假设“/ public”是我们的公共www文件夹,“/ private”是FTP服务器上无法从网络访问的文件夹。
您可以访问/ public文件夹:
/wwwsites/mysite/public/images/hello.png
Link to image: <img src="/images/hello.png">
由于Web服务器不允许访问,因此无法访问专用文件夹。 /wwwsites/mysite/private/images/hello.png 链接到图像:(不可能)
示例2 - 使用PHP脚本检索“隐藏”图像 http://php.net/manual/en/function.imagepng.php
$im = imagecreatefrompng("test.png");
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
答案 2 :(得分:0)
在要从中访问图像的服务器中创建文件img.php
<?php
//add all the image's names to this array for white listing
$images = Array( "1.png",
"2.png");
if(isset($_GET['image']) AND !empty($_GET['image'])){
$request = $_GET['image'];
if(in_array($request,$images)){
header('Content-Type: image/png');
include_once('/path/to/non-root/folder'.$request);
}
}
现在您可以使用some.thing / img.php?image = 1.png
访问这些文件