我有一个bash脚本,可能需要几个小时才能完成.
我有一个网络前端,使它易于使用.
在这个主页面上,我想要一个我按下的URL来启动我的php命令
<?exec('myscript that take a long time');?>
Run Code Online (Sandbox Code Playgroud)
exec完成后,我希望它加载一个cookie.
setcookie('status',"done");
Run Code Online (Sandbox Code Playgroud)
这一切都很容易完成并按原样运行.但是,加载我的exec命令的URL是一个空白页面.我不想要这个.我希望url是一个动作,它启动我的phpscript并在exec命令在后台返回all时设置cookie.
这可能吗?
如果没有,我有多接近这种行为.
编辑:
function foo(){
var conn = new Ext.data.Connection();
conn.request({
url:‘request.php’,
method:‘POST’,
success: function(responseObject) {
alert(“Hello,Word!”);
},
failure: function() {
alert(“Something fail”);
}
});}
Run Code Online (Sandbox Code Playgroud)
我没试过上面的代码.
我有一个bash脚本,可能需要几个小时才能完成
停在那里.那是你的第一个问题.WWW的设计目的不是维持开放请求超过几分钟.也许有一天(因为我们现在有了websockets),但即使你知道如何配置你的网络服务器,所以这对于任何一个路过的人来说都不是一个开关,所以中间的网络或你的浏览器不太可能愿意等待这个长.
无法与Web请求同步运行此作业.它必须异步运行.
通过各种方式从网页(通过元刷新或ajax)轮询作业的状态,但我很难理解在cookie完成时设置cookie的好处; 通常对于这样的事情,我会在任务结束时发送一封电子邮件.您还需要一种方法来分离出这样调用的并发任务,或者确保一次只运行一个的方法.
一种解决方案是将PHP会话ID作为参数传递给脚本,然后让脚本在完成时编写一个以会话ID命名的文件 - 或者甚至通过文件提供部分更新 - 然后您的网页可以轮询状态使用会话ID的作业.当然,您的代码应该在开始新作业之前检查作业的实例是否已经运行.