【发布时间】:2011-10-06 17:03:55
【问题描述】:
我有一个包含几千个 URL 的数据库,我正在检查页面上的链接(最终查找特定链接),因此我通过循环抛出以下函数,并且每隔一段时间,其中一个 URL 是错误的然后整个程序停止运行并开始建立使用的内存。我认为添加 CURLOPT_TIMEOUT 可以解决此问题,但事实并非如此。有什么想法吗?
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_TIMEOUT => 2, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_POST => 0, // i am sending post data
CURLOPT_POSTFIELDS => $curl_data, // this are my post vars
CURLOPT_SSL_VERIFYHOST => 0, // don't verify ssl
CURLOPT_SSL_VERIFYPEER => false, //
CURLOPT_VERBOSE => 1 //
);
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch) ;
$header = curl_getinfo($ch);
curl_close($ch);
// $header['errno'] = $err;
// $header['errmsg'] = $errmsg;
$header['content'] = $content;
#Extract the raw URl from the current one
$scheme = parse_url($url, PHP_URL_SCHEME); //Ex: http
$host = parse_url($url, PHP_URL_HOST); //Ex: www.google.com
$raw_url = $scheme . '://' . $host; //Ex: http://www.google.com
#Replace the relative link by an absolute one
$relative = array();
$absolute = array();
#String to search
$relative[0] = '/src="\//';
$relative[1] = '/href="\//';
#String to remplace by
$absolute[0] = 'src="' . $raw_url . '/';
$absolute[1] = 'href="' . $raw_url . '/';
$source = preg_replace($relative, $absolute, $content); //Ex: src="/image/google.png" to src="http://www.google.com/image/google.png"
return $source;
【问题讨论】:
-
您是否在循环中将该函数中的所有内容都扔掉了?
-
这个函数没有在循环中定义,是这个函数然后我的for循环在每次迭代之后调用这个函数。
-
您是否找到了脚本停止的确切代码行?我只是好奇,因为你怎么能说它是具体的功能?如果是的话,是哪几行?
-
@hakre 我假设它来自这个函数,考虑到其余代码是 mysql connect 和一个调用 url 的 for 循环,将其放入该函数,然后打印源代码。 afuzzyllama 不敢相信我错过了,谢谢。但仍然停滞不前。