Hàm copy() trong PHP
Trần Thị Vân
- 1224
- 08/08/2025
Chức năng của Hàm copy() trong PHP
Hàm copy() trong PHP dùng để copy nội dung của một file nguồn tới một file đích, nếu file đích không tồn tại thì sẽ tạo tự động và copy nội dung qua file đó.
Cú pháp của Hàm copy() trong PHP
$kết_quả = copy("đường_dẫn_file_nguồn", "đường_dẫn_file_đích");
đường_dẫn_file_nguồn: Đường dẫn file nguồn dùng để copy nội dung đến file đích (Ví dụ: thumuctest/test.txt)
đường_dẫn_file_đích:Đường dẫn file đích dùng để copy nội dung từ file nguồn đến, nếu file đích chưa có thì tạo file theo đường dẫn (Ví dụ: thumuctest/dich.txt)
$kết_quả: Nếu copy thành công trả kết quả về true, nếu copy thất bại trả kết quả về false.
Code Hàm copy() trong PHP
<?php
$filenguon = 'thumuctest/test.txt';
$filedich = 'thumucdich/dich.txt';
if (copy($filenguon, $filedich)) {
echo "Copy file thành công!";
} else {
echo "Có lỗi xảy ra khi copy!";
}
// Kết quả: Copy file thành công!
?>
Kết quả:
Copy file thành công!
File nguồn yêu cầu phải có, file đích để trống cũng được vì nó sẽ tự động tạo ra file mới với tên ở trong tham số bạn đặt.
Những lưu ý khi sử dụng hàm copy() trong PHP
Hàm copy() khá đơn giản nhưng kết quả phụ thuộc trực tiếp vào đường dẫn, file nguồn và quyền ghi tại vị trí đích. Khi sao chép không thành công, việc kiểm tra đúng nguyên nhân sẽ giúp tránh sửa code không cần thiết.
File nguồn và đường dẫn cần chính xác
Tham số đầu tiên của copy() phải trỏ đến một file thực sự tồn tại và PHP có thể truy cập được. Nếu đường dẫn sai, sai tên file hoặc dùng nhầm thư mục làm nguồn, thao tác sao chép sẽ thất bại.
Khi làm việc với đường dẫn tương đối, cần chú ý thư mục hiện tại của tiến trình PHP. Với các ứng dụng có cấu trúc thư mục phức tạp, có thể dùng đường dẫn tuyệt đối để giảm nguy cơ trỏ nhầm vị trí.
Ví dụ, đoạn mã sau chỉ thực hiện sao chép khi file nguồn tồn tại:
<?php
$source = __DIR__ . '/uploads/anh.jpg';
$destination = __DIR__ . '/backup/anh.jpg';
if (file_exists($source)) {
copy($source, $destination);
}
?>
Cách kiểm tra này đặc biệt hữu ích khi tên file được lấy từ dữ liệu động. Thay vì để chương trình tiếp tục xử lý một đường dẫn không tồn tại, bạn có thể phát hiện vấn đề ngay từ bước đầu.
Quyền ghi của file và thư mục đích
Không chỉ file nguồn cần có thể truy cập, thư mục chứa file đích cũng phải cho phép tiến trình PHP ghi dữ liệu. Đây là nguyên nhân thường gặp khi mã chạy bình thường trên máy cá nhân nhưng lại không sao chép được file sau khi đưa lên máy chủ.
Nếu thư mục đích không có quyền ghi, copy() có thể trả về false dù đường dẫn nguồn hoàn toàn chính xác. Vì vậy, khi gặp lỗi, hãy kiểm tra cả quyền truy cập của thư mục thay vì chỉ kiểm tra đoạn mã.
Thư mục đích cũng phải tồn tại. Hàm copy() không tự tạo toàn bộ thư mục trung gian nếu đường dẫn đích chưa có sẵn.
<?php
$source = __DIR__ . '/data/file.txt';
$destination = __DIR__ . '/backup/file.txt';
if (!is_dir(__DIR__ . '/backup')) {
mkdir(__DIR__ . '/backup', 0755, true);
}
if (!copy($source, $destination)) {
echo 'Không thể sao chép file.';
}
?>
Trong môi trường thực tế, quyền ghi nên được thiết lập phù hợp với cấu hình máy chủ. Không nên tùy tiện cấp quyền quá rộng chỉ để làm cho thao tác sao chép hoạt động.
Cách xử lý khi hàm copy() trả về false
copy() trả về true khi thao tác sao chép thành công và false khi không thực hiện được. Do đó, nên kiểm tra giá trị trả về thay vì mặc định rằng file luôn được tạo thành công.
<?php
if (copy($source, $destination)) {
echo 'Sao chép file thành công.';
} else {
echo 'Sao chép file thất bại.';
}
?>
Nếu nhận được kết quả false, hãy lần lượt kiểm tra file nguồn có tồn tại hay không, đường dẫn có chính xác không, thư mục đích đã tồn tại chưa và PHP có quyền ghi vào vị trí đó hay không.
Cách kiểm tra này giúp xác định lỗi theo từng lớp thay vì chỉ nhìn vào kết quả cuối cùng. Khi triển khai ứng dụng thật, bạn cũng nên ghi nhận lỗi phù hợp trong quá trình phát triển để dễ tìm nguyên nhân mà không hiển thị thông tin hệ thống nhạy cảm cho người dùng.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Hàm copy() trong PHP.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *