Tôi cần một hàm giống như preg_replace nhưng thay vì chuỗi, tôi cần nó để làm việc với tệp/nội dung tệp.Thay thế nội dung tệp bằng PHP
Trả lời
Bạn có thể làm:
$file = 'filename';
file_put_contents($file,str_replace('find','replace',file_get_contents($file)));
@ câu trả lời codaddict là khá sufficent cho các tập tin nhỏ (và sẽ là thế nào tôi sẽ thực hiện nó nếu kích thước của tập tin là dưới một MiB). Tuy nhiên nó sẽ ăn một tấn bộ nhớ, và như vậy bạn nên cẩn thận khi đọc các tệp lớn.
Nếu bạn muốn có một phiên bản bộ nhớ thân thiện nhiều hơn nữa, bạn có thể sử dụng stream filters ...
class ReplaceText_filter extends php_user_filter {
protected $search = '';
protected $replace = '';
public function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writable($in)) {
$bucket->data = str_replace(
$this->search,
$this->replace,
$bucket->data
);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
public function onCreate() {
if (strpos($this->filtername, '.') === false) return false;
list ($name, $arguments) = explode('.', $this->filtername, 2);
$replace = '';
$search = $arguments;
if (strpos($arguments, '|') !== false) {
list ($search, $replace) = explode('|', $arguments, 2);
}
if (strpos($search, ',') !== false) {
$search = explode(',', $search);
}
if (strpos($replace, ',') !== false) {
$search = explode(',', $replace);
}
$this->search = $search;
$this->replace = $replace;
}
}
stream_filter_register('replacetext.*', 'ReplaceText_Filter');
Vì vậy, sau đó bạn có thể thêm một bộ lọc dòng tùy ý. Tên của bộ lọc xác định các đối số:
$search = 'foo';
$replace = 'bar';
$name = 'replacetext.'.$search.'|'.$replace;
stream_filter_append($stream, $name);
hoặc cho mảng,
$search = array('foo', 'bar');
$replace = array('bar', 'baz');
$name = 'replacetext.'.implode(',', $search).'|'.implode(',', $replace);
stream_filter_append($stream, $name);
Rõ ràng đây là một ví dụ thực sự đơn giản (và không làm rất nhiều kiểm tra lỗi), nhưng nó cho phép bạn làm một cái gì đó như thế này:
$f1 = fopen('mysourcefile', 'r');
$f2 = fopen('mytmpfile', 'w');
$search = array('foo', 'bar');
$replace = array('bar', 'baz');
$name = 'replacetext.'.implode(',', $search).'|'.implode(',', $replace);
stream_filter_append($f1, $name);
stream_copy_to_stream($f1, $f2);
fclose($f1);
fclose($f2);
rename('mytmpfile', 'mysourcefile');
Và đó sẽ tiếp tục sử dụng bộ nhớ rất thấp trong khi chế biến tiềm năng khổng lồ file (GiB hoặc TiB) ...
Ồ, và điều thú vị khác là nó có thể chỉnh sửa nội dòng các loại luồng khác nhau. Ý tôi là, bạn có thể đọc từ luồng HTTP, chỉnh sửa nội tuyến và ghi vào luồng tệp. Nó khá mạnh mẽ (vì bạn có thể chuỗi các bộ lọc này) ...
Vấn đề duy nhất với câu trả lời này là khi các cụm từ tìm kiếm được đặt trên các nhóm, đặc biệt là khi xử lý các tệp lớn hơn 8 KiB. – bit2shift
- 1. thay thế nội dung div bằng javascript
- 2. Lấy nội dung của một tệp bằng PHP FTP
- 3. Làm cách nào để ghi đè nội dung tệp bằng nội dung mới trong PHP?
- 4. Thay đổi nội dung div qua jquery bằng một nội dung của tệp html khác
- 5. Chia nội dung php thành nhiều tệp
- 6. Thay thế nội dung thẻ HTML bằng sed
- 7. Lấy nội dung tệp bằng FTPClient Java
- 8. Thay thế nội dung của một tệp văn bản bằng một regex trong PowerShell
- 9. Tôi có thể lấy nội dung của tệp được tải lên bằng php bằng cách nào?
- 10. Thay thế nội dung đã chọn trong ckEditor bằng nội dung mới bằng cách sử dụng javascript
- 11. Mã hóa nội dung bằng php và java
- 12. jQuery Templates - Thay thế nội dung DIV
- 13. Cách nhận nội dung yêu cầu (nội dung) trong PHP?
- 14. Thay chuỗi trong nội dung tập tin
- 15. Sửa đổi nội dung ứng dụng bằng API tệp Phonegap
- 16. Thay thế nội dung của cửa sổ _top bằng nội dung iframe mà không cần tải lại trang
- 17. Node.js/Xóa nội dung trong tệp
- 18. khung nội tuyến Thay đổi nội dung CSS Style
- 19. Tài liệu JavaScript.Write thay thế tất cả nội dung nội dung Khi sử dụng AJAX
- 20. thay thế cho nội dung của UIViewBài viết cho nội dung không dựa trên hình ảnh
- 21. Đọc tệp HTML từ nội dung
- 22. Thay đổi nội dung của div bằng JavaScript
- 23. thay đổi nội dung chặn
- 24. Làm thế nào để thay đổi loại nội dung trong php?
- 25. Md5 thay thế bằng PHP?
- 26. cách đọc nội dung của tệp bằng Fileupload
- 27. Xóa nội dung tệp android
- 28. Thay thế một phần nội dung WebView khi đang tải
- 29. Thay thế khối văn bản được phân tách trong tập tin bằng nội dung của một tệp khác
- 30. php: nhận nội dung tệp và lưu trữ tệp trong thư mục cụ thể
Bạn có thể kéo nội dung tệp vào một biến bằng cách lặp lại nó bằng cách sử dụng fread và sau đó làm việc với preg_replace như bạn làm với một chuỗi văn bản? – Chris
Có nhưng sau đó nội dung cập nhật phải được ghi vào các tệp được lấy từ đó. –
Vì vậy, vấn đề để viết nội dung trở lại tập tin là gì? –