求助:PHP 7.4中include文件返回数组失效且出现多余输出
解决PHP引入文件返回数组时的多余输出问题
这问题我之前升级PHP版本时也踩过坑,核心原因是PHP版本对短标签的解析规则变化,导致你的被引入文件代码没被正确识别为PHP逻辑,反而直接输出了内容。
问题根源
你的被引入文件用了短标签<?,而PHP 7.4及以后版本中,short_open_tag配置项默认是关闭的。当这个配置关闭时,<?不会被识别为PHP代码的起始标记,文件里的return ['key' => 'value'];会被当成普通文本直接输出;同时include操作因为文件成功加载,返回值是int(1),这就出现了你看到的“先输出数组内容,再var_dump出1”的现象。而PHP 7.3中这个配置默认开启,所以之前没问题。
解决方案(优先推荐第一种)
修改被引入文件为完整PHP标签
把file.php的代码改成:<?php return ['key' => 'value'];这样不管
short_open_tag配置是开是关,PHP都会正确解析这段代码,include会直接返回数组,不会产生任何多余输出,控制器里的var_dump($data)也会正常打印目标数组。开启short_open_tag配置(不推荐)
如果一定要保留短标签,可以修改php.ini文件中的配置:short_open_tag = On修改后重启Web服务(比如Nginx、Apache)或PHP-FPM即可生效。但这种方式会降低代码的可移植性,很多生产环境默认关闭该配置,所以不推荐使用。
验证效果
修改后再次执行控制器代码,你会发现不会有多余的数组输出,var_dump($data)会直接打印出array(1) { ["key"]=> string(5) "value" },完全符合你的需求。
内容的提问来源于stack exchange,提问作者Sasha Sasha
相关产品推荐
相关产品推荐

