【问题标题】:getimagesize is not working on windows 7 but it is working on xpgetimagesize 在 Windows 7 上不工作,但在 xp 上工作
【发布时间】:2012-07-04 14:44:04
【问题描述】:

getimagesize 在 Windows 7 上不工作,但在 XP 上工作。第一次执行时返回FALSE,再次执行时不返回任何内容。

function ezImage($image,$pad = 5,$width = 0,$resize = 'full',$just = 'center',$border = ''){
        ...............
        ...............
        ...............
    $imageInfo = @getimagesize($image);

    if (!$imageInfo) {
    //remove tempfile for remote images
    if ($temp == true) unlink($image);
      return false;
    }

          .............
          .............
 }

在 Windows 7 中,第一次进入 getimagesize 函数时返回 0,第二次调用此函数时根本不返回。我检查了 URL $image 并且没问题。如果我直接在浏览器中输入网址,它会立即显示图像。

第一次执行会引发以下警告消息:

Warning: getimagesize(http://localhost/metornet/metornet_chart_paxalarm.php?title=MetorNet+Statistics&names%5B%5D=03%2F07%2F12%0A08%3A48+-%0A03%2F07%2F12%0A08%3A49&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A49+-%0A03%2F07%2F12%0A08%3A50&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A50+-%0A03%2F07%2F12%0A08%3A51&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A51+-%0A03%2F07%2F12%0A08%3A52&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A52+-%0A03%2F07%2F12%0A08%3A53&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A53+-%0A03%2F07%2F12%0A08%3A54&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A54+-%0A03%2F07%2F12%0A08%3A55&pax%5B%5D=0&alarms%5B%5D=0&rates%5B%5D=0.0&names%5B%5D=03%2F07%2F12%0A08%3A55+-%0A03%2F07%2F12%0A08%3A56&pax%5B%5D=0&am in C:\Program Files\..\..\Includes\ros_pdf_class\class.ezpdf.php on line 1344

第二次执行会抛出这个致命错误: Fatal error: Maximum execution time of 120 seconds exceeded in C:\Program Files\.. \..\Includes\ros_pdf_class\class.ezpdf.php on line 1344

【问题讨论】:

  • 'getimagesize()' 返回一个数组。请分享您的代码,您是如何称呼它的?
  • PHP 是服务器端 - 因此您查看 PHP 页面的操作系统根本不会影响它;因为它都是在服务器上处理的。您确定您的客户端代码是跨浏览器兼容的,并且影响您结果的不是操作系统之间的浏览器差异吗?
  • 我在兼容模式下运行我的 IE 浏览器。然后它也给出了同样的问题。
  • 您的意思是您正在运行 Apache for Windows?
  • 是的,Alvin,我在 Windows 上运行 Apache。

标签: php windows-7 gd


【解决方案1】:

首先,第二个错误表明您正在处理太多信息(超过最大执行时间 120 秒)。出于调试目的,您可以在 php.ini 中更改此设置。

其次,您发布的第一条错误消息有问题。 (可能是对的,但看起来很不对。)同样的部分在里面重复,而且它缺少真正的错误部分。

首先,确保您尝试访问的$image 文件与file_exists() 存在,并且您当前的工作文件夹是getcwd()chdir() 组合的正确文件夹。

您还需要检查您的phpinfo() 输出中的gd 设置,这可能是您缺少所需的库,因为gd 函数(如getimagesize())在该特定库中。

编辑:

我看到您提到 $image 是一个 URL。小心,因为在这种情况下使用远程图像不是一个好方法。您应该始终检索所述图像文件的本地副本(可能使用cURL),然后在本地解析它。

使用下面的函数(source),您可以创建图像文件的本地副本:

function save_image($img, $fullpath)
{
    $ch = curl_init($img);
    
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    
    $rawdata=curl_exec($ch);
    curl_close ($ch);
    
    if(file_exists($fullpath)){
        unlink($fullpath);
    }

    $fp = fopen($fullpath,'x');
    fwrite($fp, $rawdata);
    fclose($fp);
}

$img是图片的远程地址,$fullpath是本地保存路径。

您可以使用ini_get('upload_tmp_dir') 检索保存文件上传(当您使用文件上传的HTML 表单元素时)保存位置的php.ini 配置。在 Linux 上为/tmpXAMPPC:\xampp\tmp

因此,例如,要保存临时文件,您可以转到save_image($img, ini_get('upload_tmp_dir')."/".time() );。它将使用当前时间戳保存一个临时文件,之后可以轻松删除。

【讨论】:

  • +1,非常好的建议和非常广泛的答案,超出了问题的初始范围。我喜欢! :)
  • 感谢 Whisperity,感谢您的回复,但在我的情况下,我无法检查 file_exists,因为文件实际上不是最初创建的。我们正在使用 url 绘制图像,但它没有保存在任何地方。所以,我在 xp 中也测试了 file_exists,在 xp 中也出现了 url 失败。在 php.ini 中,url 设置为“allow_url_fopen = On”。但在 xp 中 getimagesize 能够获取图像的大小,但在 win7 中没有。
  • 我今天观察到的一件新事情是,当我在 getimage 大小中传递系统 IP 地址而不是 localhost 时。它能够返回图像的大小,但是当我给 localhost 时,它无法获得大小并且失败了。但是通过网络浏览器,我能够在这两种情况下获取图像,这意味着当我们使用 IP 地址时当我们也使用 localhost 时。我认为根本问题是它无法通过 win7 中的 getimagesize 访问 localhost。有人对此提供帮助吗?提前谢谢!
  • 尝试使用127.0.0.1 而不是localhost
  • @Whisperity 我已经使用了 127.0.0.1,即使它的行为与 localhost 相同。
【解决方案2】:

由于某些原因,在 Vista 和 Windows 7 中,localhost/127.0.0.1 无法开箱即用。要使其正常工作,您必须将此行添加到 c:\windows\system32\drivers\etc\hosts file:127.0.0.1 localhost

实际上你会在主机文件中找到这一行,但是它被注释了,所以你可以取消注释该行。 getimage size 也可以在 localhost 上正常工作。感谢您的宝贵意见和建议。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2019-02-09
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2014-04-24
    • 2014-11-09
    • 2022-07-05
    相关资源
    最近更新 更多