【问题标题】:Spaces appear in PHP output from Powershell after 79 characters79 个字符后,Powershell 的 PHP 输出中出现空格
【发布时间】: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


【解决方案1】:

你已经有了答案,但是当我遇到同样的问题时,这是我添加到脚本中的一段代码(如果我没记错的话,我会在 StackOverflow 上找到):

if ($Host -and $Host.UI -and $Host.UI.RawUI) 
{
    $rawUI = $Host.UI.RawUI
    $oldSize = $rawUI.BufferSize
    $typeName = $oldSize.GetType().FullName
    $newSize = New-Object $typeName (500, $oldSize.Height)
    $rawUI.BufferSize = $newSize
}

【讨论】:

  • 是的,这正是我发现的(来自 heyscriptingguy):)
猜你喜欢
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多