• 17-07-2014, 14:43:54
    #1
    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..
  • 20-07-2014, 17:35:35
    #2
    @saintx ; Bir fikrin var mı Kardeşim

    Umarım etiketleyebilmişimdir
  • 20-07-2014, 17:48:12
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @ArMoR; arşiv yapan PHP betiğini konuya eklersen bir fikir yürütebilirim.
  • 20-07-2014, 17:53:06
    #4
    Bunu 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, 17:58:53
    #5
    @wrecking;'in verdiği mantıkla zip işlemine bu olay yapılabilir.
  • 20-07-2014, 18:08:54
    #6
    Resim 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
    #7
    ylv
    Üyeliği durduruldu
    bir 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:40
    #8
    ylv adlı üyeden alıntı: mesajı görüntüle
    bir 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..
    PHP sitesindede Hiç Kaynak Bulamadım, Ayrıca bahsettiğiniz gibi Zipleme esnasında sunucudaki İşlemci ram durumları başlıca etkenler..
    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
    #9
    ylv
    Üyeliği durduruldu
    ArMoR adlı üyeden alıntı: mesajı görüntüle
    PHP sitesindede Hiç Kaynak Bulamadım, Ayrıca bahsettiğiniz gibi Zipleme esnasında sunucudaki İşlemci ram durumları başlıca etkenler..
    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 ..
    derste bahsetmişlerdi ben pek dinlememiştim, aklımda kalanla bahsediyim.
    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.