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

PHP 8.2.1执行.phar文件时出现fgets() I/O错误求助

问题分析与解决思路

问题背景

在Termux环境下使用PHP 8.2.1执行PocketMine-MP.phar时,运行数行输出后触发fgets(): Read of 8192 bytes failed with errno=5 I/O error错误,进程终止;但PHP 8.1及Windows CMD环境下运行正常。

可能原因与解决方法

  • PHP 8.2标准输入处理变更
    PHP 8.2对php://stdin的读取逻辑做了更严格的状态校验,Termux终端的tty交互机制可能触发了新的错误检测。可修改phar:///data/data/com.termux/files/home/PocketMine-MP.phar/src/console/ConsoleReader.php第67行的代码,增加错误处理逻辑:

    $line = @fgets($this->stdin, 8192);
    if($line === false && !feof($this->stdin)) {
        // 重试打开标准输入
        $this->stdin = fopen('php://stdin', 'r');
        continue;
    }
    
  • Termux终端环境兼容性
    Termux的底层终端库可能与PHP 8.2的stdin读取存在兼容性问题:

    • 尝试更新Termux系统包:pkg upgrade
    • 切换终端模拟器(如使用Termux:X11替代默认终端)
    • 用screen或tmux后台运行进程,避免终端会话的I/O中断
  • Phar文件权限或扩展配置

    • 检查Phar文件权限:chmod 755 PocketMine-MP.phar
    • 确认PHP 8.2的phar.readonly配置为Off(可在php.ini中修改或运行时用ini_set('phar.readonly', 0))
  • 临时规避方案
    若无需控制台交互,可重定向stdin避免错误:

    php PocketMine-MP.phar < /dev/null
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:32:44