使用PHP执行Perl并重定向到新站点

时间:2016-08-23 13:37:48

标签: php perl

基本上我想在后台继续运行更长的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()。谢谢!

2 个答案:

答案 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可以使用,则效果会更好。