imagecreatefromjpeg 问题.

去圣西罗-为尤文喝彩 2011-12-16 09:36:10
最近在使用imagecreatefromjpeg,imagecopy 缓存一些略缩图,遇见一个奇怪的问题。

1. 浏览器直接输入图片地址,可以正常打开(打开速度很慢)。

2. 使用 imagecreatefromjpeg,产生500错误。

3. 浏览器打开过一次图片,再使用imagecreatefromjpeg,PHP代码可以工作。

4. 加一段curl,先模拟浏览器打开一次图片,再使用imagecreatefromjpeg, PHP代码可以工作。


图片地址: http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/7_nani_6.jpg/450px-7_nani_6.jpg

错误信息:
imagecreatefromjpeg(http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/7_nani_6.jpg/450px-7_nani_6.jpg): failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error


curl 代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/7_nani_6.jpg/450px-7_nani_6.jpg");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');
$gets = curl_exec($ch);
curl_close($ch);


问题:这到底是什么原因造成的?是由于图片地址打开速度慢,imagecreatefromjpeg 抓取时超时?使用curl代码,可以截取图片,但是代码运行时间加倍。有什么方法可以解决吗,比如设置imagecreatefromjpeg超时;直接结合curl和imagecreatefromjpeg,缩短运行时间?谢谢。

PS:试过get_file_contents(图片地址),同样500错误,看来只有curl比较耐心,不会超时,只是运行速度非常慢。
...全文
515 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
ok, 谢谢。
xuzuning 2011-12-21
  • 打赏
  • 举报
回复
CURLOPT_CONNECTTIMEOUT 指定的是连接超时
0 就是总是等待
xuzuning 2011-12-20
  • 打赏
  • 举报
回复
怎么确认图片是否已缓存了呢?

这很简单,比如你使用 file_get_contents 获取远程图片
do {
$s = file_get_contents($url);
}while($im = imagecreatefromstring($s) === FALSE);

你可以保存 $s 以备后用
你可以直接使用图像资源 $im
你还可以在循环中加入有条件中断的代码
  • 打赏
  • 举报
回复
非常感谢老大的指点。
再问一个问题,如果在CURL里加入 curl_setopt($ch,curlopt_connecttimeout,0) ,是不是可以强制curl等待打开完整页面后,再执行下一步程序?
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuzuning 的回复:]
使用 curl 或 file_get_contents 2+ 次,确认远程图片能正确缓存于本地
用 imagecreatefromstring 打开到资源
[/Quote]
老大,怎么确认图片是否已缓存了呢?

思路可不可以这样:用 for 循环 file_get_contents,然后用 getimagesize 判别 缓存到本地的图片尺寸大于10kb,如果是,break;如果否,继续 for 循环?

另外:getimagesize 大于 10k ,是否可以保证图片已经正确被缓存?(错误缓存时,图片都是统一大小1.39KB,会不会出现缓存一半时file_get_contents断线的可能?)

谢谢。
xuzuning 2011-12-19
  • 打赏
  • 举报
回复
使用 curl 或 file_get_contents 2+ 次,确认远程图片能正确缓存于本地
用 imagecreatefromstring 打开到资源
  • 打赏
  • 举报
回复
高手们,有什么好的建议吗?
ohmygirl 2011-12-17
  • 打赏
  • 举报
回复
get_file_contents(图片地址),同样500错误
不错误才怪

file_get_contents

打开的是网络的图片,跟您的网速有关
小在在 2011-12-17
  • 打赏
  • 举报
回复
开启错误调试,查看服务器的错误日志试试~
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 whg4585 的回复:]

开启错误调试,查看服务器的错误日志试试~
[/Quote]
如何查看错误日志?
php.ini里已经开启
display_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

但是打开error.log,没有发现相关的错误提示。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧