Merhaba Arkadaşlar ,,
PHP ile Kullanıcının oluşturduğu resim dosyalarını Zip Haline getirip indirme linki şeklinde Gösteriyorum,
Ama Uzun süren işlemlerde Kullanıcı Ziplemenin daha nekadar süreceğini haliyle bilmek istiyor..
Uygulama :
HTML sayfada Jquery vasıtasıyla Resimler oluşturulup bir dizine atılıyor ,
Sonrasında PHP dosyasına Zip Oluşturmak için Ajax ile istek yollanıyor,
Zip Tamamlandığında gelen cevap(Zipin Linki) Kullanıcıya Gösteriliyor..
Yapmak istediğimse Kullanıcı Bu Zipin Oluşmasını beklerken Gerçek zamanlı ne kadar süre kaldığını nasıl Gösterebilirim ??
Yardımlarınız için Şimdiden Teşekkürler..
PHP ile Zip Dosyası Oluştururken Kalan Zamanı Göstermek ?
8
●666
- 20-07-2014, 17:53:06Bunu jQuery Form plugin ile yapabilirsin hem zaman bakımından hemde % ve yazı bakımından.
Örnek vereyim,
jQuery Form Plugini kullanımı
//formid olarak kullandığımız formun id sini yazıyoruz $('#formid').ajaxForm(function() { alert("Form gönderildi."); });ajaxForm a parametre göndererek işlemimizin durumuna göre ne istersek yapabiliyoruz.
beforeSend fonksiyonu upload işlemi başlamadan önce yapmak istediğimiz işlemler için
uploadProgress fonksiyonu upload işlemimiz devam ederken çalışıyor
success form başarılı bir şekilde upload edildiyse çalışıyor.
complate fonksiyonu ise işlem bittiğinde tetikleniyor.
Upload Formu
<form id="dosyayukle" action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="dosya"> <input type="submit" value="Ajax File Upload"> </form> <div id="progress"> <div id="bar"></div> <div id="yuzde">0%</div > </div> <br/> <div id="mesaj"></div>beforeSend kısmında bar genişliğini %0 olarak ayarlayoruz ve yuzde divine %0 yazdırıyoruz.
uploadProgress te percentComplate ile işlemin yüzdesini alıyoruz ve bar id li div e genişlik olarak veriyoruz.
success olunca hepsini %100 yapıyoruz.
complate fonksiyonunda ise mesaj kısmına başarılı yazdırıyoruz.
eğer bir hata olduysa da error fonksiyonunda hata olarak belirtelim.
jQuery Ajax File Upload
$(document).ready(function() { $("#dosyayukle").ajaxForm({ beforeSend: function() { $("#progress").show(); //clear everything $("#bar").width('0%'); $("#mesaj").html(""); $("#yuzde").html("0%"); }, uploadProgress: function(event, position, total, percentComplete) { $("#bar").width(percentComplete+'%'); $("#yuzde").html(percentComplete+'%'); }, success: function() { $("#bar").width('100%'); $("#yuzde").html('100%'); }, complete: function(response) { $("#mesaj").html("<font color='green'>Dosya başarılı bir şekilde yüklendi</font>"); }, error: function() { $("#mesaj").html("<font color='red'> Bir hata oluştu</font>"); } }); });
html dosyamız aşağıdaki gibi
<!doctype html> <head> <meta charset="utf-8"> <title>PHP Upload jQuery Progress</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script> <script src="http://malsup.github.com/jquery.form.js"></script> <style> form { display: block; margin: 20px auto; background: #eee; border-radius: 10px; padding: 15px } #progress { display: none; position:relative; width:400px; border: 1px solid #ddd; padding: 1px; border-radius: 3px; } #bar { background-color: #B4F5B4; width:0%; height:20px; border-radius: 3px; } #yuzde { position:absolute; display:inline-block; top:3px; left:48%; } </style> </head> <body> <form id="dosyayukle" action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="dosya"> <input type="submit" value="Ajax File Upload"> </form> <div id="progress"> <div id="bar"></div> <div id="yuzde">0%</div > </div> <br/> <div id="mesaj"></div> <script> $(document).ready(function() { $("#dosyayukle").ajaxForm({ beforeSend: function() { $("#progress").show(); //herşeyi temizliyoruz. $("#bar").width('0%'); $("#mesaj").html(""); $("#yuzde").html("0%"); }, uploadProgress: function(olay, yuklenen, toplam, yuzde) { $("#bar").width(yuzde+'%'); $("#yuzde").html(yuzde+'%'); }, success: function() { $("#bar").width('100%'); $("#yuzde").html('100%'); }, complete: function(response) { $("#mesaj").html("<font color='green'>Dosya başarılı bir şekilde yüklendi</font>"); }, error: function() { $("#mesaj").html("<font color='red'> Bir hata oluştu</font>"); } }); }); </script> </body> </html>
basit bir php upload dosyası oluşturalım. upload.php dosyamız da aşağıdaki gibi
<?php $output_dir = "upload/"; if(isset($_FILES["dosya"])) { if ($_FILES["dosya"]["error"] > 0) { echo "Hata: " . $_FILES["file"]["error"] . "<br>"; } else { move_uploaded_file($_FILES["dosya"]["tmp_name"],$output_dir. $_FILES["dosya"]["name"]); echo "Yüklenen dosya :".$_FILES["dosya"]["name"]; } } ?>Son olarak ;
- 20-07-2014, 18:08:54Resim Dosyaları Zaten Sunucuda Oluşturuluyor Yani Sunucuya Upload işlemi yok @wrecking Hocam
@saintx ;
PHP den Bu Veriyi Alıp eş zamanlı ekrana basmam gerekiyor Tabi Mümkünse..
JQ ile ajax dan Zipi oluştur dedim ama zip oluşturulması uzun sürerse kullanıcı ne kadar bekleyeceğini bilemez,
Yapmak istediğim PHP zipi oluştururken aynı zamanda %kaç kaldığınıda js ile ekrana basabilmek..
Yapılabilir mi acaba ?
$('#getir').click(function(){ var yolla="islem=1"; $.ajax({ type: "post", url: "zip.php", data :yolla, success : function(cevap){ var link='<a id="link" href="'+cevap+'">Link Burada Olacak</a>'; $('#onizle').html(link); //alert(cevap); } }); });Ajax ile işlemi başlatması için Çağrı Yapıyorum..
PHP Kodum :
$klasor="resimler"; $zip = new ZipArchive(); $zip->open('arsiv.zip',ZipArchive::CREATE); if(file_exists($klasor)) { $dir = opendir($klasor); while (($dosya = readdir($dir)) !== false) { if(! is_dir($dosya)) { $zip->addFile($klasor."/".$dosya); } } closedir($dir); $zip->close(); } echo "arsiv.zip"; - 20-07-2014, 19:14:22Üyeliği durduruldubir dizindeki dosya klasör sayısı belli olsun, sıkıştırma işlemini yapacak yazılım bu işlemi ne kadar sürede bitireceği malum, bilgisayardaki o anki işlemciden ram den etkilenebilir. yazılımın kendi bile sayısal verilerle tahmin yürütüyorlardır. (toplam 50 dosya biten 20 kaç mb geridönüşüm yaptım kaç mb kaldı vs buna göre şu kadar kaldı gibisinden tahmin yapılır)
sizin istediğiniz imkansız bana göre.. - 20-07-2014, 21:35:40PHP sitesindede Hiç Kaynak Bulamadım, Ayrıca bahsettiğiniz gibi Zipleme esnasında sunucudaki İşlemci ram durumları başlıca etkenler..ylv adlı üyeden alıntı: mesajı görüntüle
PHP ile herşeyi yapabiliyorken bunu neden yapamıyoruz diye düşündüm ama dediğiniz gibi bu Sadece PHP ye bağlı değil dış etken sayısı fazla ve php bu desteği sağlamıyor.
Rar için baktım ondada yok,
Diğer yandan Paketlenen Boyutun Toplam Boyuta %oranını da araştırdım onuda bulamadım o olsa işime yarayabilirdi..
Ama kod içerisinde de Dosyaları tek tek zipe aktarıyorum bu da işe yaramadı ..
En Mantıklısı
"Dosyanız Hazırlanırken Lütfen bekleyiniz" Yazıp
Altınada Hareketi progres koyup bekletmek
Cevap Yazan Herkese Teşekkürler .. - 20-07-2014, 23:28:22Üyeliği durdurulduderste bahsetmişlerdi ben pek dinlememiştim, aklımda kalanla bahsediyim.ArMoR adlı üyeden alıntı: mesajı görüntüle
adamlar 2 lik sistem üzerinde algoritma geliştiriyorlar. 2lik sistem 0 ve 1 lerden oluşuyor
00 00 11 01
misal baştan okurken belli kalıpları değiştiriyorlar, 00 00 yerine 16 sisteme çeviriyor A yazıyor sallıyorum, 4 byte 'ı 3 byte'a düşsün tmmdır
bunun birde geri dönüşümünü düşünürsek tekrar 2 lik sisteme orjinal haline getirildiğini kendisinin bile tahmin etme şansı yok, sırasıyla okuyup algoritmasına göre tekrar değiştiriyor.
sizin yapabileceğiniz dosya sayısı az ise toplam boyutu öncelikle hesaplayıp, o an sıkıştırılan boyutla oranlayıp yaklaşık şu kadar kaldı diyebilirsiniz.
