已解决
------------------------------
澄清不是TP问题,是小白不懂session
感谢 @thinkphp 也感谢国家 感谢党
困扰半年的问题终于解决了。
由于业务需要,我有个方法需要从eBay获取订单,分析处理,保存到数据库,这一过程根据订单量可能会执行1-10分钟或更长时间,在此期间我用TP开发的其它程序都不能及时响应,需要等这个方法执行结束后才返回响应。是TP缺陷还是单一入口缺陷?如何做才能执行这个方法的时修,不影响其它页面呢?
不知道我的问题大小伙伴们是否了解,如果不能理解请看下面的实例:
文件:IndexAction.class.php
<?php
class IndexAction extends Action {
public function index(){
$this->show('首页');
}
public function sleep(){
sleep(9999);
}
}
?>
文件:TestAction.class.php<?php
class TestAction extends Action {
public function index(){
echo 'Test';
}
}
文件:/1.php<?php
sleep(9999);
?>
文件:/2.php<?php
if($_GET['a']=='sleep'){
sleep(9999);
}
var_dump($_GET);
?>
文件:/3.php<?php
class test{
function a(){
echo 123;
}
function b(){
echo 456;
}
function c(){
sleep(9999);
}
}
$test=new test;
$a=isset($_GET['a'])?$_GET['a']:'a';
$test->$a();
?>
运行:http://127.0.0.1/index.php/Index/index输出:首页
运行:http://127.0.0.1/index.php/Index/sleep
输出:/*浏览器暂无反应,等待9999秒,在此期间执行下面连接:*/
运行:http://127.0.0.1/index.php/Index/index
输出:不能及时响应结果
运行:http://127.0.0.1/index.php/Test/index
输出:不能及时响应结果
运行:http://127.0.0.1/1.php
输出:/*浏览器暂无反应,等待9999秒,在此期间执行下面连接:*/
运行:http://127.0.0.1/2.php
输出:正常输出,不受干扰
运行:http://127.0.0.1/2.php?a=sleep
输出:/*浏览器暂无反应,等待9999秒,在此期间执行下面连接:*/
运行:http://127.0.0.1/2.php?a=bbb
输出:正常输出,不受干扰
运行:http://127.0.0.1/3.php
输出:正常输出,不受干扰
总结:
1.原生PHP开发,1个文件不会影响另一个文件执行
2.单一入口里,一个方法不会影响另一个方法执行
问题就是:TP控制器的方法没执行结束就会影响另外的方法执行,已测试过wamp,easyphp,xamp,phpstudy等多个环境,但都是windows的,
鄙人自学PHP不懂异步、线程之类的,但相信上面的例字应该能确定是TP的bug
最佳答案
