7

我正在尝试让个人资料照片显示在我正在开发的网站上的评论列表中。如果他们没有个人资料照片,我会显示一个标准图像,不幸的是,即使存在,图像总是会转到标准图像而不是个人资料。继承人的代码:

$reviewerPic = 'http://www.[URL].co.uk/images/members/' . $reviewPosterId . '/profilePic.jpg';
$default_pic = 'http://www.[URL].co.uk/images/background.jpg';
    if(file_exists($reviewerPic)){
        $reviewer_pic = '<img src="' . $reviewerPic . '" width="100px" style="float: left; margin: 20px;" />';
    }else {
        $reviewer_pic = '<img src="' . $default_pic . '" width="100px" style="float: left; margin: 20px;" />';
}

非常通用的代码,但它似乎不起作用!它只是一直显示背景图像...

关于为什么 file_exists 不起作用的任何想法?

4

8 回答 8

20

您正在使用的函数file_exists使用物理路径,您需要提供的参数应该是可以找到文件的服务器上的地址,而不是 url

Sou你应该有类似的东西

/home/var/www/images/

代替

http://www.[URL].co.uk/images/

因此,您需要检查该文件是否存在于本地服务器上,然后您可以使用 url 使其对公众可用(在 img src 中)

您可以在手册页上看到此功能仅适用于某些URL 包装器,因此最好使用路径而不是 url(我想这取决于 allow url fopen 设置)

于 2012-06-06T11:35:07.330 回答
5

file_exists不适用于 HTTP,

使用 :$_SERVER["DOCUMENT_ROOT"]访问主机中的 root

所以

$reviewerPic = $_SERVER["DOCUMENT_ROOT"].'/images/members/' . $reviewPosterId .  '/profilePic.jpg';
$default_pic = $_SERVER["DOCUMENT_ROOT"].'/images/background.jpg';
于 2012-06-06T11:36:37.387 回答
1

File_exists 使用 /home/www/username/public_html/ 格式。您可能想从您的主机中检索它。

所以它会是这样的/home/www/jack/public_html/[URL].co.uk/profilepic/id/profilePic.jpg

顺便说一句,不需要.在你的echo '<img src=.... 您可以在字符串中使用变量,您应该只.在需要使用函数或其他东西修改它时使用,例如"string0".function($str....)."string1";

于 2012-06-06T11:34:47.423 回答
1

根据file_exists的 PHP 手册,并非所有协议都支持该功能:

这个函数也可以与一些URL 包装器一起使用。请参阅 支持的协议和包装器以确定哪些包装器支持 stat() 系列功能。

HTTP 包装器不支持stat

支持 stat() 否

于 2012-06-06T11:36:38.543 回答
0

file_existsPHP 函数仅适用于物理文件,例如或/var/www/file.ext不适C:\WWW\File.ext用于 HTTP 文件。它甚至不知道如何处理 HTTP 文件。

在这种情况下,如果您想知道文件是否存在,因为它将是一个 HTTP 响应,您可以尝试使用curl,如果它以 响应404,则找不到该文件。

有关更多信息,请查看以下内容: http: //php.net/manual/en/function.file-exists.phphttp://php.net/manual/en/book.curl.php

于 2012-06-06T11:35:44.437 回答
0

file_exists不支持远程 URL。

你可以试试这个:

if (fopen($reviewerPic, "r"))
   echo "File exists!";
于 2012-06-06T11:36:53.467 回答
0

尝试简单的一种。

$reviewerPic = 'http://www.[URL].co.uk/images/members/' . $reviewPosterId . '/profilePic.jpg';
$default_pic = 'http://www.[URL].co.uk/images/background.jpg';
    if($fileopen = @fopen($reviewerPic)){
        $reviewer_pic = '<img src="' . $reviewerPic . '" width="100px" style="float: left; margin: 20px;" />';
       fclose($fileopen);
    }else {
        $reviewer_pic = '<img src="' . $default_pic . '" width="100px" style="float: left; margin: 20px;" />';
}
于 2016-06-25T12:39:33.600 回答
0

一个很好的处理方法就在这里~

<?php

$imgok="1.webp"; // Your actual image
$imgerr="template.webp"; // If image is missing
$dir="/assets/image/products/"; // Location of the image directory

$path = $_SERVER['DOCUMENT_ROOT'].$dir. $imgok; // Full Paths for processing

echo file_exists($path) ? $dir.$imgok : $dir.$imgerr; // Actual paths for domain to get the image

?>
于 2021-03-20T16:54:44.970 回答