【问题标题】:Running shell commands in .php file from command-line从命令行在 .php 文件中运行 shell 命令
【发布时间】:2014-02-19 19:57:03
【问题描述】:

我有一系列 shell 命令,我想放入一个程序并从命令行执行该程序。我决定为此使用 PHP,所以目前我正在尝试运行最基本的 shell 命令。

另存为 build.php

<?php
shell_exec('cd ..');
echo "php executed\n";
?>

从命令行

php build.php

输出

php executed

Php 执行正确,但我仍在同一目录中。如何让 shell_exec( ... ) 成功调用 shell 命令?

【问题讨论】:

  • 你对cd ..有什么期望?
  • 脚本运行自己的外壳。我不相信有办法让脚本改变你的外壳。
  • @AliMasudianPour 我希望转到父目录
  • 你可以这样做:shell_exec('ls ../');只是为了获取上一个目录列表。你不能改变目录
  • 使用chdir() 更改PHP 脚本的工作目录。默认工作目录是“.”,即运行脚本的当前工作目录。您可以使用getcwd() 获取当前工作目录。最后,PHP脚本不能改变调用 shell的目录。

标签: php shell


【解决方案1】:

您需要更改 PHP 中的 cwd(当前工作目录)...您通过 exec() 执行的任何 cd 命令及其姊妹函数将影响 exec() 调用调用,以及您在 shell 中执行的任何操作。

<?php
    $olddir = getcwd();
    chdir('/path/to/new/dir');  //change to new dir
    exec('somecommand');

将在/path/to/new/dir 中执行somecommand。如果你这样做了

<?php
    exec('cd /path/to/new/dir');
    exec('somecommand');

somecommand 将在您启动 PHP 脚本的任何目录中执行 - 您在一行前执行的 cd 将不复存在,本质上是一个空操作。

请注意,如果你做了类似的事情:

<?php
    exec('cd /path/to/new/dir ; somecommand');

那么您的命令将在该目录中执行...但同样,一旦该 shell 退出,目录更改将不复存在。

【讨论】:

    猜你喜欢
    • 2015-07-17
    • 2022-11-28
    • 2013-11-28
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多