0

没有任何明显的原因,我无法再更新 Composer 管理的依赖项。经过一番调查,事实证明 PHP 在其exec方法的任何使用前都添加了一个额外的字符。

基本示例:

php -r "var_dump(exec('echo lol', $output, $exit), $output, $exit);"

分发 :

string(4) "♀lol"
array(1) {
  [0] =>
  string(4) "♀lol"
}
int(0)

字符实际上是一个FF(换页)字符(0x0C)。

我的谷歌搜索把我带到了这里:

但似乎我的问题与本主题中的问题不同,因为在它中,可怕的角色出现了shell_execand not exec。就我而言,它确实出现在exec.

对此有什么想法吗?我想知道我应该在这里还是在 SuperUser 上发帖,如果它不属于这里,请随时移动这个问题。

编辑:顺便说一句,我在 Windows 7 64 位上,使用 Wamp 和 PHP 5.4.12 :)

编辑2:输出php-v

PHP 5.4.12 (cli) (built: Feb 25 2013 00:29:22) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

输出php --ini

Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         C:\wamp\bin\php\php5.4.12\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
4

1 回答 1

1

好吧,对不起,我很笨。答案一直摆在我面前。

我更仔细地阅读了我链接到的 Composer GitHub 上的问题(https://github.com/composer/composer/issues/1373)。在其中,遇到问题的人说他通过在 Windows 的注册表 ( )cls中调用它在 shell 启动时执行的 .bat 文件中删除了对它的调用来修复它。HKCU\Software\Microsoft\Command Processor\AutoRun

我实际上有一个 .bat 文件在这里调用了一个无关的问题,其中包含对 .bat 的调用cls。所以我的 Windows 和 PHP 都很好——我只是设置了一些导致麻烦的东西,直到现在我才意识到。

仍然很高兴知道这种类型的东西可能会使 PHP 访问 shell 变得混乱......无论如何感谢@hakre 的时间。

于 2013-09-09T12:25:34.993 回答