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