基本上我想在后台继续运行更长的Perl-Script,并在我将用户重定向到另一个页面后继续运行
PHP
<?php
$result = exec("perl test.pl");
echo $result;
header("Location: newpage.php") ;
?>
perl的
#!/usr/bin/perl
sleep(1000000);
print "Done";
我在php中读到了fork(),但我怎么理解它只是同时运行2个脚本,但我无法弄清楚如何在php中使用redirection / header()。谢谢!
答案 0 :(得分:0)
除非你使用&#34;&amp;&#34;否则PHP exec会等到被调程序执行完毕后再处理下一行。在字符串的末尾,在后台运行程序。
r := regexp.MustCompile(`{([^}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
fmt.Println(v[1])
}
或者,你可以考虑添加一个crono事件来连续运行exec,具体取决于它在做什么。
答案 1 :(得分:0)
我们使用过的另一种解决方案是使用某种类型的作业队列,例如beanstalk或redis(从技术上讲,我不认为redis是一个作业队列,但它的pub / sub模型看起来可以根据您的需要使用它。)
php代码将发布要运行的作业,一个始终运行的可执行文件(perl或其他)将在后台运行,侦听作业,然后以自己的子项开始工作,而不是你的PHP进程,当一份工作通过。根据您的需要,作业可以将其状态(包括最终结果)发布到文件系统的缓存中或数据库(例如mysql或redis)中,以便在最终用户单击页面以查看作业状态时,它可用。
它更复杂,但处理更多边缘情况。缺点是,如果您的网站位于共享服务器上,则ISP可能不喜欢始终运行的作业服务器或beanstalk / redis守护程序。如果您有自己的VM可以使用,则效果会更好。