PHP İlerleme Bar yükleyin

14 Cevap php

Herkes php bir yükleme için bir ilerleme çubuğu nasıl biliyor mu? Ben bir fotoğraf albümü uploader için yazma kod çalışıyorum. Ben fotoğraf karşıya yükleme sırasında görüntülemek için bir ilerleme çubuğu istiyorum.

Ben bu konuda her şeyi bilmiyorum o yüzden php için oldukça yeni.

14 Cevap

Bu (komut googling ile çalışırken saat sonra) kadar buldum kurmak için basit ve güzel bir aktarıcı

https://github.com/Widen/fine-uploader

Ben paylaşılan bir bilgisayar dosya ilerleme geribildirim alabilirsiniz, APC veya başka harici bir PHP kütüphaneleri gerektirmez, ve HTML5 sürükle ve bırak (şahsen denenmemiş) ve çoklu dosya yükleme desteklediğini iddia.

Ben saf bir PHP yükleme ilerleme çubuğu bilgime iyi, hatta bir PHP / JavaScript ilerleme çubuğu çünkü PHP nasıl çalıştığını mümkün değildir upload olduğunu söylemek için üzgünüm. En iyi bahis Flaş aktarıcı çeşit kullanmaktır.

Tüm superglobals $ _FILES içeren, doldurulur kadar script idam değil çünkü AFAIK budur. PHP komut çağrılır zaman, dosya tamamen yüklenir.

EDIT: Bu gerçek artık. Bu 2010 yılında oldu.

Eğer APC yüklü varsa, yükleme ilerleme için bir geri arama kanca vardır.

Rasmus Lerdorf (PHP'nin yaratıcısı) (oh, ve burada PHP source bulunuyor) bir sample Bu kullanarak YUI vardır.

Bkz the documentation here.

Bir PHP-ish (5.2 +) & Benim için güzel çalıştı hiç Flaş yolu:

İlk olarak, this ve çalışan "uploadprogress" uzantısı nasıl açıklayan göndermek bakın.

Sonra dosya (lar) karşıya formu içeren sayfasında, aşağıdaki iframe oluşturun:

<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>

Sonra, "Gönder" butonuna bu kodu ekleyin:

onclick="function set() { f=document.getElementById('progress_iframe'); f.style.display='block'; f.src='uploadprogress.php?id=<?=$upload_id?>';} setTimeout(set);"

Artık dosya yükleme başlatmak için "Gönder" tıkladığınızda uploadprogress.php görünür ve gösteri içeriğini gelecek formdaki gizli bir iframe var. $ Upload_id Eğer formda gizli alan "UPLOAD_IDENTIFIER" değeri olarak kullandığınız aynı olmalıdır.

Uploadprogress.php kendisi böyle gibi gözüküyor (düzeltmek ve ihtiyaçlarınıza göre ayarlayın):

<html>
<head>
<META HTTP-EQUIV='REFRESH' CONTENT='1;URL=?id=<?=$_GET['id']?>'>
</head>
<body>
Upload progress:<br />
<?php
    if(!$_GET['id']) die;
    $info = uploadprogress_get_info($_GET['id']);
    $kbytes_total = round($info['bytes_total'] / 1024);
    $kbytes_uploaded = round($info['bytes_uploaded'] / 1024);
    echo $kbytes_uploaded.'/'.$kbytes_total.' KB';
?>
</body>
</html>

Her saniye kendini yeniler Not. İsterseniz mutlaka burada bazı güzel görsel ilerleme çubuğu (2 gibi iç içe

s farklı renklerde) ekleyebilirsiniz. Yükleme ilerleme ile iframe doğal olarak sadece yükleme işlemi sırasında çalışır ve formu teslim ve tarayıcı sonraki sayfaya yükler kez onun görünür hayat biter.

Ben sadece perl yükleme yapmak ve bir ilerleme çubuğu görüntüler kullanır (http://www.raditha.com/php/progress.php) olan Mega Karşıya bulundu.

Gears ve HTML5 AJAX ile dosya yükleme göndermek için HttpRequest nesne bir ilerleme olay var.

http://code.google.com/apis/gears/api_httprequest.html#HttpRequestUpload http://developer.mozilla.org/en/Using_files_from_web_applications

Olarak zaten başkaları tarafından yanıtlandı diğer seçenekler şunlardır:

  1. Flash tabanlı uploader.
  2. Java tabanlı uploader.
  3. Web sunucusu veya alınan verilerin boyutu bildirmek için bir komut dosyası için ikinci bir comet-style isteği. Lighttpd gibi bazı web sunucuları harici bir komut veya işlem çağrı yükü kurtarmak için işlem yapmak için modülleri sağlar.

Teknik küçük parçalar halinde bir dosya bölünmüş ve tek tek her parça upload damlaları kullanabilirsiniz Gears ya da HTML5 ile YouTube yüklenme benzer bir ileri seçeneği vardır. Her öbek tamamlanmasından Eğer ilerleme durumunu güncelleyebilirsiniz.

Başka bir aktarıcı tam JS: http://developers.sirika.com/mfu/

  • Onun özgür (BSD lisansı)
  • Ulusallaştırılabilir
  • çapraz tarayıcı uyumlu
  • Eğer (underterminate ilerleme çubuğu VS Belirli ilerleme çubuğu) APC veya değil yüklemek için seçim var
  • Bu dojo şablon mekanizması kullanır gibi özelleştirilebilir görünüm. Sen css göre te şablonlar sınıf / Kimlikleri ekleyebilirsiniz

eğlenmek

Christian Stocker ayrıca dosya yükleme analiz yardımcı olmak için bir PHP modülü yaptı: http://blog.liip.ch/archive/2009/01/22/uploadprogress-0-9-2-released.html

Sen bir ilerleme çubuğu oluşturmak için Javascript kullanmanız gerekir. Basit bir Google arama Bu makalenin götürdü: WebAppers Simple Javascript Progress Bar with CSS.

Dojo File Upload Progress Bar Widget Dojo JavaScript framework kullanarak başka bir seçenektir.

DÜZENLEME: (Böyle bir fotoğraf albümü gibi) görüntülerin geniş bir numarası yükleme varsayarsak, ve PHP komut onları ilanı, geri görevinden sonuçlarını okumak ve yüklenen görüntülerin sayısına göre ilerleme çubuğunu güncellemek için javascript kullanabilirsiniz / görüntülerin toplam sayısı. Bu, her mesaja tamamlandıktan sonra sadece güncelleme yan etkisi vardır. JS ile göndermek için bazı bilgi için here göz atın.

A php/ajax progress bar can be done. (Checkout the Html_Ajax library in pear). However this requires installing a custom module into php.

Diğer yöntemler php ne kadar dosya yüklendi bakar hangi aracılığıyla bir iframe kullanarak gerektirir. Gizli iframe'ler genellikle bir kullanıcı bilgisayara kötü niyetli veri göndermek için kullanılır Ancak bu gizli iframe, bazı tarayıcılar addons tarafından engelleniyor olabilir.

Yapabileceğiniz en iyi şey size sunucu üzerinde kontrol yoksa flaş ilerleme çubuğu çeşit kullanmaktır.

HTML5 bir file upload api Eğer dosya yükleme ilerleme izlemenize olanak sağlar ama eski tarayıcılar için özel dosya yüklemeleri izlemek ve onlar hakkında bilgi vermek için yapılan plupload bir çerçeve var olduğunu tanıttı. tüm tarayıcılarda çalışır böylece artı geriçağırımlarının bol

Yükleme ilerleme çubuğu uygulanması kolaydır ve herhangi bir ek PHP uzantısı, JavaScript veya Flash gerektirmez. Ancak PHP 5.4 ve yenisi gerekir.

Sen On 'de direktifi session.upload_progress.enabled ayarlayarak yükleme ilerleme bilgi toplama etkinleştirmek zorunda php.ini. Sonra HTML yükleme formunda sadece before herhangi bir diğer dosya girişleri için gizli bir giriş ekleyin. HTML niteliği name, gizli giriş php.ini session.upload_progress.name gelen yönergesinin değeri olarak aynı olmalıdır (muhtemelen öncesinde session.upload_progress.prefix) . Value öznitelik kadar, bu oturum anahtarının bir parçası olarak kullanılabilir olacaktır.

HTML formu bu gibi görünüyor olabilir:

<form action="upload.php" method="POST" enctype="multipart/form-data">
   <input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
   <input type="file" name="file1" />
   <input type="submit" />
</form>

Bu formu gönderdiğinizde, PHP yükleme durum bilgileri ile doldurulur $_SESSION superglobal yapısında yeni anahtarı oluşturmanız gerekir. Anahtar birleştirilir name ve value gizli girişinin edilir.

PHP'de Eğer kalabalık yükleme bilgilere bir göz atabilirsiniz:

var_dump($_SESSION[ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name').'myupload');

Kullanıcıya yükleme ilerleme sunmak için, bir tek oturumda yükleme bilgilere bakar ve JSON biçiminde döndürür, örneğin olacaktır yükleyerek olandan başka bir PHP komut dosyası yazmak. Bu komut AJAX ve kullanıcıya sunulan bilgilerin periyodik olarak denilebilir.

Hatta $_SESSION[$key]['cancel_upload'] TRUE ayarlayarak yükleme iptal edebiliyoruz.

Ayrıntılı bilgi için, ek ayarlar ve kullanıcının yorumlarına bir bakın PHP manual.

Flaş yükleme işini yapacak. Eğer istediğiniz yere dosyayı upload olacaktır. Ama benim için daha fazla talep var. yükleme tamamlanmadan önce ben dosya adını değiştirmek gerekir. Bu da flaş çözümü ile mümkündür AMA SABİT değişkeni ekliyoruz SADECE. Ben bir dosya için kullanıcı kimliği eklemek gerekir ve ben bunu yapmak için bir yol göremiyorum.