[英]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 "]]";
多亏了所有的回应,以下才是最终成功的方法:
将以下内容添加到php脚本的顶部:
#!/usr/local/bin/php-cgi
我不知道这在我的服务器配置上是否很特别,但是我可以运行exec()
并得到我想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.