2011-11-01 83 views
1

当我尝试从同一浏览器的不同选项卡中的服务器中加载两个相同的页面时,它会在启动另一个页面之前等待一个完成。这很好,但我有一个cron进程需要调用多个调用相同的脚本,我不能有这种类型的阻塞行为。我认为这是因为该进程与服务器具有相同的会话/连接,并且默认行为是一次仅允许来自同一源的一个请求......我怎样才能解决这个问题?我希望能够做的是让一个cron进程能够触发我的一个脚本的调用,并且apache启动一个新的目标脚本实例来处理每个脚本的请求。这可能吗?Apache相同的请求拦截

回答

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; 
+0

我不知道这是否是问题的全部,但我认为这肯定是问题的一部分...我现在用它测试,我要让你知道如何去。 – hackartist

+0

我认为这是一些封锁,所以感谢信息。 – hackartist

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;