gpt4 book ai didi

PHP foreach 用户脚本似乎使 apache 挂起

转载 作者:行者123 更新时间:2023-11-29 06:44:33 24 4
gpt4 key购买 nike

我制作了一个非常简单的脚本来遍历我们所有的用户,每次执行限制为 500。

它执行以下操作:

  1. 选择用户数据
  2. 插入一行
  3. 给用户发邮件
  4. 更新一行
  5. 下一个用户

它按预期工作并成功完成。

但是,当我运行它时,我无法在另一个窗口中使用该网站,因为它只是“加载”,直到该脚本执行完毕?

就好像脚本在运行时锁定了用户表,但这不应该发生,因为我们只是使用保存到 $result 的数据?

但是我可以在网站卡住时通过 sqlyog 查询数据库,所以不会吧?会不会是使用了太多资源?

脚本 - 示例

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

$i = 1;

$ses = new simpleemailservice();

$result = mysql_query("SELECT id, username, email FROM `user` WHERE thiscol = 0 LIMIT 500");

while($row = mysql_fetch_row($result)){

mysql_query("INSERT INTO table (data) VALUES (1)");

$m = new SimpleEmailServiceMessage();

$m->addTo($row[1]." <".$row[2].">");
$m->setFrom("Emailer <no-reply@emailer.com>");
$m->setSubject("Subject");
$m->setMessageFromString("Email Text", "Email HTML");

if($ses->sendEmail($m))
mysql_query("UPDATE `user` SET thiscol = 1 WHERE id = ".$row[0]);

$i++;
}
?>

最佳答案

这种行为听起来像是 session 锁定。 PHP session 的默认工作方式是锁定 session (以防止两个进程写入 session 对象)。这对于典型的短期 PHP 脚本来说通常没问题,但当您有一些长时间运行的脚本时,这可能会影响您。

如果您的应用程序根本不使用 session ,那么您应该在 php.ini 或 .htaccess 中关闭 session.auto_start:http://www.php.net/manual/en/session.configuration.php#ini.session.auto-start(如果你在那里没有看到它,或者它已经关闭,但你正在使用某种框架,框架可能会为你启动 session ;如果是这样,转到下一个解决方案比尝试打架更简单框架。)

如果您在某些页面上使用 session ,而不是在这个长时间运行的进程上,解决方案是在脚本开始时使用 session_write_close() 关闭 session 。 :

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

session_write_close();

$i = 1;
....

同样,框架警告:如果框架正在为您启动 session ,则在包含框架文件之后放置 session_write_close();,而不是之前! (您在评论中提到了这种情况,这就是为什么我将其放在 require 行之后的原因。)

如果您的长时间运行的进程需要使用 session ,但只读,上述仍然有效。参见 https://stackoverflow.com/a/14409902/841830(正如该答案所示,如果您需要在长时间运行的进程结束时写入 session ,那也是可能的。)

(P.S. 这已经在评论中得到了回答,但我接受了 Wrikken 提出的将其作为答案发布的提议。是的,谣言是真的:我愿意为几个代表做任何事情......)

关于PHP foreach 用户脚本似乎使 apache 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com