首页 >后端开发 >php教程 >PHP循环中进度显示以及"假死"

PHP循环中进度显示以及"假死"

WBOY
WBOY原创
2016-06-23 14:25:091219浏览

理论上程序应该运行完500次然后才显示成功,但是基本只能运行个十来次页面就开始全白(同时网页中载入的标志也消失了),就不再往下继续执行程序了
求助这种问题应该如何解决,谢谢

另外,进度方面不知道应该如何处理。再次感谢


<?PHPfor ($i=1;$i<500;$i++){	file_put_contents("{i}.txt",$i);	sleep(3);	$s = $i/100;	if($s==ceil($s)) {		$s = $i/500;		echo "进度:{$s}<BR>";		}}echo "OK";?>


回复讨论(解决方案)

3秒×500= 多长时间?

不死才怪

3秒×500= 多长时间?
没有设置运行时间,不死才怪

nnd,csdn给我500还让我多发了一次……

跟运行时候太长有关系,你还第次休息了3秒

本来是一个采集再写入数据库的程序,这里只是想表达大概的意思 代码少 易看

set_time_limit吧

以下是我原程序的主要内容

<?php 	require_once("config.php");	session_start();		if($_SESSION['admin']!="ok"){		header("Location: login.php");		exit;	}    $_GET['act']?$act=$_GET['act']:$act="view";    if(!in_array($act,array("save","scan","view"))){        $act="view";    }	/*		保存后台设置	*/		if($act=="save"){		$data=array(            "appOAuthkey"=>$_POST["appOAuthkey"],            "user"=>$_POST["user"],            "pw"=>$_POST["pw"],            "appOAuthID"=>$_POST["appOAuthID"],            "accessToken"=>$_POST["accessToken"],            "appOAuthkey"=>$_POST["appOAuthkey"],            "lirun"=>$_POST["lirun"],            "uin"=>$_POST["uin"]        );        $db->row_update("config",$data,"id=1");        if($db->get_errno()){            alert_back("设置失败!");        }else{            alert_back("设置成功!");        }	}    $conf=$db->row_query_one("select * from config where id=1");    $data=$db->row_query("select * from data");	if($act=="scan"){		//$db->row_delete("data","");		$itemState = $_POST['itemState'];//商品状态		$PageSize = GetPageSize($itemState);//商品页数		for ($i=1; $i<=$PageSize; $i++) {			$htm = GetItemList($itemState,$i);			$xml = simplexml_load_string($htm);			$item = $xml->itemList->item;			$itemName = $item->itemName;			$itemName = iconv('utf-8', 'gb2312', $itemName);			$itemState = $item->itemState;			$itemCode = $item->itemCode;			$itemPrice = $item->itemPrice;			$db->row_insert("data",array("ProName"=>$itemName,"item"=>$itemCode,"Price"=>$itemPrice,"itemState"=>$itemState,"add_time"=>$time));			//进度信息 PageSize					}		alert_back("扫描结束,共计信息数:{$PageSize}!");	}?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>价格及库存管理系统</title><link rel="shortcut icon" href="favicon.ico" /><link href="all.css" rel="stylesheet" type="text/css" /></head><body><div style="float:right;padding:10px;"><a href="login.php?act=logout">注销登录</a></div>	<h1 style="color:red;text-align:center;line-height:40px;">拍拍平台-价格及库存管理系统</h1>	<form action="?act=save" method="post">	<table border="0" style="width:98%;" cellpadding="0" cellspacing="0" >	<tr class="tit"><td colspan="2">系统设置</td></tr><tr><td>用户名:</td><td> <input class="input" type="text" name="user" value="<?php echo $conf['user'];?>"></td></tr><tr><td>用户密码:</td><td> <input class="input" type="password" name="pw" value="<?php echo $conf['pw'];?>"></td></tr><tr><td>uin:</td><td> <input class="input" type="text" name="uin" value="<?php echo $conf['uin'];?>"></td></tr><tr><td>appOAuthID:</td><td> <input class="input" type="text" name="appOAuthID" value="<?php echo $conf['appOAuthID'];?>"></td></tr><tr><td>appOAuthkey:</td><td> <input class="input" type="text" name="appOAuthkey" value="<?php echo $conf['appOAuthkey'];?>"></td></tr><tr><td>accessToken:</td><td> <input class="input" type="text" name="accessToken" value="<?php echo $conf['accessToken'];?>"></td></tr><tr><td>利润:</td><td> <input class="input" type="text" name="lirun" value="<?php echo $conf['lirun'];?>"> 单位:分</td></tr><tr><td></td><td><button type="submit">设置</button><button type="reset">重置</button></td></tr></table></form><br/><br />		<table border="0" style="width:98%;" cellpadding="0" cellspacing="0" >	<tr class="tit"><td colspan="3">商品管理</td></tr>	<form action="?act=scan" method="post">	<tr>		<td style="width: 15%;">商品采集更新:</td>		<td>					<select name="itemState" style="width:210px;">			<?php   			 foreach($itemStates as $k=>$v){        		echo '<option value="'.$k.'">'.$v.'</option>';    			} 			?>			</select>		</td>		<td>			<button type="submit">采集更新数据</button>  		</td>  	</tr>	</form></table><br /><br />	<table border="0" style="width:98%;" cellpadding="0" cellspacing="0" >	<tr class="tit"><td>商品信息管理(共有<?php echo count($data);?>条信息)</td></tr><tr><td>    <table style="width: 98%;"><tr class="tit1"><td>ID</td><td>商品名称</td><td>Item</td><td>价格</td><td>状态</td><td>添加时间</td><td>更新时间</td><td>操作</td></tr><?php    	$ii=0;foreach($data as $key=>$val){        echo '<tr><td>'.$val['id'].'</td><td>'.$val['ProName']."</td><td><a href=http://auction1.paipai.com/".$val['item']." target=_blank>".$val['item'].'</a></td><td>'.$val['Price'].'</td><td>'.$status_str[$val['itemState']].'</td><td>'.date("Y-m-d H:i:s",$val['add_time']).'</td><td>'.date("Y-m-d H:i:s",$val['up_time']).'</td><td><a href="?act=del&id='.$val['id'].'">删除</a></td></tr>';		$ii ++;		//if ($ii>2) break;}?>    </table></td></tr></table><script type="text/javascript">setTimeout("del_ifr()",5000);function del_ifr(){document.getElementById("ifr").innerHTML='';}</script></body></html>

set_time_limit吧

加入了这个 程序能顺利运行结束(时间比较长点)

但是这个进度显示好像得运行结束了才一起显示出来。。。

php是一次计算一次输出,即使像CLI那样边计算边输出,也要不断刷屏才能实现进度条效果
进度在客户端显示,你觉得php会在服务器端计算->客户端显示->服务器端计算->客户端显示->……这样么?

如果你想要这样效果,你就要把循环拆开,客户端收到第一个数据,然后ajax向服务器发出next请求,php再计算下一个,向客户端发结果,客户端再ajax……

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn