【问题标题】:What exactly does this PHP code do? system("php ./somescript.php $something >/dev/null &");这段 PHP 代码究竟做了什么? system("php ./somescript.php $something >/dev/null &");
【发布时间】:2012-08-15 20:09:27
【问题描述】:

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

我是 PHP 新手,我正在破译别人的代码,但不知道这段代码在做什么。我查看了system 文档here,所以我知道它将执行somescript.php 中的PHP 脚本,而$something 是传递给该脚本的参数……但在那之后我迷路了。

另外,$something 传递给脚本的哪一部分?它怎么知道先调用somescript.php中的哪个函数?

【问题讨论】:

  • "在 somescript.php 中执行 PHP 脚本" 比什么都没有,这就是它的作用。想知道“somescript.php”的作用——查看文件
  • 那么这个“./dev/null &”是什么?以及它首先运行PHP脚本中的什么函数??
  • 将任何输出重定向到/dev/null。换句话说,一个黑洞。
  • @arxanas & 拼写为“&”。它曾经是英文字母表中的最后一个字母;它是“and, per se, 'and'”的缩写形式(w, x, y, z, and, per se, “and”)。
  • @arxanas 如果您想在 *nix 的后台执行命令并将它们与启动它们的 PHP 脚本完全分离,请参阅我之前的评论。如果你想在windows上做,你必须通过COM来做,我不知道有什么方法可以得到PID。

标签: php


【解决方案1】:

您是正确的,它使用$something 作为参数传递了脚本。 > /dev/null 只是将输出输送到黑洞中(即抑制它)。 & 部分在后台启动脚本。

【讨论】:

  • 只有在$something 中的内容不会覆盖所有内容的情况下;)
  • 我猜他的意思是说 $something 上面可能有一些有趣的东西,比如 $something = '& rm -rf / #';
【解决方案2】:
system("php ./somescript.php $something >/dev/null &");

可以拆分为:

system(

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

system("php

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

system("php ./

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

system("php ./somescript.php

我们是说要在somescript.php中执行的php文件

system("php ./somescript.php $something

我们将$something 作为运行system() 的脚本中的一个变量作为参数传递给脚本somescript.php

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    它在自己的 shell 中运行它并且不等待它完成(那是最后的 & 位)。

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

    [编辑]

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

    查看 PHP 手册了解更多信息:

    【讨论】:

    • somescript.php 如何访问 $something 参数?是 $argv 吗?
    • @RichardDesLonde - 是的,它是$argv。我已经编辑了答案以包含相关信息。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 2015-01-26
      • 2010-12-16
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多