PHP getimagesize脚本问题

时间:2013-10-18 12:25:50

标签: php if-statement echo getimagesize

我正在研究这个简单的脚本,该脚本根据数据库值查找图像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 个答案:

答案 0 :(得分: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 - 这正是您在文件中寻找的内容方案

答案 1 :(得分: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'/>";
}

答案 2 :(得分:0)

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

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

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

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

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

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

    if (getimagesize($_SERVER['DOCUMENT_ROOT'] . '/' . $image)) {
    
  3. 如果您打算使用上面的#2,我实际上建议您使用其他方法file_exists()。此函数将简单地检查文件是否存在与加载文件相反,以从中提取参数信息(宽度,高度等),并使页面加载稍微更高效=]。

答案 3 :(得分: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'/>";}
?>