php链接到默认web目录之外的图像文件

时间:2008-11-03 11:20:20

标签: php html image

这是目录结构

/domain.com
 /public_html
  /functions
  /image
  /mobile
  /www
/domain.com/public_html/www文件夹有一个文件index.php 默认的web目录是/ user / public_html / www 在索引文件中是包含函数的include 包括 “../功能/ function.inc” 这没有问题 当我想链接到图像文件夹中的图片时,我没有得到任何结果 例如

<img src="../image/graphic/logo.gif" alt="alt text"/>

是否有人知道为什么图片链接不起作用以及如何正确链接到图片文件?

我尝试了<img src="<?php echo $_SERVER['PHP_SELF']; ?>../image/graphic/logo.gif" alt="alt text"/>

但这给了我相同的结果 当我在图像周围建立链接以获取属性时,我将其作为路径 http://domain.com/image/pc/tattoo_small/small_2008_10_22_001.JPG 路径应该是 http://domain.com/public_html/image/pc/tattoo_small/small_2008_10_22_001.JPG 当我尝试直接浏览此网址时 http://domain.com/public_html/image/pc/tattoo_small/small_2008_10_22_001.JPG 我收到404文件未找到错误 因为默认的Web目录是 /domain.com/public_html/www 我试过了 http://domain.com/../image/pc/tattoo_small/small_2008_10_22_001.JPG 到达图像文件夹但这对两者都没有帮助。

任何人有任何想法,或者无法将HTML链接到默认网络目录之外的图形文件?

感谢您阅读目前

感谢目前为止的答案。 我将尝试使用推荐的解决方案之一解决我的问题,并在此处报告我的工作解决方案。 我想让图像文件夹与www和移动文件夹处于同一级别,因为用于pc(www)版本和移动版本的一些图像是相同的。 当然,在www和移动文件夹中获取图像文件夹更容易,我认为这就是我要做的。

谢谢大家的建议。我不打算使用脚本的主要原因是脚本将是一个简单问题的难以解决的问题,也因为我不知道如何将您的图像包装在css类中以及如何提供alt图片的文字。

6 个答案:

答案 0 :(得分:32)

无法直接访问webroot之外的文件;这是一个内置的安全限制,这是有充分理由的。

然而,可以使用PHP脚本为您提供这些图像。这样您就可以调用如下图像:

/image.php?file=myfile.jpg

并使用file_get_contents()获取文件内容并将其打印到浏览器中。您还应该使用PHP的header()函数将标头发送到客户端。一个简短的例子:

<?php

    $file = basename(urldecode($_GET['file']));
    $fileDir = '/path/to/files/';

    if (file_exists($fileDir . $file))
    {
        // Note: You should probably do some more checks 
        // on the filetype, size, etc.
        $contents = file_get_contents($fileDir . $file);

        // Note: You should probably implement some kind 
        // of check on filetype
        header('Content-type: image/jpeg');

        echo $contents;
    }

?>

使用脚本可以获得更多优势:

  • 您可以跟踪下载并实施计数器,例如
  • 您可以将文件限制为经过身份验证的用户
  • ...... etc

答案 1 :(得分:16)

如果您使用Apache作为服务器,可以将其设置为httpd.conf中的别名...

<IfModule mod_alias.c>

    Alias /images/ "/User/Public_html/Image/"

    <Directory "/User/Public_html/Image">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>

IIRC,别名文件夹不需要在webroot中。

答案 2 :(得分:9)

您无法提供位于网络目录之外的网页,因为路径不起作用,即http://mydomain.com/../page.html只是指无法访问的位置。

如果你真的想要提供webroot之外的(静态)文件,你可以编写一个小的PHP脚本来读取它们并输出它们。因此,您将请求重定向到PHP脚本,PHP将从磁盘读取相应的文件并将其返回。

答案 3 :(得分:5)

在Web根目录中创建指向所需目录的符号链接。

cd public_html
ln -s ../images

Apache需要Options +FollowSymlinks配置指令才能使用(您可以将其放在网络根目录中的.htaccess中)。

编写从外部Web根目录提供文件的PHP脚本会破坏Web root的目的。您必须非常仔细地验证路径,以避免将整个磁盘暴露给Web。

答案 4 :(得分:1)

无法直接链接到Web服务器的Web可访问区域之外的文件。

但是,您可以编写一个将为您代理图像的PHP脚本

<img src="my_php_proxy.php">

因为PHP可以发送图像数据以及HTML。这个PHP“图像”不限于与Web可访问内容相同的文件夹,它可以访问服务器上的任何可读文件。有关详细信息,请参阅http://www.electrictoolbox.com/image-headers-php/

答案 5 :(得分:0)

您可以链接到public___html中的图像目录,将图像目录移动到public_html,或者,如果您特别喜欢复杂的解决方案,则可以编写一个脚本来读取图像文件并将其输出到用户(当然,除非您制作所有图像的白名单,否则您手中可能存在潜在的安全问题。)