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调用。