PHP 8.0升级后Coppermine相册出现get_magic_quotes_runtime()未定义错误求助
get_magic_quotes_runtime()致命错误 问题根源
get_magic_quotes_runtime()是PHP 4/5时代的旧函数,PHP 7.4已被废弃,PHP 8.0彻底移除。你使用的Coppermine 1.6.x版本未适配PHP 8.0,调用这个不存在的函数就触发了致命错误。
分步修复方案
1. 替换init.inc.php中的错误代码
打开/customers/2/9/4/toneelgroepcontactharlingen.nl/httpd.www/cpg16x/include/init.inc.php,定位到第62行的相关代码(应为调用get_magic_quotes_runtime()的判断逻辑),将原代码替换为:
// 兼容PHP 8.0:仅在函数存在时执行旧逻辑 if (function_exists('get_magic_quotes_runtime')) { if (get_magic_quotes_runtime()) { set_magic_quotes_runtime(0); } }
这段代码先检查函数是否存在,PHP 8.0下函数不存在会直接跳过,避免报错;旧PHP版本则正常执行原有逻辑。
2. 全局排查其他相同调用
Coppermine 1.6.x可能在其他文件里也用到了get_magic_quotes_runtime()或set_magic_quotes_runtime(),可以通过文件管理器的全局搜索功能(或SSH下执行grep -r "get_magic_quotes_runtime" ./cpg16x/)找到所有调用,都用上述function_exists()判断逻辑包裹。
3. 终极方案:升级Coppermine
如果修复后仍有其他PHP 8.0兼容性问题,建议直接升级到Coppermine官方最新稳定版(升级前务必备份相册的所有文件和数据库),新版本已适配PHP 8.x系列。
为什么注释原代码没用?
单纯注释第62行只是跳过了这一处调用,但后续代码可能依赖magic_quotes_runtime的关闭状态,或者其他文件里还有相同的错误调用,因此问题未彻底解决。用函数存在性判断的方式,既能兼容新旧PHP版本,又能从根源避免函数未定义错误。
内容的提问来源于stack exchange,提问作者mierlo87

