Lau*_*ent 2 php exec composer-php
我可以使用PHP exec或者运行任何二进制文件而不是composer.phar shell_exec.
在同一个文件夹中,我有作曲家和另一个具有相同权限的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
Run Code Online (Sandbox Code Playgroud)
Test.php包含:
#!/usr/bin/env php
<?php
print 'hello';
Run Code Online (Sandbox Code Playgroud)
然后我有这个脚本:
<?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);
Run Code Online (Sandbox Code Playgroud)
这是我得到的:
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)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个string 'sh: 1: : Permission denied'错误?我尝试在PHP中执行/usr/bin/env php composer.php /usr/bin/php composer.php,我得到了同样的错误.
我通过禁用xdebug扩展来解决它.
来自doc:
为了在启用xdebug扩展时提高性能,Composer会在没有它的情况下自动重启PHP.
所以我猜这个"PHP重启"是从PHP调用二进制文件/ phar时的一个问题.
可以使用环境变量COMPOSER_ALLOW_XDEBUG来使其与xdebug一起使用,同时还可以改变一些可能改变性能的xdebug选项:
<?php
$result = shell_exec('COMPOSER_ALLOW_XDEBUG=1 /usr/bin/env php -d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 -d xdebug.default_enable=0 composer.phar --version 2>&1');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |