我整天都因为这个错误而自杀。我不能告诉你我对此有多大帮助表示感谢。
基本上,我有一个非常简单的脚本。它登录到一个网站,查看文件的标题以查看它是否是图像类型,然后下载它。然后重复这三次。
这里的问题是,如果没有curl_exec使用-no-错误导致整个脚本崩溃,我就无法设置CURLOPT_NOBODY。 (我甚至无法调用或获取curl_error!)似乎我不可能从CURLOPT_NOBODY转到CURLOPT_NOBODY,false。下面的循环运行一次然后die()。
可能导致此错误的原因是什么?
这是脚本:
// Log into the Website
curl_setopt($ch, CURLOPT_URL, 'http://myexample.com/login');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_exec($ch);
// Begin the Loop for Finding Images
for($i = 0; $i < 3; $i++) {
curl_setopt($ch, CURLOPT_URL, 'http://myexample.com/file.php?id=' . $i);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$output = curl_exec($ch) or die('WHY DOES THIS DIE!!!');
$curl_info = curl_getinfo($ch);
echo '<br/>' . $output;
// (Normally checks for content type here) Download the File
curl_setopt($ch, CURLOPT_URL, 'http://myexample.com/file.php?id=' . $i);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
$filename = 'downloads/test-' . $i . '.jpg';
$fp = fopen($filename, 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
}
我正在运行apache 2.2和PHP版本5.2.13。 谢谢你的帮助 - 我不能告诉你我有多喜欢它。我完全被困在这里了。 :(
答案 0 :(得分:1)
在我看来,卷曲库变得混乱,特别是在重用资源时。
你应该做
$ch = curl_init(); // do stuff with curl curl_close($ch); $ch = curl_init(); // another curl call curl_close($ch); $ch = curl_init(); // yet another curl call curl_close($ch);
执行脚本时遇到了同样的错误,但添加curl_close和curl_init重新初始化,似乎解决了问题。如果没有,我不知道这是否可以接受。我使用fopen()进行http下载,它比使用curl更直观,除非你需要fopen不支持的东西。