我想在PHP中创建后台进程
我正在使用客户端的AJAX调用和服务器端的PHP来尝试所有这些..
其实我正在废弃很多网址。为此,我列出了文本区域中的所有废弃网址,并使用POST方法提交表单。 表单操作将捕获POST数据并传递给后台脚本。 因为我可以传递很多url,它可能是1000,只是因为我想在后台按需运行脚本,当它完成后返回文件或数据库中的输出。 (在文件或数据库中写入进程ID,我可以这样做)
我不想为此设置后端cron作业,该作业将在15分钟后运行。
我们通常用来解析PHP代码的问题是 在我的脚本执行未完成之前,我无法关闭浏览器或更改页面。 但我想改变页面,我也可以浏览,但脚本应该在后台运行。
我的理解是在这种情况下:
如果我是对的,它的行为就像其他语言一样..
我使用PHP代码解决方案: 我假设下面的脚本将按照我的要求工作,或者我需要找到另一种方式?
$cmd = "php test.php > testoutput.php 2>&1 & echo $!";
exec($cmd, $pid);
echo "Script Running with ".$pid;
exit;
答案 0 :(得分:0)
根据您的问题和我们的讨论,您不需要运行任何想要在用户点击时调用文件的cron。
您将通过以下方式在文件中获取该ID:
$file = "/your_path/your_file_name.txt";
file_put_contents($file, print_r($pid, true));
如果你想附加id的
$file = "/your_path/your_file_name.txt";
file_put_contents($file, print_r($pid, true), FILE_APPEND);
此处FILE_APPEND
每次都会在同一文件中追加其他ID,否则会覆盖或者您将生成动态文件名
确保您提供777
您要存储文件的权限
答案 1 :(得分:0)
你不应该这样做。你要做的代码是不可靠的,难以维护,缓慢而不是你应该怎么做。是的,你可以这样做,因为Chetan已经提到过这样的事情php execute a background process。但是,这不是一个好方法。
我建议你这样做:
a。)创建包含作业描述的数据库表,例如url,id及其状态,以便稍后根据该过滤进行过滤。
b。)创建由supervisord或您熟悉的任何其他服务管理人员运行的程序。通过这种方式,您可以创建脚本,当额外的工作人员空闲时,该脚本将从数据库中提取下一个可用作业。
c。)使用该新表的主要ID作为"作业ID"。例如,您可以使用websockets来显示客户的工作状态。
理想情况下,您不会使用数据库,但实际上是诸如rabbitmq或任何其他排队系统之类的东西,甚至是诸如redis之类的东西。
希望这有帮助!