没有任何明显的原因,我无法再更新我的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_exec
而不是exec
。就我而言,它确实出现在exec
。
对此有何想法?我想知道我是应该在这里发布还是在SuperUser上发帖,如果它不属于这个问题,请随时提出这个问题。
编辑:顺便说一下,我使用的是Windows 7 64位,使用Wamp with 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)
答案 0 :(得分:1)
我更仔细地阅读了我链接到(https://github.com/composer/composer/issues/1373)的Composer的GitHub上的问题。在其中,遇到此问题的人说他通过在Windows注册表(cls
)中调用它在shell启动时执行的.bat文件中删除对HKCU\Software\Microsoft\Command Processor\AutoRun
的调用来修复它。
我实际上有一个.bat文件在这里调用一个不相关的内容,其中包含对cls
的调用。所以我的Windows和PHP都很好 - 我只是设置了一些引起麻烦的东西,直到现在我才意识到这一点。
还是很高兴知道这种类型的东西可以搞乱PHP访问shell ...无论如何谢谢你@hakre你的时间。