繁体   English   中英

如何从PHP脚本执行命令行

[英]How to do command line from PHP script

我需要编写一个脚本,该脚本将为用户提供给定Unix帐户(脚本所在的Unix服务器)上的信息。 多数情况是passwd文件中或可以通过finger获得的东西。

PHP处于安全模式,因此我无法通过php中内置的诸如file_get_contents()类的东西来访问passwd文件。 另外,由于处于安全模式,因此禁用了其他各种命令行功能。

我以为可以通过套接字获取信息(尚不知道那是什么意思,但是我想我会尝试的),但是我收到一个致命错误,即socket_create()是一个未知函数。 我拉起了php-config文件(仅供参考,我无法更改),并且确实可以确定,套接字未启用。

但是,当我在那儿时,我看到没有设置实际目录的行'--with-exec-dir='

因此,我想起了当我尝试每个命令行功能时,有些人抛出了“在安全模式下不允许的”类型错误,而另一些则什么也没有做。 如果我输入类似的内容:

echo "[[";
exec("finger user");
echo "]]";

我最终会得到[[]] 因此,没有错误,也没有结果。

底线:

有没有我尝试过的东西? (通常)是否可以设置运行时配置选项以使exec()工作?

快速说明:我也尝试过passthru() ,特别是passthru("pwd")仍然没有输出。

更新

根据反馈,我尝试了以下两种方法:

$stuff = exec("pwd", $return);

echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);

结果是:

stuff=
return=Array
(
)

$stuff = passthru("pwd", $return);

echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);

结果是:

stuff=
return=1

1听起来很有希望,但还不是我想要的。

理念

因此,这实际上是对我无权访问的现有脚本的更新(请不要问)。 这是一个通过cgi调用的perl脚本。 有没有一种方法可以通过cgi做php(因此我不必处理perl或依靠旧代码)?

恐怕您无法在安全模式下执行此操作。 如果您可以控制服务器配置,则必须删除安全模式。

我认为您不能依赖套接字读取本地文件,套接字用于与网络相关的事情。

Exec返回一个值,因此:

$var = exec("finger user"); 

然后解析输出以获得所需的内容。 您可以通过添加可选变量来获得返回状态,从而:

exec("finger user", $var, $return_status);

要不就:

echo exec("finger user");

如果您只想看输出。

exec本质上不会返回任何数据。

尝试类似的东西,

exec("finger user",$output);

echo "[[";
foreach($output as $key => $value){
echo $value;
}
echo "]]";

多亏了所有的回应,以下才是最终成功的方法:

  • 创建一个cgi-bin文件夹
  • 将以下内容添加到php脚本的顶部:

      #!/usr/local/bin/php-cgi 

我不知道这在我的服务器配置上是否很特别,但是我可以运行exec()并得到我想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM