[英]continue php script execution called by ajax after
我有一个名为call.php的页面,其中包含以下代码
<script src="http://localhost/js/jquery.js"></script>
<script>
$(document).ready(function()
{
$.post("exe.php",
{
a: 'a'
},
function(data)
{
alert(data);
});
});
</script>
///close tabs after onload
在exe.php中,我有此代码
<?php
set_time_limit(60);
ignore_user_abort(true);
sleep(20);
$file = fopen("test.txt","w");
?>
即使关闭标签后,我仍然需要继续执行php,它在使用WAMP的localhost中可以正常工作,但是在我的主机无法正常工作时,它可能在localhost中的10-14秒后停止,并且服务器ignore_user_abort(true)关闭了,问题是:打开此功能ON解决了问题吗? 以及为什么在localhost中即使此功能关闭也能正常工作
编辑
我尝试过这样的事情
<?php
ignore_user_abort(true);
function shutdown()
{
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/2.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/4.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/6.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/8.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/10.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/12.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/14.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/16.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/18.txt',"w");
sleep(2);
$file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/20.txt',"w");
}
//register_shutdown_function('shutdown');
shutdown();
?>
如果完全加载此代码,则打开选项卡并在创建后立即关闭2.txt ... 10.txt,因此肯定有一个选项可在10秒后关闭脚本
在Windows上,PHP将缓冲输出到一定数量的字节(我上次测试时,我相信是2048)。 只要PHP不尝试刷新该缓冲区,它就不会检测到关闭的连接,因此也不会中止脚本。 在Linux上,缓冲区的工作方式不同,最重要的是不会忽略flush()
。
至于为什么您的ignore_user_abort(true)
调用“不起作用” (这种句子不是一个好的错误报告,并且不太可能导致您得到一个好的答案),我可能无法知道。
但是,您可以尝试使用register_shutdown_function
代替。
您也可以尝试使用.htaccess
文件增加最长执行时间。 语法很简单
php_flag max_execution_time 120
Web服务器本身也可能具有执行时间限制,该时间限制可能会中止脚本,例如,请参阅TimeOut 。
您需要先调用ignore_user_abort
和set_time_limit
然后再调用sleep
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.