我的托管服务提供商必须在一周前将我的网站更改为其他服务器。从那以后,我的一个脚本抛出错误。由于在更改之前一切正常,我假设代码最初是正确的,所以我完全感到困惑,为什么会发生这种情况,我希望你能让我朝着这个方向努力。
提出问题的代码如下:
session_start();
$items=$_SESSION['items'];
$_SESSION['numItems']=0;
session_write_close();
foreach($items as $num => $currentItem){
//here I work with $currentItem...
session_start();//starting error line
$_SESSION['numItems']++;
session_write_close();
}
session_start();
unset($_SESSION['numItems']);
session_write_close();
如果我运行代码,我会收到一个PHP致命错误:在作为起始错误行注释的行中超出了30秒的最大执行时间。
现在,最奇怪的是,如果我检查$_SESSION['numItems']
的值,当数组$items
不能超过250个元素时,它可以达到12500(或更多)。所以有些东西正在创造一种无限循环!
如果我在foreach
结构中注释掉三个会话行(或者我将它们移到外面),一切正常。
如果我只注释掉其中第二行,则问题仍然存在。
相同的代码结构但使用while
而不是foreach
正在同一服务器上的另一个脚本中工作。
我的托管服务提供商不能说我有哪些PHP版本和配置。现在,版本是5.2.17。
感谢您的帮助!
因为它引起了很多混乱:
代码结构打开和关闭会话,因为这样我可以从第二个文件中读取会话变量,并让用户更新执行进度。第二个文件每2秒读取$_SESSION['numItems']
一次,并使用session_write_close();
关闭会话。
测试代码但使用set_time_limit(90)增加最大执行时间根本没有用。它只是给出了相同的错误(在等待更长时间之后)并且$ _SESSION ['numItems']以更高的值(大约21000)结束。
答案 0 :(得分:0)
您不必一次又一次地写session_start
和session_write_close
session_start();
$items=$_SESSION['items'];
$_SESSION['numItems']=0;
foreach($items as $num => $currentItem){
$_SESSION['numItems']++;
}
unset($_SESSION['numItems']);
session_write_close();
答案 1 :(得分:0)
会话的基本用法是:http://www.php.net/manual/en/session.examples.basic.php
在第一个session_start之后删除所有session_start()和session_write_close()可以解决您的问题。