2013-08-26 40 views
9

Tôi có dòng $input = fopen('php://input', 'r'); trong mã của tôi để tải lên.Tại sao php: // cắt đầu vào?

Khi tệp được tải lên xong, tôi kiểm tra lại $_SERVER['CONTENT_LENGTH'] để xem mọi thứ đã được gửi như mong đợi. Gần đây, CONTENT_LENGTH và kích thước tệp tải lên của tôi bắt đầu không khớp ngẫu nhiên (Khoảng một lần 20 phút với những người tải lên rất thường xuyên).

Tôi đã ghi lại và lưu các sự không khớp và thấy rằng một số tệp không thể mở được, trong khi một số tệp đã được tải xuống và bị cắt. Một trong những tôi đã mở trong Photoshop thậm chí còn cảnh báo rằng tài liệu đã bị hỏng.

Có cấu hình máy chủ nào tôi cần tìm kiếm có thể đã bị thay đổi không?

Tôi đã cố gắng sao chép bằng cách đóng các tab trình duyệt và những thứ có tính chất đó nhưng vẫn không sao chép được lỗi.

Chúng tôi đang tải lên qua POST AJAX. Cơ quan POST là nguồn tải lên.

+0

Tải lên là một điều cần thiết để làm việc với, làm cách nào bạn lưu tệp của mình? Viết chúng vào cơ sở dữ liệu? hoặc lưu trữ các tập tin trong một thư mục và tham chiếu đường dẫn trong cơ sở dữ liệu/ –

+0

Các bản sao xấu đang được lưu trữ trong một thư mục, tôi đăng nhập vị trí và kiểm tra chúng –

+1

mà không hiểu mã thực sự làm cho yêu cầu POST đến máy chủ của bạn, điều này sẽ không thể tìm ra. Dữ liệu được gửi như thế nào? Flash, Javascript, Biểu mẫu HTML, v.v.? Tôi đã gặp phải các vấn đề như thế này trước đây, nhưng nó thường là một lỗi toán học khi xây dựng các khối và gửi nó đến STDIN. – phpisuber01

Trả lời

-3

post_max_size và chỉ thị upload_max_filesize trong php.ini, so sánh các giá trị với kích thước của tệp đã cắt ngắn của bạn để xem đó có phải là lý do không.

+0

Nó sẽ không nhận được rằng nếu nó là trường hợp và tôi có thể dễ dàng tải lên 50MB của các tập tin và nó không thành công trên các tập tin đôi khi nhỏ hơn một meg. –

1

Nghe có vẻ giống như vấn đề tải/mạng. Có sự cố về thời gian chờ/vấn đề thời gian chờ mà người dùng đang cố tải lên và máy chủ của bạn không phản hồi.

Thông thường nó không phải là AJAX để đổ lỗi, thay vì máy chủ (có thể thậm chí không PHP). Tôi nghĩ rằng có những giọt ở một số nơi của các gói tin đến máy chủ. Nó có thể là giới hạn trong trung tâm dữ liệu (ví dụ: băng thông.) Hoặc giới hạn trên chính máy chủ.

Chúng tôi tối ưu hóa máy chủ của chúng tôi bằng cách sử dụng cấu hình sau. Điều này sẽ hoạt động trên bất kỳ bản phân phối Linux nào:

Chỉnh sửa /etc/sysctl.conf tệp. Thêm các dòng sau vào cuối:

net.ipv4.tcp_wmem= 10240 87380 12582912 
net.ipv4.tcp_rmem= 10240 87380 12582912 
net.core.rmem_max=12582912 
net.core.wmem_max=12582912 
net.ipv4.tcp_max_syn_backlog=100000 

Bạn có thể sử dụng hướng dẫn sau đây từ IBM để hiểu rõ hơn làm thế nào để điều chỉnh lên linux của bạn: http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf

Ngoài ra,

tôi sẽ ghi lại những khách hàng phiên bản trình duyệt. Có thể định dạng được gửi đến máy chủ của bạn phụ thuộc vào AJAX khác với trình duyệt này với trình duyệt khác. Vì bạn không chỉ định mã AJAX nên khó có thể giả định AJAX đang làm gì để tải lên các tệp.

+0

Xin cảm ơn! Trong văn phòng ngày mai vì vậy tôi sẽ có thể kiểm tra tốt hơn ý nghĩa của các cài đặt cấu hình này. Vấn đề nằm trong tất cả các trình duyệt. Tôi nghi ngờ đó là AJAX vì nó hoạt động hoàn hảo trong nhiều năm. Chúng tôi đã thay đổi máy chủ, nhưng không có gì ảnh hưởng đến việc tải lên ... chúng là một tập hợp toàn bộ các máy chủ khác nhau so với các máy chủ đưa ra sự cố. Nó rất lạ, và tôi nghi ngờ ngẫu nhiên, thời gian. –

+0

Xin lỗi vì đã không quay lại! Câu trả lời là nó có thể khắc phục vấn đề này, hoặc nó có thể khắc phục vấn đề này và phá vỡ trang web của chúng tôi, vì vậy các nhà thiết kế của chúng tôi đã lo lắng về việc thực hiện thay đổi đó. –

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