从php运行shell命令

时间:2012-07-20 14:44:03

标签: php shell

以下命令是一个适用于我的shell命令。

php -f /home3/kintest2/www/project/keygen_msql_adjuster.php

我想做的是从php文件中运行make命令。

欢迎任何提示

4 个答案:

答案 0 :(得分:1)

您可以使用backtickssystemshell_execpopen,具体取决于您对要开始的流程的处理方式。

答案 1 :(得分:1)

出了什么问题:

include('/home3/kintest2/www/project/keygen_msql_adjuster.php');

或者您是否有特殊原因需要启动一个全新的PHP解释器实例?

我注意到使用include的一个好理由是因为其中声明的任何内容都会污染您当前实例的命名空间。

另一方面,调用shell_exec或类似内容可能是大量安全漏洞。但是,如果您的代码在受限制的环境中运行,那可能无关紧要。

答案 2 :(得分:0)

我认为您正在寻找shell_exec

echo shell_exec ( "php -f /home3/kintest2/www/project/keygen_msql_adjuster.php" );

答案 3 :(得分:0)

您可能还考虑使用正在运行的命令运行库来正确处理错误和事情: https://github.com/kamermans/command

然后你就可以运行这样的程序:

use kamermans\Command\Command;
$cmd = Command::factory('php')
    ->option('-f', 'keygen_msql_adjuster.php')
    ->setDirectory('/home3/kintest2/www/project')
    ->run();

或者,更简单地说:

use kamermans\Command\Command;
$cmd = Command::factory('php -f /home3/kintest2/www/project/keygen_msql_adjuster.php');

与PHP内置方法不同,如果命令失败,此方法将抛出PHP异常,然后在需要时可以捕获并处理:

use kamermans\Command\Command;
use kamermans\Command\CommandException;

$cmd = Command::factory('php')
    ->option('-f', 'keygen_msql_adjuster.php')
    ->setDirectory('/home3/kintest2/www/project');

try {
    $cmd->run();
} catch (CommandException $e) {
    die("The command failed: ".$e->getMessage()."\n");
}