Yöntemleri ve en iyi uygulamaları: post-tepki için komut dosyası işlev boşaltma?

2 Cevap php

İlk olarak,

the set up:

Ben bir kullanıcı sonra çeşitli görevleri yürütür bir komut dosyası komut dosyası çok ihtiyacın veri gönderir "upload" butonuna vurur var. Şimdi, bu bölümü biz yükleme kesip ve canlı bir kaynaktan çizmek için bu noktada seçeneği yok, şu anda zorunludur.

This section intentionally long-winded to make a point. Skip ahead if you hate that

Şu anda veriler daha sonra bir diziye bozuldu gerçekten korkak bir kaynak kullanarak regex, gelen ayrıştırılır. Daha sonra yüklenen verinin tarih aralığında zaten herhangi bir veri için DB denetler. Veri tarih aralıkları, halihazırda DB yoksa, o (bazı güvenlik kontrolleri, veri kaynağı doğrulama ve temel yükleme doğrulama orada da) kullanıcıya veri ve çıkışları başarı ekler ... veri mevcut değilse, Komut daha sonra DB zaten veriyi alır iki takım arasındaki farklılıkları bulur, eşleşmiyor eski verileri siler, yeni veri ekler ve sonra (bir e-posta başına bu değişikliklerden etkilenen her kişi için bir e-posta gönderir bir bütün diğer adım olduğunu belirtti e ilgili tüm değişiklikler,) ile kişi. Bizim DB çalışmalarını e-posta var ama LDAP onlar ertesi gün gelip habersiz yakalanmadan önce onlar e-posta almanızı sağlar kendi kişisel e-posta olduğu gibi e-posta adresleri LDAP arama vasıtasıyla çekilir. Son olarak, veri aktarıcı "e-posta gönderildi, değişiklikler yapılmıştır." Anlatılıyor Gerçekten tüm bunlar umurumda olan.

Kullanıcının Google Takvim (bu veriler planlama ne zaman) Şimdi verileri nakleder bir Google Takvim API ekleyerek olabilir. Ben kendi çalışma takvimi üzerinden yapardım, ama ben Exchange için bir WebDAV sistem kurulması ile ilgili daha önce Google'ın API ile benim ayak ıslak almak düşündüm.

</backstory>

Şimdi!

The practical question

Bu noktada, ön-Google entegrasyonu, komut en az bir ikinci ve çalıştırmak için bir buçuk alır. Oldukça etkileyici, en azından ben (sunucu, benim kodlama değil) öyle düşünüyorum. Ama Google bit, testlerde, sloooow. Biz muhtemelen çözebilirsiniz, ama o büyük soruyu gündeme ...

Ne kullanıcı sonra işin bazı off-yüklemek için en iyi yolu DB güncelleştirilmiş olduğunu teyit aldı mı? Bu onun çoğu endişeli bir parçası ve en önemli parçasıdır. E-posta bildirimleri ve Google Takvim güncelleştirmeler yükleme etkilenenlerin yararına tek vardır, ve bu bildirimleri ile ilgili bir sorun varsa, o konuda duyarsınız (ve daha sonra bu konuda duyarsınız) söylüyorum komut ne olursa olsun Önce onu.

Yani bir yol senaryonun son yürütme tarafından tetiklenen olan bir cronjob çalıştırmak için, örneğin, var mı? PHP exec() yeteneği ile cronjobs oluşturabilir miyim? Post-yürütme işin getting ihtiyacı olduğunu işleme bazı normalize yolu var mı?

Bu konuda herhangi bir tavsiye gerçekten takdir edilmektedir. Ben şişirilmiş-lik benim gelişim aşamasını ve bana nihayet web uygulamaları bölümü-of-emek nasıl bilmek için ihtiyacı yansıtan komut gibi hissediyorum.

Ama aynı zamanda tüm görevleri, vb tamamlandığında bilmek kullanıcının ihtiyacı Yani bu kadar getiriyor gibi bu, yapılmaz ki endişeli olsun:

The best-practices/more-subjective question

Temel olarak, barlar, gerçek-zamanlı Boşaltma ve olan komut gergin kullanıcı tutmanın başka yollarını ilerleme bir fikir var - tabii kod optimizasyonu ile kombine edildiğinde - daha iyi, daha tercih edilen bir yöntem, o zaman sadece diyerek vs vs "Eğer bize ihtiyacınız Biz senin bölüm ile bitirdiniz, biz kullanıcılar bildiren olacak"

(Tabii ki kullanıcının tüm herhangi bir geribildirim vermek değil, daha başka) önlemek için herhangi BIG şeyler var mı?

Okuduğunuz için teşekkürler. Kodlama kısmı çok önemlidir, bu nedenle ikinci kısmını karşılamak zorunda hissediyorum veya kodlama kısmını unutmayın!

2 Cevap

Bu konuda gitmek için çeşitli yollar vardır. Sen yukarıdaki dediği gibi,) (exec olabilir, ancak tıklama göndermek çok var eğer potansiyel bir DoS durum içine çalıştırabilir. PCNTL uzatma böyle yönetme süreçleri belki daha iyidir. this post (3 parça vardır) bir tartışma görmek için dışarı atın.

Sen sonradan uygun işçi komut dosyasını çalıştıran ikinci, ajax yazı göndermek için Javascript kullanabilirsiniz. () Ignore_user_abort kullanarak ve bir Content-Length göndererek, tarayıcı erken bağlantısını kesebilir, ancak apache süreci verileri çalıştırmak ve işlemeye devam edecektir. Baş hiçbir forkbomb potansiyeli, Olumsuz daha apache sürecini açık olacaktır.

(([{Bakınız işlenirken ön ucunda, uç bunları kaldırın bu tabloya öğeleri sopa - Yine başka bir seçenek 'daha sonra' mutlaka yapılması gereken şeyler için bir süreç sıra tabloya bakar arka planda bir cron kullanmaktır 0)]}).

Diğer makinelerde öğeleri işleyebilir - Yine başka bir benzeri gearmand daha dağıtılmış iş çerçeve kullanmaktır.

Tüm genel yetenekleri ve gereksinimlerine bağlıdır.

Bir cron işi bunun için iyi. İstediğiniz tüm yapmak için bir kullanıcı yüklenenler veri söylüyor "Hey kullanıcı verileri için teşekkürler!" Olduğunda o zaman bu iyi olacak.

Eğer daha acil bir yaklaşımı tercih ederseniz, o zaman exec() bir arka plan işlemi başlatmak için kullanabilirsiniz. Linux ortamında bu gibi bir şey olacaktır:

exec("php /path/to/your/worker/script.php >/dev/null &");

& parçası "backgound beni çalıştırın." Diyor >/dev/null parçası bir kara delik çıktı yönlendirir. Bildiğim kadarıyla tüm hataları işleme ve uygun kişileri haberdar gibi - bu tüm aşağı işçi script tasarımı olduğunu.

Daha esnek bir çapraz-platform bir yaklaşım için, bu PHP Manual post check out