-1

我的计算机上有这段代码,它运行得非常好,但是当其他人试图在不同的环境中运行它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的都打印到屏幕上,它们都是有效的 URL,但它只是一堆

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

它们都以 2.GIF 结尾,但有许多应该有 3、4、5、6 一直到 12.GIF,但它永远不会增加 $i,因为它永远不会用 getimagesize() 返回 true。同样,当我取消注释时,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?

4

1 回答 1

0

这里有几件事是错误的。幸运的是,它们中的大多数都很容易修复。

  1. $image似乎没有在任何地方定义,但也许它已经定义并且您只是没有包含它。
  2. 每个开始标签和结束标签之间没有文本<a>,所以您唯一会看到的是这样的链接:(<a href='url/to/images/imagename1.GIF' rel='lightbox[]'></a>但同样,这可能是故意的)。
  3. $theRow似乎没有在任何地方回响,但也许是这样,而您只是没有包括那部分。此外,它看起来也不$theRow是最初在任何地方定义的。
  4. 您的while()循环将仅显示最后处理的图像。在这种情况下,我会改用for()循环。

如果您的目标是建立$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;
于 2013-10-31T18:19:21.347 回答