folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Php Uzun Sürecek İşlemi Nasıl Yapmalıyım?



Php Uzun Sürecek İşlemi Nasıl Yapmalıyım?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    nurulmac11 bunu yazdı
    ozgunlu bunu yazdı

    abi onu dusundumde, opencartta urun eklemek icin birden fazla tabloya yazmak gerekiyo. 

    simdi soyle yapiyorum, ilk dosyam exceli kullanicidan aliyo, gecici klasore atiyo

    ikinci php yi cagiriyo : import.php?dosyaAdi=dosya.xlsx&satir=1 falan gibi, her seferinde 5 satir ekleyip kendini satir=6 diye tekrar cagiriyo 

    Kaç tane tablo olduğunun bir önemi yok. PHPExcel ile dilediğin şekilde excel dosyaları oluşturabilirsin.

    Kullanıcıdan gelen excel' i kendi tablo formatında PHPExcel ile oluşturup csv çıktılarını direk ayrı tablolara import edebilirsin.

    Neyse sen öyle çalıştırdıysan sıkıntı yok, bu da alternatif çözüm olarak dursun.


    Hello, i am nothing. I come from Neverland.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    S2kucuk
    S2kucuk's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Haziran/2015
    Erkek
    nurulmac11 bunu yazdı
    ozgunlu bunu yazdı

    abi onu dusundumde, opencartta urun eklemek icin birden fazla tabloya yazmak gerekiyo. 

    simdi soyle yapiyorum, ilk dosyam exceli kullanicidan aliyo, gecici klasore atiyo

    ikinci php yi cagiriyo : import.php?dosyaAdi=dosya.xlsx&satir=1 falan gibi, her seferinde 5 satir ekleyip kendini satir=6 diye tekrar cagiriyo 

    Ben olsam isi devam ettirmek icin clienta guvenmezdim. Ya request gonderilir ancak cevabi sunucuda olusan anlik bir problem icin gelmezse? Yada clientin browseri cokerse? Yanlislikla kapatirsa? Sayfayi kullanici refresh yaptigi anda ayni data araligi 2 kere eklenmis olur. Onun yerine cron.php isimli bir dosya yapar cronjob ile her dakika onu tetiklerim. Cronjob yuklenen excel dosyasi varmi varsa nerde kalmis diye kontrol edip 100 satir veri ekler (sayiyi deneyerek daha optimum hale getirebilirsin) Bu durumda client bagimsiz sorun cozulur. 

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PHP-SEO Developer
    Erdem
    Erdem's avatar
    Kayıt Tarihi: 04/Haziran/2002
    Erkek

    set_time_limit(0);

    kodunu php dosyasının en üstüne ekle. Zaman aşımına uğruyor dosyan ondan kaynaklı


    Php for SEO nun ardından Php for Gcode (CNC)
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek
    <?ph.p
    
    $fark = 500;
    
    $baslangic = microtime();
    $bitis = $baslangic + (ini_get('max_execution_time') * 1000) - $fark;
    
    
    /*
      # Veri okuma, hazırlama işlemleri
    */
    
    
    while(microtime() < $bitis) {
      // # Veri yazma işlemleri
      // # Hangi satırın yazıldığının kaydı
    }

    Kesin olarak sorununu çözmeyecek ama bu mantık ile yola devam edebilirsin. İlk olarak $baslangic ile ilk çalışma anını öğreniyoruz sonra üzerine zaman aşımı süresini ekleyip zaman aşımı anından $fark değişkeni ile biraz uzaklaşarak kendimizi biraz daha garantiye alıyoruz. Veri okuma işlemlerini yapıyoruz, başka bir yere en son hangi satırı yazdığımızı kaydediyoruz ki her while döngümüz son döngü olabilir diyoruz. While koşulu gerçekleşmediğinde hala bir süremiz var olduğu için dosyaları kapatıp çıkıyoruz ya da scripti sonlandırıyoruz.

    Daha fazla detaylandırılabilir, bir döngünün ne kadar süre yediği hesaplanabilir, zaman aşımından 500 milisaniyelik kendimizi güvene alma olayı yetersiz kalabilir bunun yerine zaman aşımının yarısı kadar scripte süre tanınabilir.

    Mesela şu an fark ettiğim eğer adam hosting değil kendi serverında kullanıyorsa ve max_execution_time'ı sınırsız yapıyorsa -yani değerini 0 yapıyorsa- $bitiş zamanı değeri, $baslangic zamanı - $fark olacağından her zaman çalışma anından daha küçük değere sahip olacaktır. While koşulumuz da gerçekleşmeyeceği için döngü hiç çalışmayacaktır. Üstelik sayfamızı istediğimiz kadar süre çalıştırabilme iznimiz var iken.

    Yani kesin olarak sorununu çözmeyecektir. Ama bu mantıkta, bu ritimde ilerlenebilir.


    Sadece bi imza..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Archon
    Archon's avatar
    Kayıt Tarihi: 18/Temmuz/2005
    Erkek

    işlemin bir parçasını yapan php sayfasını tekrar tekrar çağırma işini AJAX ile de yapabilirsin diye düşünüyorum.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek

    Hala tam olarak ne yapmaya calistigini anlamadim :D


    Hello, i am nothing. I come from Neverland.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nurulmac11
    nurulmac11's avatar
    Kayıt Tarihi: 04/Ağustos/2012
    Erkek
    ozgunlu bunu yazdı

    Hala tam olarak ne yapmaya calistigini anlamadim :D

    abi simdi bi excel dusun, burda urunun modeli, fiyati, adi, stok bilgisi falan var. ben gidip once urun modelini resimler klasorunde aratarak urun resimlerini buluyorum, sonra urun aciklamasini iki dile cevirttiriyorum translate ile (almanca ve ingilizce) sonra bunlari bi array e atip opencartin db ye ekliyorum. ama islem uzun surdugu icin timeout oluyo. elle 'set_timeout(0)' falan max 45 saniyeye kadar uzatiyo, sonrasinda yemiyo.

    senin dedigin 'load data infile' olayi cogu shared hosting de kapaliymis, bizimkinde de kapali.

    sorunu ilk basta soyledigim gibi cozdum, yorum yapan arkadaslarin yorumlariyla biraz daha gelistirdim. once exceli alip db de gecici bi tabloya ekliyorum. sonra ekledigim tum id leri group concatle bi arraye alip javascriptle ekrana bastiriyorum. sonra javascriptle iframe de sirayla bu id leri ikinci bi php dosyasina gonderiyorum. o da gecici tablodan bilgileri alip mesajin basinda soyledigim islemleri yapip opencarta gomuyo :D

    ugrasirken bayaa eglendim. herkese tesekkur ederim :) 


    black implies white, self implies other, life implies death.
Toplam Hit: 2244 Toplam Mesaj: 18
php opencart excel timeout