如何比较两个PHP文件并移除匹配行,解决现有代码无输出问题
问题根源
- 你误用了
include函数:include的核心作用是执行目标文件的代码,默认执行成功仅返回整数1,只有被引入的文件内主动写了return语句返回内容时,才能拿到对应返回值。你的文件没有return语句,所以$lines1、$lines2实际拿到的是整数1,用整数调用array_diff会触发PHP致命错误,自然页面空白无输出。 - 远程和本地引入的差异:本地用路径引入
a.php时,PHP直接读取本地文件源代码执行;而引入HTTP开头的远程地址时,远程服务器会先执行该PHP文件,仅返回执行后的输出内容,你无法拿到文件的原始源代码。
解决方法
你需要的是读取文件的每行内容做对比,应该用专门的文件读取函数,不要用include。
情况1:两个文件在当前服务器本地(推荐)
直接用file函数按行读取文件即可:
<?php // 按行读取文件,自动忽略换行符、跳过空行 $lines1 = file('a.php', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $lines2 = file('b.php', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 计算差集:仅保留存在于$lines1但不存在于$lines2的行 $diff = array_diff($lines1, $lines2); // 输出结果 print_r($diff); ?>
情况2:确实需要读取远程文件内容
首先确保远程服务器配置为直接返回目标文件的原始内容(不要解析执行PHP,建议把存储URL列表的文件后缀改为txt避免解析),且你本地php.ini的allow_url_fopen配置为开启状态,再用以下代码:
<?php // 读取远程文件原始内容 $content1 = file_get_contents('https://www.example.com/a.php'); $content2 = file_get_contents('https://www.example.com/b.php'); // 按换行拆分内容为数组,过滤空行、去除每行首尾空白 $lines1 = array_map('trim', array_filter(explode(PHP_EOL, $content1))); $lines2 = array_map('trim', array_filter(explode(PHP_EOL, $content2))); // 计算差集 $diff = array_diff($lines1, $lines2); print_r($diff); ?>
内容的提问来源于stack exchange,提问作者robert0
相关产品推荐
相关产品推荐

