这个PHP代码到底做了什么?system(“php ./somescript.php $something >/dev/


What exactly does this PHP code do? system("php ./somescript.php $something >/dev/null &");

system("php ./somescript.php $something >/dev/null &");

我是PHP的新手,我正在破译别人的代码,无法弄清楚这段代码在做什么。我在这里查看了system文档,因此我了解它将在 somescript.php 中执行 PHP 脚本,并且$something是传递给该脚本的参数......但在那之后我迷路了。

另外,$something传递到脚本的哪个部分?它如何知道首先调用somescript.php中的哪个函数?

你对它执行脚本是正确的,$something作为参数传递。 > /dev/null只是将输出管道到黑洞中(即抑制它)。 &部分在后台启动脚本。

system("php ./somescript.php $something >/dev/null &");

可以拆分为:

system(

这是在 shell 中执行命令的 php 函数

system("php

我们要求运行php命令行解释器

system("php ./

我们要求解释器使用 ./ 查找当前目录

system("php ./somescript.php

我们说要执行的PHP文件somescript.php

system("php ./somescript.php $something

我们正在将$something,它是运行system()的脚本中的一个变量作为参数传递到脚本somescript.php

system("php ./somescript.php $something >/dev/null

我们说输出应该发送到/dev/null..这基本上意味着不要在屏幕上打印任何输出。 >是重定向命令。所以> /dev/null意味着将输出重定向到/dev/null,这就像"空设备"的别名,或者简单地说。无。

system("php ./somescript.php $something >/dev/null &");

最后,我们要求脚本使用 & 在后台运行,这意味着一旦脚本启动,控制权就会返回到 shell

它基本上运行./somescript.php程序,$something作为命令行参数。

它通过将输出路由到null设备来显式忽略输出。

它在自己的 shell 中运行它,而不是等待它完成(这是最后的&位)。

我假设somescript.php是一个运行某种后台任务的程序。运行可能需要一些时间,但您的主程序不需要知道该任务的结果,因此不需要等待它完成。

[编辑]

$something作为命令行参数传递到程序中。从命令行调用 PHP 时,参数将填充到 $argv 数组中。

有关详细信息,请参阅 PHP 手册:

  • http://php.net/manual/en/reserved.variables.argv.php
  • http://php.net/manual/en/features.commandline.php

1 - system : 从PHP
执行外部程序2-php ./somescript.php $somethingPHP cli执行一个名为./somescript.php的脚本,其中一个参数$something
3 - >/dev/null :将stdout重定向到/dev/null这意味着您不会看到标准输出,但您仍然会看到stderr。有关输出重定向的详细信息。 那是纯粹的UNIXPHP无关.
4 - & :在后台发送命令,以便PHP执行可以继续,而无需等待外部程序完成。再一次,纯UNIX,与PHP本身无关。