Rumah > Soal Jawab > teks badan
Bagaimana untuk menggantikan baris teks tertentu dalam fail menggunakan php?
Saya tidak tahu nombor talian. Saya mahu menggantikan baris yang mengandungi perkataan tertentu.
P粉1387117942023-10-19 13:40:07
Anda perlu menulis ganti keseluruhan fail.
Jadi, untuk fail yang agak kecil, baca fail ke dalam tatasusunan , cari perkataan, gantikan baris yang ditemui, dan tulis semua yang lain ke fail.
Untuk fail yang besar, algoritmanya berbeza sedikit, tetapi secara keseluruhannya betul-betul sama.
Bahagian penting ialah File Locking
Inilah sebabnya kami memilih pangkalan data.
P粉1557104252023-10-19 13:24:24
Kaedah yang boleh digunakan untuk fail yang lebih kecil yang sesuai dalam ingatan anda dua kali:
$data = file('myfile'); // reads an array of lines function replace_a_line($data) { if (stristr($data, 'certain word')) { return "replacement line!\n"; } return $data; } $data = array_map('replace_a_line', $data); file_put_contents('myfile', $data);
Nota ringkas, PHP > 5.3.0 menyokong fungsi lambda, jadi anda boleh mengalih keluar pengisytiharan fungsi yang dinamakan dan memendekkan pemetaan kepada:
$data = array_map(function($data) { return stristr($data,'certain word') ? "replacement line\n" : $data; }, $data);
Secara teorinya anda boleh menjadikannya satu (lebih sukar untuk diikuti) pernyataan php:
file_put_contents('myfile', implode('', array_map(function($data) { return stristr($data,'certain word') ? "replacement line\n" : $data; }, file('myfile')) ));
Untuk fail yang lebih besarkaedah lain (kurang intensif memori) harus digunakan:
$reading = fopen('myfile', 'r'); $writing = fopen('myfile.tmp', 'w'); $replaced = false; while (!feof($reading)) { $line = fgets($reading); if (stristr($line,'certain word')) { $line = "replacement line!\n"; $replaced = true; } fputs($writing, $line); } fclose($reading); fclose($writing); // might as well not overwrite the file if we didn't replace anything if ($replaced) { rename('myfile.tmp', 'myfile'); } else { unlink('myfile.tmp'); }