此供稿由公共用户上传.并且Feed大小小于5MB的文本文件.因此,我们不希望提供FTP访问,也不希望为这些用户提供命令行访问权限.只有我们更愿意通过网络访问来上传Feed.我们必须在上传后立即处理Feed.一旦处理完毕,我们也必须向他们发送邮件报告.
现在问题是长时间运行的网页在许多网络工作上抛出一些代理超时问题(因为它需要1小时的响应).这是大多数客户端网络配置的问题.
上传Feed后,我需要一种方法来触发PHP脚本.并且该脚本应该在后台运行,同时正确完成页面加载而不会延迟客户端.
我将在后台处理数据并在完成该过程后将邮件发送给客户端. Cron选项卡在这里不可行,因为客户端可能每月只使用这些功能几次并且在意外的时间范围内.
如果有任何方法在后台触发PHP脚本但通过Web访问请告诉我.
用于简化要求的示例脚本
假设此示例并帮助我修改此脚本以实现结果.我有两个PHP脚本“thread.PHP和createfile.PHP”.名称为“thread.PHP”的文件将由客户端通过Web浏览器打开.该脚本需要执行脚本“createfile.PHP”.但是需要20秒才能做出回应.但我们希望允许它在后台运行.并立即在浏览器中显示输出.
以下是示例脚本上的代码.
createfile.PHP(http://sugunan.net/demo/createfile.php)
<?PHP sleep(20); @unlink("PHPfile.txt"); $myfile = fopen("PHPfile.txt","w") or die("Unable to open file!"); $txt = date("h:i:s")."\n"; fwrite($myfile,$txt); fclose($myfile); mail("someone@example.com","Background process","Process completed"); ?>
created file visible at web url: 07001
thread.PHP(http://sugunan.net/demo/thread.php)
<pre> <?PHP echo "Script start at: " . date('h:i:s') . "\n"; include("createfile.PHP"); //give a method to execute this script but in background without delay echo "Script end at: " . date('h:i:s'); ?>
Script start at: 02:53:27
Script end at: 02:53:47
有没有办法在没有include()方法的情况下执行“createfile.PHP”.并且在后台处理“createfile.PHP”时避免20秒的睡眠延迟?
请考虑我想避免客户端的等待时间,并希望立即在浏览器上输出.
http://php.net/manual/en/function.exec.php
这将允许您在另一个线程中运行长进程.我已将其用于所有其他PHP,Python或C应用程序,以将wav转换为mp3,视频转换或通过大型XML文件进行解析…
使用purehuman.info/demo中的工作代码编辑…它实际上现在写入文件.
这就是我想让thread.PHP看起来像:
<?PHP echo "Script start at: " . date('h:i:s') . "\n"; exec("PHP -f createfile.PHP /dev/null &"); echo "Script end at: " . date('h:i:s'); ?>
如果你在Windows中:
<?PHP echo "Script start at: " . date('h:i:s') . "\n"; exec("start /B PHP createfile.PHP"); //obvIoUsly change the paths etc where needed.. echo "Script end at: " . date('h:i:s'); ?>
需要对Windows部分给予信任:How to execue PHP scripts in the background using EXEC() and CMD