Bạn có thể sao chép một tệp hiện có sang một tệp mới theo ba cách khác nhau -
Đọc một dòng từ một tệp và ghi vào một tệp khác trong một vòng lặp.
Đọc toàn bộ nội dung vào một chuỗi và ghi chuỗi đó vào một tệp khác.
Sử dụng thư viện chức năng tích hợp sẵn của PHP bao gồm hàm copy().
Trong cách tiếp cận đầu tiên, bạn có thể đọc từng dòng từ một tệp tin hiện có và ghi vào một tệp tin mới cho đến khi tệp tin hiện có đạt đến cuối tệp.
Trong đoạn mã PHP sau, một tệp đã tồn tại (hello.txt) được đọc từng dòng trong một vòng lặp, và mỗi dòng được ghi vào một tệp khác (new.txt).
Giả sử rằng "hello.txt" chứa đoạn văn bản sau −
Hello World TutorialsPoint PHP Tutorials
Dưới đây là mã PHP để tạo một bản sao của một tệp hiện có −
<?php $file = fopen("hello.txt", "r"); $newfile = fopen("new.txt", "w"); while(! feof($file)) { $str = fgets($file); fputs($newfile, $str); } fclose($file); fclose($newfile); ?>
Tệp "new.txt" mới được tạo nên có nội dung hoàn toàn giống như vậy.
Ở đây, chúng ta sử dụng hai hàm tích hợp sẵn từ thư viện PHP -
file_get_contents( string $filename, bool $use_include_path = false, ?resource $context = null, int $offset = 0, ?int $length = null ): string|false
Hàm này đọc toàn bộ nội dung của tệp vào một chuỗi. Tham số $filename là một chuỗi chứa tên của tệp cần được đọc.
Hàm khác là −
file_put_contents( string $filename, mixed $data, int $flags = 0, ?resource $context = null ): int|false
Hàm này đặt nội dung của $data vào $filename. Nó trả về số byte đã được ghi.
Trong ví dụ sau, chúng ta đọc nội dung của "hello.txt" vào một chuỗi $data và sử dụng nó làm tham số để ghi vào tệp "test.txt".
<?php $source = "hello.txt"; $target = "test.txt"; $data = file_get_contents($source); file_put_contents($target, $data); ?>
PHP cung cấp hàm copy(), chỉ dành riêng để thực hiện thao tác sao chép.
copy(string $from, string $to, ?resource $context = null): bool
Tham số $from là một chuỗi chứa tệp hiện có. Tham số $to cũng là một chuỗi chứa tên của tệp mới sẽ được tạo. Nếu tệp mục tiêu đã tồn tại, nó sẽ bị ghi đè.
Phép sao chép sẽ trả về true hoặc false dựa trên việc tệp có được sao chép thành công hay không.
Hãy sử dụng hàm copy() để tạo "text.txt" là một bản sao của tệp "hello.txt".
<?php $source = "a.php"; $target = "a1.php"; if (!copy($source, $target)) { echo "failed to copy $source...\n"; } ?>