【发布时间】:2013-08-01 14:44:17
【问题描述】:
我有一个简单的 PHP 脚本,一旦运行,我就无法访问服务器上的任何其他页面。
脚本就这么简单:
for($league=11387; $league<=11407; $league++){
for($i=1; $i<9; $i++){
//gets the team object here from external resource
$team = $HT->getYouthTeam($HT->getTeam($HT->getLeague($league)->getTeam($i)->getTeamId())->getYouthTeamId());
if($team->getId() != 2286094){
$youthTeams[] = $team;
}
set_time_limit(10);
}
}
显然,我应该在这里获得数千个“团队”(除了一个 ID 为 2286094 的团队),但是一旦我运行此脚本,我将无法打开服务器上的任何其他页面,直到结束,这需要很多时间脚本将结果提取到 $youthTeams 数组之前的时间。
我的意图是制作一个进度条,可以准确地(以 % 表示)脚本所在的位置,但我不能,因为这个脚本使服务器无法显示任何其他页面(你会得到任何其他页面)加载”,但由于此脚本在服务器上运行,它永远不会加载)。
另外,附加子问题:一旦获取了所有这些数据,在一个查询中将它们全部插入到 mysql 数据库中是否明智?
我真的很想了解这方面的更多信息,并希望完成这项工作,所以请帮我解决这个问题。
【问题讨论】:
-
您可能正在使用基于文件的会话,这意味着您的脚本在执行 ->getTeam 操作时会锁定会话。尝试在循环之前添加
session_write_close()以释放会话锁。这样您就可以访问网站的其他部分。 -
非常感谢好人!我已经做了一个解决方法,所以即使没有启动会话,我也可以实际运行文件(它是 cron 作业)并且它不会“冻结”服务器的其余部分。它现在正在运行,但如果您愿意分享,我想更多地了解幕后发生的事情。 :-)
标签: php for-loop server-load