0

问题是从什么时候开始的?

我的托管服务提供商不得不像一周前一样将我的网站更改为另一台服务器。从那以后,我的一个脚本抛出了一个错误。由于在更改之前一切正常,我假设代码最初是正确的,所以我很困惑为什么会发生这种情况,我希望你能试着让我朝着好的方向发展。

编码

出现问题的代码如下:

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']它的值可以达到 12500(或更多),而数组$items不能有超过 250 个元素。所以有些东西正在创造一种无限循环!

需要考虑的事情

  1. 如果我注释掉foreach结构内的三个会话行(或者我将它们移到外面),一切正常。

  2. 如果我只注释掉这些行中的第二行,问题仍然存在。

  3. 相同的代码结构但使用 awhile而不是 aforeach在同一服务器上的另一个脚本中工作。

  4. 我的托管服务提供商无法告诉我我拥有哪个 PHP 版本和配置。现在,版本是 5.2.17。

谢谢您的帮助!

编辑:

因为它引起了很多混乱:

代码结构打开和关闭会话,因为这样我可以从第二个文件中读取会话变量,并让用户更新执行进度。第二个文件$_SESSION['numItems']每 2 秒读取一次,并使用session_write_close();.

编辑2:

测试代码但使用 set_time_limit(90) 增加最大执行时间根本没有帮助。它只是给出相同的错误(等待更长时间后),并且 $_SESSION['numItems'] 以更高的值结束(大约 21000)。

4

2 回答 2

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();
于 2013-09-11T21:22:32.563 回答
0

会话的基本用法是:http ://www.php.net/manual/en/session.examples.basic.php

在第一个 session_start 之后删除所有 session_start() 和 session_write_close() 应该可以解决您的问题。

于 2013-09-11T21:24:23.823 回答