SiteGround主机不执行HTML后置PHP代码,求无需修改代码的解决方法
问题原因
你遇到的问题本质是session_start()、header()这类PHP函数要求必须在任何实际输出(包括HTML标签、空格、换行)之前调用,才可以正常执行。infinityfree默认开启了足够大的全局输出缓存,会先把页面前期的HTML内容暂存在缓存区,等PHP脚本全部执行完成后再统一输出到客户端,所以你的代码可以正常运行。而SiteGround默认关闭了输出缓存,前期输出的HTML已经直接发送给客户端,后续的头操作函数就会失效,看起来就像HTML之后的PHP没有执行。
无需修改现有代码的解决方案
所有方案都通过开启输出缓存实现,不需要改动你的现有业务代码:
- 方案1:修改php.ini配置
如果你有权限编辑站点的php.ini文件,找到output_buffering配置项,将值修改为On或者4096(单位为字节,可根据你页面前期HTML的大小调整为更大的值),保存后重启PHP服务即可生效。 - 方案2:使用.user.ini配置(SiteGround环境优先推荐)
在站点的根目录下新建名为.user.ini的文件,写入如下内容:
保存后等待1-5分钟,SiteGround会自动加载该配置,无需重启服务。output_buffering = 4096 - 方案3:修改.htaccess配置(仅Apache服务器可用)
如果你的站点使用Apache作为Web服务,在根目录的.htaccess文件中新增如下一行:
保存后立即生效。php_value output_buffering 4096
验证方法
配置生效后,你可以直接访问原页面测试登录、跳转功能是否恢复正常,也可以新建简单测试页验证:页面前半部分写任意HTML内容,后半部分写<?php session_start(); header("Location: ./test.php"); ?>,如果能正常跳转到你自己的test.php页面则说明配置生效。
内容的提问来源于stack exchange,提问作者randy
相关产品推荐
相关产品推荐

