【发布时间】:2017-08-22 10:25:42
【问题描述】:
我可以使用 PHP 的 exec 或 shell_exec 运行任何二进制文件,但不能运行 composer.phar。
在同一个文件夹中,我有 composer 和另一个具有相同权限的 php 可执行文件:
ls -lh
total 1,8M
-rwxr-xr-x 1 me me 1,8M août 22 20:48 composer.phar
-rwxr-xr-x 1 me me 39 août 22 21:05 test.php
Test.php 包含:
#!/usr/bin/env php
<?php
print 'hello';
然后我有这个脚本:
<?php
print $cmd = "composer.phar --version 2>&1" ;
print "<br>";
$return = exec( $cmd );
var_dump($return);
print "<br><br>";
print $cmd = "test.php 2>&1";
print "<br>";
$return = shell_exec( $cmd );
var_dump($return);
这是我得到的:
composer.phar --version 2>&1
[...]Process.php:81:string 'sh: 1: : Permission denied' (length=26)
test.php 2>&1
[...]Process.php:88:string 'hello' (length=5)
为什么我会收到 string 'sh: 1: : Permission denied' 错误?我尝试用/usr/bin/env php composer.php/usr/bin/php composer.php在PHP中执行,我得到了同样的错误。
【问题讨论】:
-
我刚刚看到你关于权限的注释,所以不是这样。我认为你必须打开 phar 的包装。见上面的链接。
-
不是重复的。从 PHP 脚本以编程方式运行 composer 可能是一种解决方法,但不能解决这个奇怪的问题。
标签: php composer-php exec