Php执行超时
我有下面的Php执行超时,php,timeout,exec,Php,Timeout,Exec,我有下面的exec()命令,末尾带有&符号,因此脚本在后台运行。但是,脚本没有在后台运行。5.6分钟后,它在浏览器中超时。此外,如果我关闭浏览器,脚本将无法继续运行 exec("/usr/local/bin/php -q /home/user/somefile.php &") 如果我通过命令行运行脚本,它不会超时。我的问题是如何防止超时。如何使用exec在后台运行脚本,使其不依赖于浏览器。我做错了什么?我应该看什么。您需要改用: 也就是说,如果您有shell访问权限,为什么不将其作为
exec()
命令,末尾带有&
符号,因此脚本在后台运行。但是,脚本没有在后台运行。5.6分钟后,它在浏览器中超时。此外,如果我关闭浏览器,脚本将无法继续运行
exec("/usr/local/bin/php -q /home/user/somefile.php &")
如果我通过命令行运行脚本,它不会超时。我的问题是如何防止超时。如何使用exec在后台运行脚本,使其不依赖于浏览器。我做错了什么?我应该看什么。您需要改用:
也就是说,如果您有shell访问权限,为什么不将其作为cronjob安装?我不知道为什么一个PHP脚本会调用另一个脚本以这样运行。您需要改用:
也就是说,如果您有shell访问权限,为什么不将其作为cronjob安装?我不知道为什么PHP脚本会调用另一个脚本来这样运行。exec()
函数处理已执行程序的输出,因此我建议您将输出重定向到/dev/null
(一个虚拟的可写文件,自动释放您写入的所有数据)
尝试运行:
exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");
注意:2>&1
将错误输出重定向到标准输出,而>/dev/null
将标准输出重定向到该虚拟文件
如果仍然有困难,可以创建一个只执行其他脚本的脚本exec()
在执行任务时遵循流程,但在任务完成时释放。如果执行的脚本只是执行另一个脚本,那么任务会非常快,exec也会以同样的方式释放
让我们看一个实现。创建一个包含以下内容的exec.php
:
<?php
if (count($argv) == 1)
{
die('You must give a script to exec...');
}
array_shift($argv);
$cmd = '/usr/local/bin/php -q';
foreach ($argv as $arg)
{
$cmd .= " " . escapeshellarg($arg);
}
exec("{$cmd} > /dev/null 2>&1 &");
?>
如果您有论点,也可以给出:
exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php x y z > /dev/null 2>&1 &");
exec()
函数处理已执行程序的输出,因此我建议您将输出重定向到/dev/null
(一个虚拟可写文件,它会自动释放您写入的所有数据)
尝试运行:
exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");
注意:2>&1
将错误输出重定向到标准输出,而>/dev/null
将标准输出重定向到该虚拟文件
如果仍然有困难,可以创建一个只执行其他脚本的脚本exec()
在执行任务时遵循流程,但在任务完成时释放。如果执行的脚本只是执行另一个脚本,那么任务会非常快,exec也会以同样的方式释放
让我们看一个实现。创建一个包含以下内容的exec.php
:
<?php
if (count($argv) == 1)
{
die('You must give a script to exec...');
}
array_shift($argv);
$cmd = '/usr/local/bin/php -q';
foreach ($argv as $arg)
{
$cmd .= " " . escapeshellarg($arg);
}
exec("{$cmd} > /dev/null 2>&1 &");
?>
如果您有论点,也可以给出:
exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php x y z > /dev/null 2>&1 &");
shell命令怎么可能“在浏览器中超时”?shell命令怎么可能“在浏览器中超时”?我不明白如果在Linux环境中使用
&
签名,为什么exec()
不会分离进程。我正在用exec传递变量。因此,我不能将其作为cron调用。我不明白,如果在Linux环境中使用&
签名,为什么exec()
不会分离进程。我正在用exec传递变量。所以我不能将其作为cron调用。