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

多个file_put_contents仅最后一个生效,求问题原因

问题原因与解决方案

核心原因

你每次执行preg_replace时,都是基于最初读取的原始文件内容进行替换,而非上一次修改后的内容。同时,每次调用file_put_contents都会直接覆盖整个文件,导致前两次的修改结果被第三次基于原始内容的替换完全覆盖,最终只有最后一次修改生效。

修复方案

方案1:链式传递替换结果,一次性写入

将每次替换后的结果保存到$file_content变量中,最后统一写入文件:

$dir = 'path/to/file';
$file_content = file_get_contents($dir);

// 基于上一次的替换结果继续修改
$file_content = preg_replace($find_first_data, $replace_first_data, $file_content);
$file_content = preg_replace($find_second_data, $replace_second_data, $file_content);
$file_content = preg_replace($find_third_data, $replace_third_data, $file_content);

// 一次性写入所有修改
file_put_contents($dir, $file_content);

方案2:使用数组参数批量替换

利用preg_replace支持数组参数的特性,一次完成所有替换操作:

$dir = 'path/to/file';
$file_content = file_get_contents($dir);

// 定义查找规则和替换内容的数组
$patterns = [
    '/\$first_data = \d;/',
    '/\$second_data = \d;/',
    '/\$third_data = \d;/'
];
$replacements = [
    '$first_data = ' . $process_first_data . ';',
    '$second_data = ' . $process_second_data . ';',
    '$third_data = ' . $process_third_data . ';'
];

// 批量替换并写入文件
$file_content = preg_replace($patterns, $replacements, $file_content);
file_put_contents($dir, $file_content);

两种方案都能确保所有修改都基于最新的内容,且仅写入一次文件,既解决了覆盖问题,也提升了操作效率。

内容的提问来源于stack exchange,提问作者yobebix932

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:20:34