Hướng dẫn dùng upload failed trong PHP

Cách khắc phục lỗi "Upload: Failed to Write File to Disk" trong WordPress

Bạn có thấy lỗi 'Upload: Failed to Write File to Disk' khi tải tập tin lên trong WordPress không?

Lỗi phổ biến này có thể rất khó chịu cho người dùng mới bắt đầu. Trong bài viết này, mình sẽ hướng dẫn bạn cách sửa lỗi "Upload: Failed to Write File to Disk" trong WordPress.

1. Nguyên nhân nào không thể ghi tập tin vào đĩa lỗi trong WordPress?

Lỗi này có thể xảy ra do một số lý do. Tuy nhiên, một trong những phổ biến nhất là quyền thư mục không chính xác.
Mỗi tập tin và thư mục trên trang web của bạn có một tập hợp các quyền. Máy chủ web của bạn kiểm soát quyền truy cập vào các tập tin dựa trên các quyền này.

Quyền không chính xác đối với một thư mục có thể làm mất khả năng ghi tập tin trên máy chủ của bạn. Điều này có nghĩa là máy chủ web của bạn không thể tạo hoặc thêm tập tin mới vào thư mục cụ thể đó.

Nếu bạn cố gắng tải lên hình ảnh hoặc bất kỳ tập tin nào khác từ khu vực quản trị WordPress, bạn sẽ nhận được một trong các thông báo lỗi sau:

  • WordPress không thể ghi vào đĩa
  • WordPress không tải lên được do lỗi không ghi được tập tin vào đĩa
  • Không thể tạo thư mục /wp-content/uploads/2016/03. Là thư mục cha của nó ghi được vào máy chủ?

2. Sửa lỗi tải lên không thành công để ghi vào đĩa trong WordPress.

Trước tiên, bạn cần kết nối với trang web WordPress của mình bằng ứng dụng FTP.
Đối với hướng dẫn này, mình đang sử dụng ứng dụng khách FileZilla FTP miễn phí. Nếu bạn đang sử dụng một số ứng dụng khách FTP khác, thì nó có thể trông hơi khác một chút.

Sau khi đã kết nối, bạn cần nhấp chuột phải vào thư mục wp-content và chọn quyền đối với tập tin.


Quyền đối với tập tin qua FTP

Thao tác này sẽ hiển thị hộp thoại quyền đối với tập tin trong ứng dụng FTP của bạn. Nó sẽ hiển thị cho bạn các quyền đối với chủ sở hữu, nhóm và công khai đối với tập tin.


Thay đổi quyền đối với tập tin cho thư mục wp-content

Bạn cần nhập 755 vào trường giá trị số.
Sau đó, bạn cần chọn hộp bên cạnh 'Đệ quy vào thư mục con' .
Cuối cùng, bạn cần nhấp vào tùy chọn 'Chỉ áp dụng cho thư mục' .
Bấm vào nút OK để tiếp tục.

Ứng dụng khách FTP của bạn bây giờ sẽ đặt quyền đối với thư mục thành 755 và áp dụng nó cho tất cả các thư mục con bên trong wp-content. Điều này bao gồm thư mục tải lên nơi lưu trữ tất cả hình ảnh của bạn.
Bạn cũng muốn đảm bảo rằng các quyền tập tin đối với các tập tin riêng lẻ trong thư mục wp-content của bạn là chính xác.

Một lần nữa, nhấp chuột phải vào thư mục wp-content và chọn quyền đối với tập tin. Lần này mình sẽ thay đổi quyền cho các tập tin.

Nhập 644 vào giá trị số, sau đó chọn hộp bên cạnh 'Đệ quy vào thư mục con' .
Cuối cùng, bạn cần nhấp vào tùy chọn 'Chỉ áp dụng cho tập tin' .
Bấm vào nút OK để tiếp tục. Ứng dụng khách FTP của bạn bây giờ sẽ đặt quyền truy cập tập tin thành 644 cho tất cả các tập tin trong thư mục wp-content.

Bây giờ bạn có thể truy cập trang web WordPress của mình và thử tải lên các tập tin.

Nếu bạn vẫn thấy lỗi, thì bạn cần liên hệ với nhà cung cấp dịch vụ lưu trữ WordPress của mình và yêu cầu họ làm trống thư mục tập tin tạm thời.

WordPress tải lên hình ảnh của bạn bằng cách sử dụng PHP, lần đầu tiên lưu các tải lên vào một thư mục tạm thời trên máy chủ web của bạn. Sau đó, nó sẽ chuyển chúng đến thư mục tải lên WordPress của bạn.

Nếu thư mục tạm thời này bị đầy hoặc được cấu hình kém, thì WordPress sẽ không thể ghi tập tin vào đĩa.
Thư mục tạm thời này nằm trên máy chủ của bạn và trong hầu hết các trường hợp, bạn không thể truy cập nó bằng FTP. Bạn sẽ cần liên hệ với máy chủ lưu trữ web của mình và yêu cầu họ làm trống nó cho bạn.

Mình hy vọng bài viết này đã giúp bạn giải quyết lỗi 'Upload: Failed to Write File to Disk' trong WordPress. Bạn cũng có thể muốn xem hướng dẫn của mình về cách khắc phục các sự cố hình ảnh phổ biến trong WordPress.

Trong bài này, chúng ta sẽ tìm hiểu về cách upload file lên web server trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

1. Tạo html form để upload file

Chúng ta có thể tạo một html form để upload file với thuộc tính enctype.




  Upload file to gochocit.com!





  Select a file to upload:
  


Trong ví dụ trên, html form có thuộc tính enctype="multipart/form-data". Với thuộc tính này, html form cho phép chúng ta upload file lên web server. Thẻ với type=”file” cho phép chúng ta chọn đường dẫn của file cần upload. Sau khi nhấn nút Upload thì dữ liệu trong html form sẽ được gửi đến file upload.php để xử lý.

2.1. Cấu hình upload file trong php.ini

Để upload file lên web server thì cần đảm bảo cấu hình PHP cho phép upload file. Mở file php.ini [xem hướng dẫn ở phần Thay đổi default timezone trong PHP], tìm đến cấu hình file_uploads và gán giá trị là On.

file_uploads = On

2.2. Xử lý upload file với PHP

Bên dưới là một đoạn code của file upload.php để xử lý file được upload.


Khi upload một file lên web server, tất cả thông tin về file sẽ được lưu trữ trong biến $_FILES. Giả sử, chúng ta upload file gochocit.txt như hình bên dưới.

Biến $_FILES là một mảng kết hợp có cấu trúc như sau:

array[1] { 
  ["fileUpload"]=> array[5] { 
    ["name"]=> string[12] "gochocit.txt" 
    ["type"]=> string[10] "text/plain" 
    ["tmp_name"]=> string[24] "C:\xampp\tmp\phpD335.tmp" 
    ["error"]=> int[0] 
    ["size"]=> int[121] 
  } 
}

Trong đó,

fileUpload: là key của mảng tương ứng name của thẻ trong html form

name: tên của file được upload.

type: loại file tùy vào đuôi mở rộng của file, có thể là text/plain, image/jpg, image/png,…

tmp_name: là file tạm lưu trữ file được upload.

error: mã lỗi khi upload, nếu errror = 0 thì không lỗi.

size: kích thước file tính bằng byte.

Khi file đã được upload lên server, chúng ta có thể thực hiện các thao tác khác nhau trên file này:

– Kiểm tra file có bị lỗi không?

– Kiểm tra loại file upload có được phép không?

– Kiểm tra dung lượng của file có vượt quá giới hạn cho phép không?

– Kiểm tra file đã tồn tại trên server chưa?

– Lưu file vào một thư mục trên server.

– …


2.3. Lọc [filter] các file được upload

Chúng ta có 2 cách để lọc [filter] các file được upload lên web server.

Cách thứ 1 – Sử dụng thuộc tính accept trong thẻ


  Select file to upload:
  


Cách thứ 2 – Upload file rồi kiểm tra loại file với PHP

//Lấy phần mở rộng của file [txt, jpg, png,...]
$fileType = pathinfo[$target_file, PATHINFO_EXTENSION];
//Những loại file được phép upload
$allowtypes    = array['txt', 'dat', 'data'];
//2. Kiểm tra loại file upload có được phép không?
if [!in_array[$fileType, $allowtypes ]] {
   echo "
Only allow for uploading .txt, .dat or .data files."; $allowUpload = false; }

3. Xử lý upload nhiều file với PHP

Chúng ta có thể upload nhiều file cùng một lúc với thẻ có thuộc tính multiple="multiple". Lưu ý: name của thẻ phải có thêm dấu ngoặc vuông [], thể hiện là một mảng chứa nhiều file.




  Upload multiple files to gochocit.com!





  Select one or more files to upload:
  


Chúng ta sẽ viết một file upload-multiple-files.php để xử lý upload nhiều file. Thông tin về các file sẽ được truy xuất từ $_FILES[‘fileUpload’] dưới dạng các mảng.

$_FILES[‘fileUpload’][‘name’]: chứa các tên file được upload.

$_FILES[‘fileUpload’][‘type’]: chứa các loại file được upload.

$_FILES[‘fileUpload’][‘tmp_name’]: chứa các vị trí lưu tạm các file.

$_FILES[‘fileUpload’][‘error’]: là mảng báo lỗi khi upload.

$_FILES[‘fileUpload’][‘size’]: chứa kích thước các file được upload.


Kết quả các file được upload.

Sau khi truy xuất đến từng file được upload, các bạn có thể thực hiện các thao tác trên từng file như bình thường.

  • Sử dụng hàm print_r, var_dump, var_export trong PHP
  • Biểu thức và thứ tự ưu tiên của các toán tử trong biểu thức
  • Thread là gì? Cách tạo Thread trong Java
  • Thư viện cmath và một số hàm toán học thông dụng trong C++
  • Cookie là gì? Sử dụng cookie trong PHP

Chủ Đề