2012-11-26 9 views
14

Bu sorun, doğrudan 2GB sınırıyla ilişkili görünüyor ve 32 bitlik bir PHP sorunu varsa emin değilim. Bu gibi büyük dosyalar için tasarlanmayan HTTP ile ilgili yorumları gördüm. Bununla birlikte, şimdiye kadar çalıştığı kanıtlanmış olan herhangi bir temel değişikliğe karar vermeden önce bu yönü tüketmeyi tercih ederim. Başlığı önerdiğim gibi> 2GB dosya yüklemem gerekiyor, şu ana kadar 3.8GB. jQuery-file-upload kullanılarak oluşturulmuş bir formum var, bu da büyük dosyaları başlatana kadar dosya gönderirken sorun yaşamayacaktır (en az 2GB). 3.8GB'lık bir dosya, Dosya Yükleme'den yüklenecek 5 dakikanızı alır ve ilerleme çubuğu% 100'e tamamlar. Ancak, yükleme sonrası bildirilen hata, dosya boyutu sınırının ihlal edildiğini gösteren bir tür 1'dir.4GB HTTP Dosya Yüklemeleri jQuery-File-Upload, Apache ve PHP'yi Kullanıyor

Yükleme sırasında sunucudaki disk kullanımını izlerseniz, aşağıdaki örnek özelliklerine sahip olur: Yüklemeyi sürdürürken, bu yükleme arttıkça disk% 30 kullanılır,% 31,% 32 .... % 45,% 46, vb. Ancak, 2GB noktasında disk kullanımı istemci/tarayıcı Dosya Yükleme devam ederken% 30'a düşer. Sunucuların disk kullanımı durduğunda, istemci yalnızca yüklemenin% 60'ında olabilir. Yine de istemci hala% 100 devam eder, ancak disk durumu hiçbir zaman% 30 hareket etmediği için sunucu tarafından kabul edilmiyor.

64Bit Ubuntu'yu (en son) Apache/2.2.22 (Ubuntu) ve PHP sürüm 5.3.10-1ubuntu3.2 ile çalıştırıyorum. Bir gün aradıktan sonra çözüm aramaya devam edip hala 3.8GB'yi alamıyorum. Çok fazla ayar değiştirdikten sonra yüklenecek dosya. Aşağıda bir tür değişiklik listeleyeceğim ama bu aşamada bir 32bit PHP sorunu olabileceğini düşünüyorum, bu yüzden herkes aşağıdaki bağlantıya değer bir bağlantı önerebilir ya da denemeye değer bir çözüm önerebilir.

aşağıdaki kurdum Apache2'deki yılında

: Koşarsam görünüşe

- UPLOAD_MAX_FILESIZE 4831838208 
- POST_MAX_SIZE 4939212390 
- max_execution_time 120 
- max_input_time 60 
- memory_limit 128M 

sunucuda aşağıdaki: Aşağıdaki kurdum php.ini

- apache2.conf I've set Timeout to 900 
- httpd.conf I've set LimitRequestBody to 0 
- .htaccess in the file upload directory I've set: 
    - LimitRequestBody to 4939212390 
    - php_value upload_max_filesize 4831838208 
    - php_value post_max_size 4939212390 

PHP'nin 32bit sorunu yok ama bu aşamada emin değilim. Herhangi bir fikirden de bahsetmiş olduğum gibi, büyük bir memnuniyetle karşılanacaktır.

GÜNCELLEME: Ben 3.8 GB aşağıdaki ayarlarla HTTP üzerinden dosyası yüklemek için başarmış

:

Bu sorunu çözüldü mü temelleri yaklaşıma geri öneren @BogdanBurim sayesinde böylece php olarak

- apache2.conf I've set Timeout to 900 
- httpd.conf I've set LimitRequestBody to 0 
- .htaccess in the file upload directory I've set: 
    - LimitRequestBody to 0 
    - php_value upload_max_filesize 0 
    - php_value post_max_size 4939212390 
- .htaccess in the php temp directory (in my case its /tmp/) I've set: 
    - LimitRequestBody to 0 
    - php_value upload_max_filesize 0 
    - php_value post_max_size 4939212390 

:

Apache2'deki ben şu kurdum.

bu çözümün sadece diğer önemli parçası yükleme formundan, HTML MAX_FILE_SIZE kaldırmak zorunda olduğu
- UPLOAD_MAX_FILESIZE 0 
- POST_MAX_SIZE 4939212390 
- max_execution_time 120 
- max_input_time 60 
- memory_limit 128M 

:

<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" /> 

olması bu seti sürekli bir PHP neden şu ini ben kurdum tip 2 hatası, bu yüzden php, ayarlanmış olan 32bit'den büyük bir tam sayıyı işleyemedi. Bunu kaldırmak için her yerde 0'a UPLOAD_MAX_FILESIZE değiştirilene kadar PHP tip 1 hatalara neden oldu ve hey şimdi çalışır! Eğer> 1GB yüklemek için tarayıcınızı neden kullanacağınızı

http://php.net/manual/en/features.file-upload.errors.php

+0

ilgili: http://stackoverflow.com/questions/50 53290/büyük dosya yükleme-olsa-html-form-daha-2-gb – valentinas

+0

Basit HTML formu ve ile dosya yüklemeye çalışın .. Bu yıkılacak mı? Belki de tam olarak hata mesajını göreceksiniz. –

+0

Teşekkürler @BogdanBurim Bunu daha sonra deneyeceğim ve – Diplonics

cevap

6

temelleri yaklaşıma geri öneren @BogdanBurim sayesinde, bu sorunu çözmüş böylece mü

- UPLOAD_MAX_FILESIZE 0 
- POST_MAX_SIZE 4939212390 
- max_execution_time 120 
- max_input_time 60 
- memory_limit 128M 
: aşağıdaki kurdum php.ini

- apache2.conf I've set Timeout to 900 
- httpd.conf I've set LimitRequestBody to 0 
- .htaccess in the file upload directory I've set: 
    - LimitRequestBody to 0 
    - php_value upload_max_filesize 0 
    - php_value post_max_size 4939212390 
- .htaccess in the php temp directory (in my case its /tmp/) I've set: 
    - LimitRequestBody to 0 
    - php_value upload_max_filesize 0 
    - php_value post_max_size 4939212390 

: aşağıdaki ayarladım 363.210

bu çözümün sadece diğer önemli parçası yükleme formundan, HTML MAX_FILE_SIZE kaldırmak zorunda edildi:

<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" /> 

olması bu seti sürekli bir PHP türü 2 hata nedeniyle, bu nedenle php daha büyük başa çıkamayan Ayarlanmış 32 bit tam sayı. Bunu kaldırmak için her yerde 0'a UPLOAD_MAX_FILESIZE değiştirilene kadar PHP tip 1 hatalara neden oldu ve hey şimdi çalışır!

http://php.net/manual/en/features.file-upload.errors.php

+0

Tüm Tarayıcı sürümlerinde (IE 7+ ve FF12 +) test ettiniz ve tüm bu tarayıcılarda çalışıyor mu? Basit 'HTML''

+0

@VikasV Henüz herhangi bir IE platformunda test etmedim, ancak şimdi sorman gerekecek. FF ve CH üzerinde çalışıyor, ancak sorun asla benim için istemci tarayıcısı değildi. Hem FF hem de CH'de, dosya gönderilirse, ancak her zaman yukarıdaki ayarlara göre benim için giderilen sunucu ucundaki 2 GB + dosyaları için kısmi dosya yükleme sorunu bildirilir. – Diplonics

+0

LimitRequestBody, [Apache 2.4] (https://httpd.apache.org/docs/2.4/mod/core.html#limitrequestbody) 'de, belki de diğer sürümlerde varsayılan olarak "0" (sınırsız) olarak ayarlanmıştır. – chb

-7

sorudur. En iyi dosya paylaşım hizmetlerini en çok dosya yükleme boyutunu tarayıcı yoluyla 1GB'a düşürün. Kullanıcı indirme başarısız olursa, tüm süreci yeniden başlatmanız gerekir.

Böyle büyük dosya yüklemeleri, torrent, ftp veya rapidshare, dosya yükleme, megaupload vb. Gibi kişisel yükleme istemcileriniz varsa alternatiflere baktınız mı.

POST'lara ayarlanmış dosya boyutu sınırı nedeniyle sınırlandırılmıştır. Eğer cesaretini kıracağım daha büyük dosyaları yüklemek için HTTP kullanmaya karar verirseniz, en uygun çözüm dosyayı bölerek ve daha küçük parçalanmış parçaları yükleyerek dosyayı yeniden birleştirir.

Ben 3.8 GB aşağıdaki ayarlarla HTTP üzerinden dosyası yüklemek için başarmış: '

Apache2 I'de

+0

'u güncelleyelim belki bir sonraki paylaşım servisini kuruyor ... – mgarciaisaia

+2

"Kullanıcı yükleme işlemi başarısız olursa ne olursa olsun tüm süreci yeniden başlatmanız gerekir." Emm, hayır mı? http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16 – valentinas

+0

Evet, bozuk dosyalarda biten çok iyi çalışıyor. Böylesi büyük dosyaları bu şekilde yüklemek aptalca. –

0

Eğer apache sanal ana erişiminiz varsa da (siz de .htaccess dosyasına bu ekleyebilirsiniz) Belirli bir yükleme URL için bu ayarları değiştirebilirsiniz konfigürasyon dosyasında:

Bu kod ile:

<LocationMatch "/index.php/url-of-your-upload.php"> 
    php_value max_execution_time 0 
    php_value upload_max_filesize 0 
    php_value post_max_size 4939212390 
    php_value memory_limit 4G 
    LimitRequestBody 0 
</LocationMatch> 

LocationMatch direktifleri (eğer reg exp de kullanabilirsiniz) url seçmesine izin

+0

Bu, .htaccess dosyama yerleştirirken bana 500 hata verdi. –