504 Proxy Timeout引发的错误

PHP编程者 2010-12-23 03:46:47
这段代码当$fucknum比较大时,比如1000时,就会出现504 Proxy Timeout错误,而且报错后程序继续执行,而我需要这个函数返回的ture值,再根据返回的值执行别的程序代码,$fucknum值比较小时不会出现这个错误,什么原因?请各位指点下
function autonew360buy($arr){
$fucknum=intval($arr['fucknum']); // # 获取抓取条数的整数值
$outime=$fucknum*2+100;
set_time_limit($outime);//设置脚本执行时间
$nextnum=20;//连续查找10次不存在则终止
$sn=$arr['sn'];
while($nextnum>0){
$arr1 = $arr2 = array();
$sn=$sn+1;
$url=$GLOBALS['competitor'][0]['product'].$sn.'.html';
$str =@(file_get_contents($url));

$preg ='/(href="http:\/\/www\.360buy\.com\/brands\/)(\d+)-(\d+)(\.html")/';
$preg2 ='/(href="http:\/\/www\.360buy\.com\/product\/)(\d+)(\.html">)(.*)(<\/a>)/';
$str = iconv("gbk","UTF-8",$str);

preg_match($preg,$str,$arr1);
preg_match($preg2,$str,$arr2);
if(empty($arr1) || empty($arr2)){
$nextnum--;
}else{
$preg='/http\:\/\/price\.360buy\.com\/price-d-(.*)\.html/';
preg_match($preg,$str,$arrp);
$url=$arrp[0];
$str = @(file_get_contents($url));

// $preg='/var jdprice={"P":"\\\uFFE5(\d+)\.(\d+)","I":(\d+)};/';
$preg="/document\.write\('(.*[^\d])(\d+\.\d\d)'\);/";

if(!preg_match($preg,$str,$arrp)){
}else{
// $price=$arrp[1].".".$arrp[2];
$price=$arrp[2];
$autoarr=array('cid'=>$arr1[2],'name_360buy'=>$arr2[4],'price_360buy'=>$price,'sn_360buy'=>$sn);
$this->addnew_360buy($autoarr);
}
$nextnum=20;
$fucknum--;
if($fucknum < 1) return true;
}
}
return true;
}

上面的程序会返值到下面的函数:
function autonew360buyAction(){
$jd = new competitor_360buy_site();
if($jd->autonew360buy($_GET)){
echo 'ok';
}else{
echo 'no';
}
//echo $jd->autonew360buy($_GET);
$this->noview();
}

“ok”或“no”值会传给下面的js函数,输出相应的值
function autonew360buy(obj){
var str = new Object();

if(obj.sn.value.trim()==''){
alert('你必须输入起始的商品序号!');
return false;
}
$('#autonew360buyresult').html('<img src="style/images/loading2.gif"/>');
$('#autonew360buybutton').attr('disabled',true);
str.sn=obj.sn.value;
str.fucknum=obj.fucknum.value;
str.rs = 'newproduct';
str.act = 'autonew360buy';

$.get('index.php',str,function(s){
if(s=='ok'){
$('#result').html('抓取完成!');
}else{
$('#result').html('脚本执行超时导致抓取中断,请刷新页面重新抓取!');
}
$("#result").show(200);
$('#autonew360buyresult').html('');
$('#autonew360buybutton').attr('disabled',false);
});
}

如果$fucknum值较小时,比如200以内,能正常输出“抓取完成”或“脚本执行超时导致抓取中断,请刷新页面重新抓取!”,
但是当$fucknum值超过200时,用firebug会检测到“504 proxy timeout”错误,而循环继续执行,最后却得不到输出结果,请各位帮忙看下是什么原因。
...全文
507 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
在-云端 2010-12-31
  • 打赏
  • 举报
回复
....jf!
PHP编程者 2010-12-23
  • 打赏
  • 举报
回复
如何才能在产生“504 proxy timeout”
的时候也返回“抓取完成”或“脚本执行超时导致抓取中断,请刷新页面重新抓取!”

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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