我正在尝试将个人资料照片显示在我正在处理的网站上的评论列表中。如果他们没有个人资料照片,我会有一个标准的图像来显示,不幸的是,即使它存在,图像总是会转到标准图像而不是个人资料。下面是代码:
$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为什么不起作用的任何想法?
答案 0 :(得分:15)
您正在使用的功能file_exists使用物理路径,您需要提供的参数应该是可以找到文件的服务器上的地址,而不是网址
你应该有类似
的东西/home/var/www/images/
而不是
http://www.[URL].co.uk/images/
因此,您需要检查本地服务器上是否存在该文件,之后您可以使用网址将其提供给公众(在img src中)
您可以在手册页上看到此功能仅适用于某些 URL包装器,因此最好使用路径而不是网址(我猜这取决于允许url fopen设置)
答案 1 :(得分:2)
file_exists
不适用于HTTP,
使用:$_SERVER["DOCUMENT_ROOT"]
访问主机中的root
所以
$reviewerPic = $_SERVER["DOCUMENT_ROOT"].'/images/members/' . $reviewPosterId . '/profilePic.jpg';
$default_pic = $_SERVER["DOCUMENT_ROOT"].'/images/background.jpg';
答案 2 :(得分:1)
File_exists使用/ home / www / username / public_html / format。您可能希望从主机中检索此内容。
所以它会像/home/www/jack/public_html/[URL].co.uk/profilepic/id/profilePic.jpg
。
顺便说一下,您无需在.
中使用echo '<img src=...
。您可以在字符串中使用变量,只有当您需要使用函数或其他内容修改它时才应使用.
,例如"string0".function($str....)."string1";
答案 3 :(得分:1)
根据file_exists的PHP手册,并非所有协议都支持该功能:
此功能还可以与 某些 网址包装一起使用。参考 Supported Protocols and Wrappers确定哪些包装器支持 stat()系列功能。
HTTP wrapper 不支持stat:
支持stat()否
答案 4 :(得分:0)
file_exists
PHP函数仅适用于/var/www/file.ext
或C:\WWW\File.ext
等物理文件,而不适用于HTTP文件。它甚至不知道如何处理HTTP文件。
在这种情况下,如果您想知道文件是否存在,因为它将成为HTTP响应,您可以尝试使用curl
,如果它以404
响应,然后找不到该文件。
有关详细信息,请查看以下内容:http://php.net/manual/en/function.file-exists.php和 http://php.net/manual/en/book.curl.php
答案 5 :(得分:0)
file_exists
不支持远程网址。
你可以试试这个:
if (fopen($reviewerPic, "r"))
echo "File exists!";
答案 6 :(得分: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;" />';
}
答案 7 :(得分: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
?>