【发布时间】:2015-01-22 19:18:08
【问题描述】:
我有一个使用 imagecreatefromjpeg() 的长函数。
function myFunction() {
...
...
$im = imagecreatetruecolor(600, 400);
$myImage = imagecreatefromjpeg("http://example.com/file.jpeg");
imagecopy($im, $myImage , 5, 5, 0, 0, 48, 48);
...
...
...
...
}
我从远程 URL 加载 jpeg 文件。所以由于服务器负载,有时我会得到:
Warning: Warning (2): imagecreatefromjpeg(http://example.com/file.jpeg):
failed to open stream: Connection timed out in
[/var/www/vhosts/example2.com/httpdocs/myfile.php, line 1851]
所有的执行时间都花在了这个文件上,所以我的函数的其余部分的请求变得不成功
虽然我需要下载最新的 jpeg 文件,但运行剩余代码对我来说是可以接受的。
我正在寻找这样的解决方案:
- 试试这个:从 jpeg 文件创建图像
- 如果 5 秒后不成功,请跳过
- 运行剩余代码。
编辑:
- 我偶尔会收到此错误。大多数请求成功。所以 allow_url_fopen 不是问题。
- 这个 jpeg 文件经常变化,比如一个小时一次。
【问题讨论】:
-
检查您的 php ini 设置是否为 allow_url_fopen,也许您不允许从 URL 打开文件。
Warning Windows versions of PHP prior to PHP 4.3.0 do not support access of remote files via this function, even if allow_url_fopen is enabled.php.net/manual/en/function.imagecreatefromjpeg.php -
如果该文件在您自己的服务器上,那么对自己进行 http 请求实际上是没有意义的。 PHP 不需要通过 http 来访问文件系统。你只需要
imagecreatefromjpeg('/path/on/filesystem/file.jpg') -
在从远程文件创建 jpg 之前,请先将其下载到本地。
-
使用 HTTP 客户端库下载文件,这将允许您设置下载超时,一旦达到超时,将引发异常,您将能够对此采取行动.
标签: php image jpeg gd connection-timeout