【发布时间】:2012-03-04 00:25:48
【问题描述】:
这里出现异常问题!我正在从 PHP 中执行 Powershell。这是一个示例,我们将 Powershell 命令的输出捕获到 $query 中:
$query = shell_exec("powershell -command $psScriptPath -logFile'$logFile' -param1 '$blah'< NUL");
现在,这在大多数情况下都很好用。 Powershell 脚本做他们的事情,并在其中使用 Write-Output 将一些数据作为 HTML 返回给屏幕/用户。示例:
Write-Output "$logFile<br /><br />"
Write-Output "Blah blah some information<br />"
当 PHP 回显 $query 时,问题就来了。在每个写入输出“行”上,PHP 似乎都会在第 79 个字符(或空格)之后插入一个空格或某种换行符。有时,这与空格重合,因此并不明显,但有时它位于单词的中间。例如当 $logFile 的值为:
L:\transcripts\activedirectory\change-display-name\2012-03-03-235201-abcde-admin.txt<br />
它实际上最终在屏幕上看起来像这样(注意最后的空格):
L:\transcripts\activedirectory\change-display-name\2012-03-03-235201-abcde-admi n.txt
查看生成的源代码显示:
L:\transcripts\activedirectory\change-display-name\2012-03-03-235201-itwrm-admi
n.txt<br />
另一个例子是在 Powershell 中:
Write-Output "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ<br />"
给予:
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA
BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
好像 PHP 以某种方式包装文本?或者,Write-Output 的输出“在”将其发送回 PHP(到 $query)之前对其进行包装。
如果我在 PHP 中回显“ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ”并查看源代码,它会出现在一行上,没有上面的中断。
我遇到了 wordwrap 功能,但看不出这有什么帮助。不太清楚现在发生了什么......
编辑:这可能与 Powershell 控制台的默认缓冲区大小为 80 个字符宽有关吗?
感谢您的帮助!
【问题讨论】:
-
我打赌 Powershell 控制台自动换行它的输出。
-
cmd.exe的默认窗口大小为80个字符。
-
是的,就是这样。输入所有问题让我意识到。我设法通过增加 Powershell 脚本顶部窗口的缓冲区宽度来解决它。我目前没有足够的代表自我,所以无法发布代码。
-
你也试过 PHP exec 吗?
-
@AndyArismendi 很有趣。直到现在才意识到两者的区别。虽然我有一个解决方案,但值得知道!
标签: php powershell echo