当我尝试在同一浏览器的不同选项卡中从我的服务器加载两个相同的页面时,它会等待一个页面在启动另一个之前完成。这很好,但我有一个cron进程,需要调用几个相同的脚本调用,我不能有这种类型的阻塞行为。我认为这是因为该进程与服务器具有相同的会话/连接,并且默认行为是一次只允许来自同一源的一个请求...我该如何解决这个问题?我希望能够做的是让cron进程能够触发对我的一个脚本的调用,并且apache启动目标脚本的新实例来处理每个脚本的请求。这可能吗?
答案 0 :(得分:3)
您使用的是基于PHP的标准会话吗?执行session_start()
时,PHP会锁定会话,并在脚本退出之前保持文件锁定,或者执行session_write_close()
。
这样可以防止任何其他启用会话的页面被提供,因为在删除锁定之前,它们无法访问会话文件。
可以在脚本中的任何位置调用session_write_close()。它所做的只是在那一刻写出_SESSION数组,但让数组可供阅读。如果需要进行任何修改,您可以随后在脚本上重新打开会话。
基本上,你有
<?php
session_start(); // populate $_SESSION;
session_write_close(); // relinquish session lock
.... dome some really heavy duty long computations
session_start();
$_SESSION['somekey'] = $new_val;
答案 1 :(得分:0)
我不认为php继续存在任何问题,实际上我喜欢它的行为
使用继续2;因为继续将与开关中的制动器相同,并且for,while,foreach等等循环将在从开关出来后继续它们的路线。
以下示例仅回显1,因为我正在从交换机和foreach的继续中断。
$un_array=array(1,2); foreach($un_array as $num) { switch($num) { case 1: //nothing break; case 2: continue 2; break; } echo $num; } exit;