1

我的计算机上有一个 localhost Apache/PHP 配置。我希望能够

1)使用绝对路径检查图像文件的存在和

2) 使用相同的 URL 显示它

我想做的一个简单的例子:

if(file_exists($url)) {
    echo '<img src="' . $url . '" />';
}

如果我设置...

$url = 'http://' . $_SERVER['HTTP_HOST'] . '/myimg.jpg';

然后 file_exists 将返回 false,因为 URL 是 Web 路径 (http://localhost/myimg.jpg)。


如果我设置...

$url = $_SERVER['DOCUMENT_ROOT'] . '/myimg.jpg';

它将识别文件存在(C:/htdocs/myimg.jpg),但无法显示图像,因为它无法访问图像源。如果我查看源代码并将 URL 复制/粘贴到 Web 浏览器的地址栏中,则图像显示得很好。


也许我在 Apache 的 httpd.conf 文件或 PHP.ini 中遗漏了一些东西?也许是某种别名声明。此外,站点完成后将上传到远程 Web 服务器(例如 bluehost.com),因此我需要一个通用的解决方案。

PHP.ini 中的 allow_url_fopen 已打开,每次我在 httpd.conf 或 PHP.ini 中进行更改时,我都会重新启动服务器。我已经为此苦苦挣扎了好几天,所以即使是正确方向的一点也将不胜感激:)

谢谢。

4

3 回答 3

1

您将服务器端文件访问与客户端混淆了。

$url = 'http://' . $_SERVER['HTTP_HOST'] . '/myimg.jpg';

这会生成一个 URI,供客户端使用,以通过 HTTP 获取您的图像。例如http://example.com/myimg.jpg


$url = $_SERVER['DOCUMENT_ROOT'] . '/myimg.jpg';

这会生成一个供 PHP 使用的文件系统路径。例如/var/www/htdocs/myimg.jpg


您的解决方案需要同时使用

$img = '/myimg.jpg';

if(file_exists($_SERVER['DOCUMENT_ROOT'] . $img)) {
    echo '<img src="', $_SERVER['HTTP_HOST'], $img, '" />';
}

编辑:您可能可以将这echo一行替换为

echo '<img src="', $img, '" />';

作为绝对 URL(以正斜杠开头)总是从文档根开始

于 2010-11-15T05:04:41.187 回答
0
<?php
$url = "/myimg.jpg";
if( file_exists($_SERVER['DOCUMENT_ROOT'].$url))
    echo "<img src='".$url."' />";
?>

这将为您提供 HTML:

<img src='/myimg.jpg' />

这是图像,因为它是从域名解析的。

于 2010-11-15T05:04:12.420 回答
0

采用的绝对路径file_exists与您的 Web 路径完全不同。您只需要在标签中使用单独的路径file_existssrc属性即可。img

$img = 'myimg.jpg';
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . $img) {
    echo '<img src=' . $img . ' />';
}
于 2010-11-15T05:04:46.943 回答