Php Uzun Sürecek İşlemi Nasıl Yapmalıyım?
-
nurulmac11 bunu yazdıozgunlu bunu yazdı
excel' i csv' ye convert edip, import ettirsen ?
Php excel to csv için de PHPExcel kütüphanesiyle yapılıyormuş,
Burada -> convert işlemi :
http://hayageek.com/convert-xls-to-csv-in-php/
LOAD DATA LOCAL INFILE
Burada -> import işlemi :
http://stackoverflow.com/questions/11448307/importing-csv-data-using-php-mysql
https://blog.paranoidpenguin.net/2011/04/load-data-local-infile-from-php/
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.
-
nurulmac11 bunu yazdıozgunlu bunu yazdı
excel' i csv' ye convert edip, import ettirsen ?
Php excel to csv için de PHPExcel kütüphanesiyle yapılıyormuş,
Burada -> convert işlemi :
http://hayageek.com/convert-xls-to-csv-in-php/
LOAD DATA LOCAL INFILE
Burada -> import işlemi :
http://stackoverflow.com/questions/11448307/importing-csv-data-using-php-mysql
https://blog.paranoidpenguin.net/2011/04/load-data-local-infile-from-php/
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.
-
set_time_limit(0);
kodunu php dosyasının en üstüne ekle. Zaman aşımına uğruyor dosyan ondan kaynaklı
-
<?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.
-
işlemin bir parçasını yapan php sayfasını tekrar tekrar çağırma işini AJAX ile de yapabilirsin diye düşünüyorum.
-
Hala tam olarak ne yapmaya calistigini anlamadim :D
-
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 :)