PHP 脚本无法在浏览器中完全加载

PHP 脚本无法在浏览器中完全加载

我有一个很长的 PHP 脚本,但对于某些人来说,它无法完全加载。您可以在以下屏幕截图中看到该问题的一些示例:

屏幕截图 1

屏幕截图 1

屏幕截图 2

屏幕截图 2

屏幕截图 3

屏幕截图 3

无论我做什么,我都无法在我的系统或任何其他系统上复制此问题。我让同事尝试,但脚本按预期完全加载。我尝试过 Windows 和 Mac 系统。我使用的浏览器 (Firefox) 版本与遇到此问题的人使用的浏览器版本相同。我让这些人清除缓存、清除 cookie、重新启动浏览器、重新启动计算机等,但没有任何效果。

我实施了我认为可以解决问题的方法,方法是将用于显示 HTML 的所有 PHP echo 语句(有数百个)更改为标准 HTML,然后仅使用 printf 输出 PHP 变量。例如,我更改了以下代码:

<tr>
    <td class="cell_grey_background">Air / Hydraulic Systems, etc. for Leakage <?php if (isset($air_hydraulic_systems_for_leakage_error)) echo "<span class='red_text'>$required_field_error</span>"; ?></td>
    <td class="border_only" align="center"><?php echo "<input id='air_hydraulic_systems_leakage_pass' class='inspection-radio-btn' name='air_hydraulic_systems_leakage' type='radio' value='1' $air_hydraulic_systems_for_leakage_pass_checked $disable_field />"; ?></td>
    <td class="border_only" align="center"><?php echo "<input id='air_hydraulic_systems_leakage_fail' class='inspection-radio-btn' name='air_hydraulic_systems_leakage' type='radio' value='2' $air_hydraulic_systems_for_leakage_fail_checked $disable_field />"; ?></td>
    <td class="border_only" align="center"><?php echo "<input id='air_hydraulic_systems_leakage_na' class='inspection-radio-btn' name='air_hydraulic_systems_leakage' type='radio' value='9' $air_hydraulic_systems_for_leakage_NA_checked $disable_field />"; ?></td>
</tr>

改为:

<tr>
    <td class="cell_grey_background">Hydraulic Systems for Leakage <?php if (isset($hydraulic_systems_for_leakage_error)) echo "<span class='red_text'>$required_field_error</span>"; ?></td>
    <td class="border_only" align="center">
        <input id='hydraulic_systems_for_leakage_pass' class='inspection-radio-btn' name='hydraulic_systems_for_leakage' type='radio' value='1' <?php if ($hydraulic_systems_for_leakage_pass_checked) { printf($hydraulic_systems_for_leakage_pass_checked); } ?> <?php printf($disable_field); ?> />
    </td>
    <td class="border_only" align="center">
        <input id='hydraulic_systems_for_leakage_fail' class='inspection-radio-btn' name='hydraulic_systems_for_leakage' type='radio' value='2' <?php if ($hydraulic_systems_for_leakage_fail_checked) { printf($hydraulic_systems_for_leakage_fail_checked); } ?> <?php printf($disable_field); ?> />
    </td>
    <td class="border_only" align="center">
        <input id='hydraulic_systems_for_leakage_na' class='inspection-radio-btn' name='hydraulic_systems_for_leakage' type='radio' value='9' <?php if ($hydraulic_systems_for_leakage_NA_checked) { printf($hydraulic_systems_for_leakage_NA_checked); } ?> <?php printf($disable_field); ?> />
    </td>
</tr>

我对页面上每个表的每一行都进行了此操作(因为脚本很长,所以有数百行)。在我做出此更改并将代码推送到生产环境后,用户说问题已解决。然而,他们后来又回复我,说问题又出现了。

我研究过输出缓冲问题,但输出缓冲区中只有 0KB。我研究过 PHP 内存限制,但没有收到表明存在问题的典型致命错误。毕竟,页面加载了一点,但没有完全加载。

有没有其他人遇到过类似的 PHP 问题?我真的绞尽脑汁想弄清楚到底发生了什么,但在谷歌搜索中似乎找不到任何相关的东西。

任何帮助都将不胜感激。谢谢!

答案1

如果您的脚本没有由于某些错误而终止(您可以在错误日志中捕获该错误),则问题可能在于缓冲(因为您说脚本很大,所以可能会超时)。

由于您在本地访问它,也许您无法复制它,但是您的用户使用的连接速度较慢,这就是他们可能遇到问题的原因。

我的建议是在脚本运行时(比如每 X 条记录)或每个表组之后,提前并定期刷新缓冲区。

flush(); 
ob_flush();

有时,您还需要发送标头才能使其正常工作。如果是这样,请尝试将以下内容添加为脚本的第一行,和/或在任何内容发送到浏览器之前添加:

header('Content-Encoding: none;');

最后,您可能还希望提高页面的性能,以便更快地加载数据,从而避免任何超时相关的问题。

相关内容