ホームページ >バックエンド開発 >PHPチュートリアル >PHPループにおける進行状況表示と「サスペンドデス」
理論的には、プログラムは成功を示すまでに 500 回実行する必要がありますが、基本的には、ページが完全に白くなり始めるまで (同時に Web ページの読み込みロゴも消えます)、実行できるのは約 10 回だけです。プログラムは実行を続行できなくなります
この問題の解決方法について助けを求めてください、ありがとうございます
また、進行状況にどう対処すればよいかわかりません。改めてありがとうございます
<?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 のように計算と出力を同時に行う場合でも、プログレスバー効果を実現するには画面を継続的に更新する必要があります。
この効果が必要な場合は、ループを分割する必要があります。クライアントは最初のデータを受信し、次に ajax が次のリクエストをサーバーに送信し、php が次のリクエストを計算し、結果をクライアントに送信します。アヤックス …