0

我正在研究这个简单的脚本,它根据数据库值找到一个图像 url,然后回显它以显示图像,或者如果没有可用的图像,则使用默认图像。

但是有一些问题,因为它每次都返回默认图像。如果我用 $image 行替换默认回显行,它会显示。因此,我知道它可以找到图像的 URL。

<?php
$image = CONST_IMG_URL.$FetchData['capcode'].".jpg";            
error_reporting(0);

if (getimagesize($image)) {
echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>";
} 

else {
echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg'     width='300' height='150'/>";}
?>
4

4 回答 4

1

在你的例子中,getimagesize没有做任何有成效的事情。我建议使用file_exists..

为了file_exists正常工作 - 您需要提供完整路径(不是 URI)。

因此,您可以执行以下操作:$_SERVER['DOCUMENT_ROOT'] . '/path/to/images/' . $image;

像这样:

if(file_exists( '/full/path/to/image/dir/' . $image ))
{
    echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>";
} else {
    echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg' width='300' height='150'/>";
}

解释

getimagesize- 这将返回array与图像相关的属性,而不是显式返回图像是否存在,事实上,如果图像不存在,它将引发警告而不是false按预期返回。

file_exists- 这会检查文件,true如果存在则返回,false如果文件不存在则返回 - 这正是您在场景中寻找的内容

于 2013-10-18T12:38:58.853 回答
0

您应该使用 file_exists 函数而不是 getimagesize:

<?php
$image = CONST_IMG_URL.$FetchData['capcode'].".jpg";            
error_reporting(0);

if (file_exists($image)) {
  echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>";
} 
else {
  echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg'     width='300' height='150'/>";}
?>
于 2013-10-18T12:38:05.173 回答
0

您应该使用下一个代码:

try {
    $img = @getimagesize($image);
    echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>";
} catch(Exception $e) {
    echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg'     width='300' height='150'/>";
}
于 2013-10-18T12:31:16.873 回答
0

作为猜测,您CONST_IMG_URL是相对于网站的路径 - 而不是文件系统。

getimagesize()方法使用相对或绝对路径名(即/var/www/images/uploaded/pic.jpgimages/uploaded/pic.jpg)在文件系统本身上查找图像。它还可以通过 URL 查找图像,例如http://example.com/images/uploaded/pic.jpg.

如果CONST_IMG_URL是一个没有域部分的路径,getimagesize()它将查看该图像的文件系统,并且很有可能它不存在。例如,如果CONST_IMG_URLis /images/uploaded/,该方法将在服务器上检查该绝对路径 - 因为它将前导/视为“服务器的根目录”,而不是“在您的网站文件夹内”,所以该绝对路径将不存在。

为了解决这个问题,您可以采取两种方法(如果您想继续使用getimagesize())。

  1. 第一个是创建CONST_IMG_URL一个包含您的域的绝对路径:

    define('CONST_IMG_URL', 'http://domain.com/images/uploaded');
    
  2. 第二个是在调用 getimagesize() 时将完整的文档根附加到路径中:

    if (getimagesize($_SERVER['DOCUMENT_ROOT'] . '/' . $image)) {
    

如果您要使用上面的#2,我实际上建议您使用不同的方法file_exists()。此函数将简单地检查文件是否存在,而不是加载文件以从中提取参数信息(宽度、高度等),并将使页面加载更有效=]。

于 2013-10-18T12:37:12.673 回答