2012-01-13 37 views
6

Tôi có tập lệnh tải xuống tệp mà tôi đã viết, đọc tệp từ bên dưới public_html và cho phép người dùng tải xuống tập lệnh sau khi kiểm tra xem người dùng đã đăng nhập chưa và tệp đó là một tệp hợp lệ để họ tải xuống.PHP: Tải xuống tập lệnh không hoạt động trên iPad

Một vấn đề mà tôi vừa mới gặp phải là trên iPad nó chỉ không làm được gì khi liên kết được nhấp.

Ví dụ mã tải về tập tin sau khi tất cả các kiểm tra đã được thực hiện:

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/msword"); 
header("Content-Disposition: attachment; filename=\"file.doc\";"); 
header("Content-Length: 50688"); 

readfile(SITE_PATH .'/files/file.doc'); 

Kịch bản này đã được thử nghiệm và kiểm tra trên PC, Mac và Linux máy trong nhiều trình duyệt (FF, Opera, IE6-9, Chrome , Safari) và tất cả dường như hoạt động tốt, vì vậy nó phải là một cái gì đó mà iPad làm khác nhau.

Tôi tưởng tượng nó liên quan đến iPad không thực sự có cấu trúc tệp như vậy để tải tệp xuống, nhưng tôi không chắc chắn.

Có ai gặp vấn đề này trước đây không? Nếu vậy, có sửa chữa không?

+0

không có liên quan: bạn có hai trường tiêu đề Loại nội dung. Chọn một. Ngoài ra, Content-Transfer-Encoding không phải là trường tiêu đề HTTP. –

+0

@JulianReschke đã xóa những thứ đó, có vẻ như nó không có hiệu lực. Đã cập nhật câu hỏi để phản ánh. – Nick

Trả lời

11

iOS Safari không hỗ trợ tập tin tải về ..

Cập nhật: Nhưng nếu bạn đang tìm kiếm để mở các tập tin .doc trên iPad thì có .. bạn có thể làm điều đó ...

sử dụng sau -

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/msword"); 


readfile('file.doc'); 

sự khác biệt duy nhất trong mã của bạn và của tôi là tôi loại bỏ các tiêu đề cho tập tin đính kèm chỉ cần loại bỏ những tiêu đề -

header("Content-Disposition: attachment; filename=\"file.doc\";"); 
header("Content-Length: 50688"); 

Trên thực tế bạn có thể kiểm tra các hệ điều hành khách hàng nếu hệ điều hành là iOS thì không thêm tiêu đề để tải về như thế này -

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/msword"); 

if (!Operating_System_Is_IOS) 
{ 

    header("Content-Disposition: attachment; filename=\"file.doc\";"); 
    header("Content-Length: 50688"); 

} 

readfile(SITE_PATH .'/files/file.doc'); 
+0

Thông thường iPad sẽ mở các tài liệu này (nếu được liên kết trực tiếp). Vì vậy, không có bất cứ điều gì tôi có thể làm để bắt chước hành vi đó? tức là mở thay vì cố tải xuống. – Nick

+0

Kiểm tra câu trả lời cập nhật! – Saurabh

+0

Tuyệt vời, chỉ là những gì tôi đang tìm kiếm, cảm ơn :) – Nick

0

Apple đã khóa các thiết bị iOS để bạn không thể truy cập các tập tin kết cấu. Như vậy, họ đã vô hiệu hóa việc tải xuống tệp.

-1

Bạn có thể buộc người dùng dán liên kết (có ID giới hạn thời gian trong đó do đăng nhập ...) vào bất kỳ ứng dụng của bên thứ ba nào, như GoodReader. Hoặc chỉ cho phép họ xem tệp doc trong trình duyệt.

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