如果通过exec运行,PHP脚本是否会维护其会话?

时间:2010-01-11 00:53:45

标签: php fork

我想从另一个PHP脚本运行PHP脚本,以便父级在启动子脚本时返回成功。

将从我正在使用会话的浏览器启动父级。如果通过exec运行,子脚本是否能够使用相同的会话和会话变量?

感谢大家的帮助

方案

我通过AJAX解雇了父母。在我这样做之后,我希望父母带着孩子跑回来。子脚本需要一段时间才能完成。父级将返回成功以指示它已运行子级。然后,用户将被重定向到不同的页面。

3 个答案:

答案 0 :(得分:2)

如果您想从PHP脚本运行PHP脚本,请不要这样做:

require 'child.php';

如果您需要在后台执行某些操作,请使用AJAX触发请求。

编辑:没有理由说AJAX请求不能长时间运行,但是你已经超出了PHP真正设计的范围。但无论如何,发起一个AJAX请求。如果回来需要20分钟,这不是戏剧性的。

或者,您可以每15秒触发一次AJAX请求(选择一个号码)以检查您已经开始的状态。

对于真正长期运行的任务,你可能不得不采取“一见不醒”的方法。启动它并立即返回。但它不会有会话信息。你需要存储它。

我建议使用某种持久性机制,如Jobs表:

  • 作业:id,started_by,status(未启动,正在运行,已完成),started_when,completed_when。

而不是像exec()那样解雇这些工作,而是有一个cron作业,它寻找需要启动并启动它们的作业。这将不如Web服务器触发的方法脆弱。

您还可以获得状态报告,以便能够询问作业是否已完成。

答案 1 :(得分:2)

与其他人说的一样,它不会起作用。

但是,你可以ignore_user_abort( true );

即使用户关闭浏览器,这也会使脚本继续运行。

所以,ignore_user_abort,在父级中包含大量的子脚本,这样你就可以获得会话变量和所有内容,你应该没事。

答案 2 :(得分:-1)

答案是否