我正在为我的用户创建一个功能,他们可以上传大型 XML 文件以与我的数据库同步。
当用户将文件上传到 upload.php
时,我想用 process.php
开始在后台处理数据,最好是从 shell 命令开始,并且将用户重定向到 status.php
,其中显示了同步过程。
我需要在执行脚本时将一些变量传递给 process.php
脚本,至少一个带有用户 ID 的变量并将其他变量放入文本文件中,(可能更喜欢这个所以我不必将太多数据放入 exec()
命令。)或用户 ID 和一堆 $_POST
变量。
我想到的一个解决方案是像这样执行 PHP 脚本:
exec("php -f ./process.php > /dev/null 2>/dev/null &");
这允许我从 http 访问中锁定 process.php,这很好,因为它是一个获取脚本的进程。我在这里唯一需要做的就是以某种方式传递一个变量,但我不知道该怎么做。
所以我的主要问题是:
如何在上述解决方案中传递变量?
或者你们有更好的解决方案吗?可能是我不必通过 exec()
的地方?请记住,我不希望用户等待脚本执行,我需要至少传递一个变量。
更新:为了将来引用,记得使用escapeshellarg()通过 exec()
或类似函数传递参数时。
最佳答案
你测试使用它
exec("php -f ./process.php var1 var2 > /dev/null 2>/dev/null &");
如果你喜欢获取这些变量值,可以使用全局变量 $argv 访问。如果您打印此 var 显示相同:
print_r($argv);
Array
(
[0] => process.php
[1] => var1
[2] => var2
)
关于PHP无需等待即可执行外部脚本,同时传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720547/