我有一个名为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中工作正常 但在我的主人不工作它可能会停止10-14秒后 在localhost和服务器中,ignore_user_abort(true)已关闭 问题是:打开此功能可以解决问题吗?以及为什么在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秒后关闭脚本
答案 0 :(得分:1)
在Windows上,PHP会将输出缓冲到一定量的字节(我上次测试时,我相信它是2048)。只要PHP不尝试刷新该缓冲区,它就不会检测到已关闭的连接,因此它不会中止脚本。在Linux上,缓冲区的工作方式不同,最重要的是不要忽略flush()
。
至于为什么ignore_user_abort(true)
来电“无法正常工作”(这种句子不是一个好的错误报告,也不会导致你得到一个好的答案)我可以不太可能知道。
但您可以尝试使用register_shutdown_function
。
您还可以尝试使用.htaccess
文件增加最长执行时间。语法很简单
php_flag max_execution_time 120
Web服务器本身也可能有执行时间限制,可能会中止您的脚本,例如,请参阅TimeOut。
答案 1 :(得分:0)
答案 2 :(得分:0)
在致电ignore_user_abort
之前,您需要致电set_time_limit
和sleep
。