从命令行在.php文件中运行shell命令

Ema*_*gux 0 php shell

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

另存为build.php

<?php
shell_exec('cd ..');
echo "php executed\n";
?>
Run Code Online (Sandbox Code Playgroud)

从命令行

php build.php
Run Code Online (Sandbox Code Playgroud)

产量

php executed
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*c B 5

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

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

将执行somecommand/path/to/new/dir.如果你这样做

<?php
    exec('cd /path/to/new/dir');
    exec('somecommand');
Run Code Online (Sandbox Code Playgroud)

somecommand将在您启动PHP脚本的任何目录中执行 - cd您之前只执行过一行将不再存在并且本质上是一个空操作.

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

<?php
    exec('cd /path/to/new/dir ; somecommand');
Run Code Online (Sandbox Code Playgroud)

然后你的命令将在该目录中执行...但是,一旦该shell退出,目录更改将不再存在.