You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个PHP文件并移除匹配行,解决现有代码无输出问题

问题根源

  1. 你误用了include函数:include的核心作用是执行目标文件的代码,默认执行成功仅返回整数1,只有被引入的文件内主动写了return语句返回内容时,才能拿到对应返回值。你的文件没有return语句,所以$lines1、$lines2实际拿到的是整数1,用整数调用array_diff会触发PHP致命错误,自然页面空白无输出。
  2. 远程和本地引入的差异:本地用路径引入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:48:01