2010-05-18 47 views
5

Tôi muốn tạo tập lệnh tải lên không nằm trong giới hạn tải lên php. Có thể có một dịp mà tôi cần tải lên tệp 2GB hoặc lớn hơn và tôi không muốn phải thay đổi toàn bộ thực thi máy chủ thành trên 32MB.Viết trực tiếp vào đĩa bằng php

Có cách nào để ghi trực tiếp vào đĩa từ php không?

Bạn có thể đề xuất phương pháp nào để người nào đó sử dụng để thực hiện việc này? Tôi đã đọc xung quanh tràn ngăn xếp nhưng không hoàn toàn tìm thấy những gì tôi đang tìm kiếm để làm.

Trả lời

1

Không thể tải lên tệp lớn hơn giới hạn cho phép của PHP bằng PHP, thật đơn giản.

Giải pháp có thể có bao gồm using a client-side technology - like Java, không chắc chắn Flash và Javascript có thể thực hiện việc này hay không - để "chia nhỏ" tệp gốc thành các đoạn nhỏ hơn.

2

Câu trả lời đơn giản là bạn không thể do cách mà apache xử lý dữ liệu bài đăng.

Nếu bạn kiên quyết có tệp tải lên lớn hơn và vẫn sử dụng php cho chương trình phụ trợ, bạn có thể viết bộ tải lên tệp đơn giản bằng cách sử dụng api của ổ cắm php và chạy nó dưới dạng dịch vụ độc lập. Một số chi tiết tốt được tìm thấy tại http://devzone.zend.com/article/1086#Heading8

1

Bạn có thể làm một số điều thú vị dựa trên ổ cắm của PHP. Bạn đã cân nhắc viết một applet trong Java để tải tập tin lên một trình nghe nhạc PHP không? Điều này có thể sẽ không hoạt động trên hầu hết các nhà cung cấp dịch vụ lưu trữ chuyên nghiệp, nhưng nếu bạn đang chạy máy chủ của riêng mình, bạn có thể làm cho nó hoạt động. Xem xét trình tự sau đây:

  1. Applet khởi động, gửi một yêu cầu tới PHP để mở một ổ cắm nghe
    1. (Bạn có thể sẽ phải viết một trình duyệt web cơ bản trong Java để làm công việc này)
  2. Java Applet đọc các tập tin từ hệ thống tập tin và tải lên nó vào PHP thông qua các ổ cắm được tạo ra ở bước 1.

Không cách t sạch o làm điều đó, nhưng nếu bạn vô hiệu hóa thời gian chờ tập lệnh PHP trong tập tin php.ini của bạn, sau đó bạn có thể làm một cái gì đó làm việc.

2

Mặc dù đây là một bài đăng cũ, bạn tìm thấy nó dễ dàng thông qua google khi tìm kiếm một giải pháp để xử lý các tệp tải lên lớn bằng PHP. Tôi vẫn không chắc liệu các tệp tải lên có làm tăng giới hạn bộ nhớ hay không nhưng tôi nghĩ rằng có khả năng tốt là chúng. Trong khi tìm kiếm một giải pháp cho vấn đề này, tôi đã tìm ra những nguồn mâu thuẫn. Hướng dẫn sử dụng PHP nêu rõ

post_max_size: Đặt kích thước tối đa của dữ liệu bài được cho phép. Cài đặt này cũng ảnh hưởng đến việc tải lên tệp. Để tải lên các tệp lớn, giá trị này phải là lớn hơn upload_max_filesize. Nếu giới hạn bộ nhớ được bật bởi tập lệnh định cấu hình của bạn, memory_limit cũng ảnh hưởng đến việc tải lên tệp. Nói chung, hãy nói , memory_limit phải là lớn hơn post_max_size. (http://php.net/manual/en/ini.core.php)

... có nghĩa là giới hạn bộ nhớ của bạn phải lớn hơn tệp bạn muốn tải lên.Tuy nhiên, một người dùng khác (ragtime tại alice-dsl dot com) tại địa chỉ php.net:

Tôi không tin rằng huyền thoại 'memory_size' phải là kích thước của tệp được tải lên. Các tệp là chắc chắn không được lưu trong bộ nhớ ... thay vì các khối được tải lên 1MB mỗi được lưu trữ trong/var/tmp và sau đó là xây dựng lại dưới/tmp trước khi di chuyển đến không gian web/người dùng.

Tôi đang chạy hộp linux chỉ có RAM 64MB , đặt memory_limit thành 16MB và tải lên các tệp có kích thước khoảng 100MB hoàn toàn không có vấn đề gì! (http://php.net/manual/en/features.file-upload.php)

Anh ấy báo cáo một số vấn đề liên quan khác với bộ thu gom rác nhưng cũng nêu rõ cách chúng có thể được giải quyết. Nếu điều đó đúng, kích thước tệp đã tải lên cũng có thể tăng giới hạn bộ nhớ. (Lưu ý, tuy nhiên, một điều khác có thể là xử lý tệp được tải lên - sau đó bạn có thể phải tải tệp đó vào bộ nhớ)

Tôi đang viết điều này trước khi tôi thử xử lý các tệp tải lên lớn với bản thân PHP vì tôi đang đánh giá sử dụng php hoặc python cho tác vụ này.

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