2010-03-30 9 views
6

Tôi có biểu mẫu tải lên có tệp được tải lên. Vấn đề tôi có là ngay cả khi không có tập tin được tải lên các if (isset ($ _ FILES)) HOẶC nếu vẫn đi như thành công (trống ($ _ FILES)!):isset và! Trống không đi qua kiểm tra các tệp đã tải lên

$_FILES = $HTTP_POST_FILES; 
if($_POST['type'] == 'photo' && isset($_FILES)){ 
// returns true even if no file is uploaded. What am I missing! 
} 
+0

Sử dụng '$ HTTP_ POST_FILES' không được dùng nữa: http://php.net/manual/en/reserved.variables.files.php (bên cạnh đó nó chứa các giá trị giống như '$ _FILES') –

Trả lời

11

Là một superglobal, $_FILES là lẽ luôn đặt, bất kể tệp được tải lên có tồn tại hay không.

Kiểm tra (các) tệp tải lên bạn mong đợi và xem trường kích thước. (Rõ ràng theo tài Đóng góp Ghi chú trong cuốn hướng dẫn, nếu các hình thức có chứa các yếu tố tải lên, có thể là thậm chí isset($_FILES["my_file_name"]) sẽ trở thành sự thật mặc dù không có tệp chọn

này nên làm việc đáng tin cậy.

if($_POST['type'] == 'photo' && 
    ((isset($_FILES["my_file_name"]["size"]) && 
    ($_FILES["my_file_name"]["size"] > 0))){ 

(các isset() là để ngăn chặn một "chỉ số xác định" thông báo.)

bạn sẽ làm gì đây cho, bằng cách này ?:

$_FILES = $HTTP_POST_FILES; 
+0

Tôi đã từng làm điều này trước đây nhưng nó hơi dài : $ _FILES ['image'] ['tmp_name'] ... Bạn biết tôi không biết gì về dòng thứ hai đó. $ _FILES = $ HTTP_POST_FILES; Đó là một trong ba phần được viết bởi người khác. – kalpaitch

+0

@ kalpaitch Tôi nghĩ rằng bạn có thể loại bỏ phần đó một cách an toàn, nó có thể là khả năng tương thích ngược trong PHP 4. –

+0

kiểm tra @kalpaitch cho tmp_name cũng tốt. –