PHP在同一控制器下,访问不同方法的问题,望解答,谢谢.

目前测试环境:centos7系统,Apache服务器,php5.6,tp3.2框架
在conference控制器上写两个方法test1, test2,打开aa浏览器,先访问test1,新建标签页立即访问test2,此时test2一直转圈等待不输出任何东西.但是如果打开bb浏览器,访问test2,则可以立即输出(与在aa打开时间相差5s),请问这是什么原因?如何能让aa浏览器先访问test1方法后,立即打开test2也可以正常输出?

 public function test()
    {
        echo "haha";
        sleep(60);
    }
 public function test2()
    {
        die('aaa');
    }
阅读 2.5k
5 个回答

这个和框架没有关系,session机制关系

tp3 自动开启 session。默认情况下,session_start() 后,会生成一个 session 锁,所以同一个会话下,第二个请求会被阻塞。

如果希望不被阻塞,有 2 种方法

  1. 修改配置文件,关闭自动开启 session,然后需要用到再开启,用完就关闭

    return array(
        //'配置项'=>'配置值'
        'SESSION_AUTO_START' =>false
    );
    session_start();
    $_SESSION['name'] = 'chengqm';
    session_write_close();
  2. session 存储方式改为 redis,好像 redis session 暂时不支持锁

看看你的apache有几个进程吧,apache是多进程的,一个进程同时只能接受一个请求。
如果你的apache配置了只有一个进程,那么很明显同时只能有一个请求被处理。

换个方案如何 在 a方法里面 调用B方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏