PHP: tüm betikleri ignore_user_abort (true)

3 Cevap php

Ben sunucu tarafında PHP ile çalışan bir web sitesi var.

Kullanıcılar sayfalarına erişmek ve PHP vs bir MySQL veritabanı veri yazar, bazı hesaplamalar

Bir kullanıcı PHP kullanıcı için bir hesap oluşturan bir sayfa kere düşünün. Masa "kullanıcılar" olarak tescil veri ekleme ve tablo "ayarları" içine bu hesap için ayarları ekleme: oluşturma iki bölümden oluşmaktadır. Bunlar birbiri ardına idam edilmesi gereken iki SQL sorguları vardır. Kullanıcı sonra ilk sorgu sayfası çıkıyor ise, "ayarlar" takılı herhangi bir değer yok.

Nasıl bu sorunu önlemek olabilir? Ben sadece ignore_user_abort (true) kullanarak düşünüyorsunuz, değil mi?

Bu yüzden her PHP script üstüne ignore_user_abort (true) aramak için yararlı değil mi? Ben bu sorunlara neden gerektiğini vakası bilmiyorum.

3 Cevap

Belirli Örneğin, (Ignacio tarafından belirtildiği gibi) veritabanı işlemleri kullanarak daha uygun bir yaklaşım olacaktır.

Eğer kullanıcı veritabanları ile ilgili değil, ama erken iptal edemez emin olmak isteyebilirsiniz başka durumlar vardır. Eğer veritabanını güncellemek ve daha sonra bir e-posta göndermek Örneğin, size posta dışarı gitmeden önce bir kullanıcı sürecini durdurmak mümkün istemiyorum. Durumda bu tür içinde, ignore_user_abort uygun olacaktır.

Ancak, yalnızca noktada sonraki komut çıktısı yazmaya çalıştığınızda, bağlantı kesiliyor nedeniyle müşteri için bir kırık boru yürütme right away durmuyor unutmayın. Bu echo veya print çağırarak, hatta sadece PHP etiketi kapatma ve yeni bir tane açmadan önce bazı boşlukları takarak yoluyla olabilir (... ?> <?php ...). Yani herhangi bir sayfa içeriğini yazmaya çalışmadan önce, sayfanın en üstündeki komut tüm 'eylem' kısmını varsa, sizin app mantığı etkileyen kırık borulardan kesintiler konusunda endişelenmenize gerek yok.

Ve tabii yine bu şekilde sayfa içeriği eylem mantığı ayırmak gerekir.

Eğer hiç veya tamamen yok olur ya birden fazla sorgu gerekiyorsa, o zaman işlemleri yerine kullanarak sorunu üzerine bir bandaj koyarak düzgün yapıyor olmalıdır.

Bu bir istek iptal uzak tarafı için kullanışlı olabilir örneğin eğer istek uzun hesaplamalar içerir ve kullanıcı hepsi sonra sonuçları gerekmez karar verir.