You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP代码在zsh中输出异常,未打印最后内容是zsh的Bug吗?

问题描述

我尝试在zsh和bash环境中运行以下PHP代码:

index.php

<?php
echo "Str1";
echo "Str2\n";
echo "Str3";
?>

在bash中运行的输出为:

[...]$ php index.php
Str1Str2
Str3[...]$

但在zsh中运行时出现异常输出,未打印最后的Str3:

[...]$ php index.php
Str1Str2
[...]$

请问这是zsh的Bug吗?


解答

这不是zsh的Bug,问题根源出在输出缓冲机制的差异上:

PHP的echo在输出到终端时,会根据输出目标自动调整缓冲策略:

  • 当输出目标是交互式终端时,默认采用行缓冲模式——遇到换行符\n就会立即刷新缓冲内容到终端;
  • 但如果输出内容末尾没有换行符,不同Shell对进程结束后剩余缓冲的处理逻辑不一样:bash会主动强制刷新剩余缓冲,把Str3输出;而zsh没有这个额外处理步骤,导致留在缓冲里的Str3没被打印出来。

修复方法

可以通过以下几种方式解决:

  • 给最后一个echo添加换行符:
    echo "Str3\n";
    
  • 手动强制PHP刷新输出缓冲:
    echo "Str3";
    flush();
    
  • 运行PHP时直接禁用输出缓冲:
    php -n -d output_buffering=0 index.php
    

内容的提问来源于stack exchange,提问作者mukkumayc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:10:19