2012-12-07 37 views
7

Tôi gặp sự cố khi tải lên tệp. Tôi đang sử dụng phương pháp đó được mô tả trong bài viết THIS. Tôi đã tải xuống toàn bộ tập lệnh do tác giả xuất bản từ HERE.
Ứng dụng này có nghĩa là tải các tệp thông qua HTML5 kéo & thả và sau đó, thông qua javascript, gửi chúng đến máy chủ theo yêu cầu ajax.
Mọi thứ hoạt động tốt nhưng vấn đề xảy ra khi tôi muốn đọc một tham số từ tiêu đề yêu cầu AJAX. Dưới đây là các mã PHP "đọc tập tin":Phương thức setHequestHeader của đối tượng javascript không hoạt động

$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 

if ($fn) { 
//above there is the upload of the file with file_put_contents function 
//which actually works fine when I replace $fn with my own value and ommit the "if" condition 

Trước đó, phương pháp XMLHttpRequest.setRequestHeader được đưa ra để thiết lập "X_FILENAME" tiêu đề. Đây là javascript:

var xhr = new XMLHttpRequest(); 

// start upload 
xhr.open("POST", $id("upload").action, true); 
xhr.setRequestHeader("X_FILENAME", file.name); 
xhr.send(file); 

Và đây là bằng chứng (một cây trồng từ "con đom đóm" của Chrome của tôi):

Khi tôi var_dump các $ fn biến trong PHP nó sẽ trả về boolean FALSE. Chuyện gì thế?

P.S. Tôi đang sử dụng XAMPP v1.8.1 với Apache 2.4.3 và PHP 5.4.7 trên Win7 x64. Tôi đang chạy trang web trên Chrome mới nhất. Như bạn có thể đoán trang web đang chạy trên localhost. Tôi đã không thay đổi bất cứ điều gì trong tập tin php.ini - tất cả mọi thứ được thiết lập để mặc định.

Trả lời

15

Dấu gạch dưới dường như không phải là ký tự hợp lệ cho tên tiêu đề. Sử dụng dấu gạch nối và nó sẽ làm việc đẹp mắt.

xhr.setRequestHeader("X-FILENAME", file.name); 

và không yêu cầu thay đổi trong PHP của bạn.

+0

giải pháp của bạn hoạt động tuyệt vời! Cảm ơn bạn. Cách tiếp cận đầu tiên tôi đã không nhận thấy dòng cuối cùng trong bình luận của bạn và mặc dù tôi cam chịu. – matewka

-1

Phiên bản mới của Apache và PHP 5,3

$UploadDir=dirname(__FILE__).'/'.; 
    $Datos_cabecera=getallheaders(); 
    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 
    if (!$fn) {$fn=$Datos_cabecera['X_FILENAME'];} //New versions of Apache and PHP 5.3 
    if ($fn) { 
    file_put_contents($UploadDir.$fn,file_get_contents('php://input')); 
    } 
+4

Vui lòng sử dụng tiếng Anh. – agabrys

+0

Sử dụng các biến và nhận xét bằng tiếng Anh. –

Các vấn đề liên quan