为什么getimagesize()返回false?

时间:2013-10-31 16:17:21

标签: php getimagesize

我的计算机上有这个代码并且它运行得非常好但是当其他人试图在不同的环境中运行它时,getimagesize()每次因某种原因返回false(应该返回true)。有什么想法为什么这段代码在不同的环境中会完全不同?

$i = 2;
while ($i != 0){
    $theFile = "url/to/images/" . $image . $i . ".GIF";
    //echo $theFile . "<br />";
    if ($imageSize = @getimagesize($theFile)){
        //echo "added...<br />";
        $theRow .= "<a href='" . $theFile . "' rel='lightbox[" . $image . "]'></a>";
        $i++;
    }else{
        $i = 0;
    }
}   

如果我取消注释两行,那么所有$theFile都会打印到屏幕上,并且它们都是有效的网址,但它只是一堆

thisimage2.GIF
thatimage2.GIF
anotherimage2.GIF
...

它们都以2.GIF结尾,但有很多应该有3,4,5,6一直到12.GIF但它永远不会增加$ i因为它永远不会返回true与getimagesize()。同样,当我取消注释echo $theFile . "<br />";时,它会将有效的URL打印到另一个人可以粘贴到浏览器地址栏中的图像,并且可以正常查看图像。

我正在运行php 5.4.17,完全相同的代码对我来说很好。另一台机器正在运行php 5.4.7并且它无法正常工作。我试图查找getimagesize()的两个版本之间的任何差异,但找不到任何东西。

编辑:如果在没有工作的机器上的getimagesize()上没有“@”运行,则会发出以下警告:Warning: getimagesize(): Unable to find the wrapper “https” - did you forget to enable it when you configured PHP?

1 个答案:

答案 0 :(得分:0)

这里有一些错误。幸运的是,大多数都很容易修复。

  1. $image似乎没有在任何地方定义,但也许它已经定义了,你只是没有包含它。
  2. 每个开始和结束<a>标记之间没有文字,所以你唯一看到的就是这样的链接:<a href='url/to/images/imagename1.GIF' rel='lightbox[]'></a>(但同样,也许这是故意的)。
  3. $theRow似乎没有在任何地方回应,但也许它是,你只是没有包括那部分。此外,它似乎不是$theRow最初在任何地方定义的。
  4. 您的while()循环仅显示处理的最后一张图片。在这种情况下,我会改为使用for()循环。
  5. 如果您的目标是建立$theRow,然后在最后显示所有内容,我会选择以下内容:

    <?php
    // EDIT: check to see if openssl exists first, due to the https error you're receiving.
    $extensions = get_loaded_extensions();
    if (!in_array('openssl', $extensions)) {
       echo 'OpenSSL extension not loaded in this environment';
    }
    // Define $theRow first
    $theRow = '';
    // "Given that $i = 0, while $i is less than 3, auto-increment $i"
    for ($i = 0; $i < 3; $i++){
      $theFile = "url/to/images/" . $image . $i . ".GIF";
      //echo $theFile . "<br />";
      // Remove the @ sign to display errors if you want
      if ($imageSize = @getimagesize($theFile)){
        //echo "added...<br />";
        // Add to $theRow, using $theFile as the text displayed in between each <a> tag
        $theRow .= "<a href='" . $theFile . "' rel='lightbox[" . $image . "]'>" . $theFile . "</a>";
      }
      else {
        //This should only appear if $imageSize didn't work.
        echo '$imageSize has not been set for ' . $theFile . '<br />';
      }
    }
    // Now that $theRow has been built, echo the whole thing
    echo $theRow;