Windows 7 CLI上PHP的exec()输出中的额外字符

时间:2013-09-09 09:53:33

标签: php windows command-line-interface composer-php

没有任何明显的原因,我无法再更新我的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)

1 个答案:

答案 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你的时间。