我使用这个开源的http://code.google.com/p/timthumb/
但我尝试创建一个拇指从我的主机得到一个错误,这个链接图像希望创建一个拇指。
http://pixhost.info/avaxhome/94/91/00179194.jpeg
error reading file http://pixhost.info/avaxhome/94/91/00179194.jpeg from remote host: Failed writing body (37 != 1448)
Query String : src=http://pixhost.info/avaxhome/94/91/00179194.jpeg发布于 2010-12-07 16:53:55
您应该已经在要找到timthumb.php的目录中手动创建了两个子文件夹cache和temp。这些子文件夹需要将权限设置为尽可能开放(在linux计算机上为777),以便让服务器用户帐户写入这些子文件夹。那么一切都会好起来的。请注意,你不能从网上抓取图片(据我所知)。图片应该放在本地机器上。
示例:http://myserver.com/web/timthumb.php?src=scotland.jpg
发布于 2010-12-07 17:04:51
该错误似乎来自curl命令:
$ch = curl_init ($src);
curl_setopt ($ch, CURLOPT_TIMEOUT, 15);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
curl_setopt ($ch, CURLOPT_URL, $src);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
curl_setopt ($ch, CURLOPT_FILE, $fh);
if (curl_exec ($ch) === FALSE) {
if (file_exists ($local_filepath)) {
unlink ($local_filepath);
}
display_error ('error reading file ' . $src . ' from remote host: ' . curl_error($ch));
}
curl_close ($ch);
fclose ($fh);可能是超时造成的。您可以在@ line 607更改它
编辑:
好吧,我测试了它(因为有人不认为指出代码做了错误和猜测是不够的),它在我的服务器上完美地工作。
所以它可以是:
没有创建超时缓存目录‘./
fopen不工作。它用于将远程图像保存在服务器上;如果没有地方保存,则curl命令将失败。发布于 2010-12-07 17:42:39
这很简单,因为您要求curl创建一个您的操作系统(或者更准确地说,您的文件系统)不允许它使用的文件名。
您的代码指定如果文件不存在,则继续从url获取副本,并且决不会在PHP脚本中创建本地文件。
在CURL中,你的代码说
$fh = fopen ($local_filepath, 'w');在PHP w中有一个描述:
仅以写入方式打开;将文件指针放在文件的开头,并将文件截断为零长度。如果文件不存在,会尝试将其创建为。
无法创建文件的主要原因是文件夹权限,因为我们对该文件夹(define ('DIRECTORY_CACHE', './cache');)有一个常量,您需要在执行脚本的同一目录中有一个名为cache的文件夹。/
之后,将文件夹切换到777,然后再次运行该脚本
https://stackoverflow.com/questions/4374669
复制相似问题