Yeni kurulumda PHP Uyarısı (Bağlantı zaman aşımına uğradı)


10

Yeni WordPress 3.4.1 kurulumuma (Norveç dili) erişirken bu PHP Uyarısını alıyorum.

Uyarı: fopen (URL_TO_MY_WORDPRESS_PAGE / wp-cron.php? Doing_wp_cron = 1341476616.7605190277099609375000): akış açılamadı: 923 satırındaki PATH_TO_MY_WP_FILES / wp-include / class-http.php'de bağlantı zaman aşımına uğradı

Bu, elbette , bir geliştirme sunucusunda çalıştığı için WP_DEBUGişaretin ayarlanmış trueolmasıyla ilgilidir.

resim açıklamasını buraya girin

Bu aralıklı olarak gerçekleşir, bu yüzden bir sorun gibi görünüyor wp-cron.

Bu muhtemelen WordPress'te bir hata mı yoksa sunucumda yanlış bir şey mi? Endişelenmeli miyim?

Sunucu, LAMP yığınına sahip yeni bir Ubuntu Server 12.04 VM'dir.

Google arama, bunu yaşayan tek kişi olmadığımı gösteriyor. (Gerçek hataları görmek için listelenen sayfaların arabelleğe alınmış / dizine alınmış sürümlerine bakın.)

EDIT: Ben de aynı PHP Uyarı ön sayfada alıyorum. Web sunucusunun NAT'a alındığı gerçeği ile ilgili olabilir mi? Şu anda güvenlik duvarını geliştirme sunucusunda 19235 - 80 numaralı bağlantı noktasını işaret edecek şekilde ayarladım.


Php.ini dosyanızda allow_url_fopenAÇIK olarak ayarlanmış mı?
its_me

Evet,allow_url_fopen = On
ohaal

Yanıtlar:


10

Cevap görünüşe göre EVET, endişelenmeliyim . Bazı araştırmalardan sonra, uyarının WordPress'in barındırıldığı sunucudaki yanlış yapılandırmalarla ilişkili olduğunu gördüm (yani, WordPress ile değil, sunucumla ilgili bir sorun).

Yaygın yanlış yapılandırmalar:

  1. Sunucunun DNS'si yoktur ve bu nedenle kendisi olmasına rağmen "example.com" un kim olduğunu anlayamaz.
  2. Yanlış yönlendirilmiş bir güvenlik denemesinde sunucu yöneticileri "geri döngü" isteklerini engelledi, bu yüzden kendi kendine geri arama yapamaz.
  3. Sunucu "mod_security" veya benzeri bir şey çalıştırıyor, bu da beyin ölü yapılandırması nedeniyle çağrıyı aktif olarak engelliyor.

Benim durumumda sorun aslında varsayılan olarak "NAT yansımasını devre dışı bırak" (ortak neden # 2 olarak listelenmiştir ) olan güvenlik duvarım (pfSense) neden oldu.

Sunucunun kendisinde telnet kullanarak kendime ulaşmaya çalıştım ve sonuç şöyle oldu:

$ telnet external.server.hostname.com 19235
XXX.XXX.XXX.XXX çalışıyor ...
telnet: Uzak ana bilgisayara bağlanamıyor: Bağlantı zaman aşımına uğradı

Bunu düzeltmek için güvenlik duvarımdaki NAT yansımasını devre dışı bırak seçeneğinin işaretini kaldırdım . Benim durumumda, bu Sistem-> Gelişmiş-> Güvenlik Duvarı / NAT altında pfSense web arayüzündeydi.
Kaynak: http://forum.pfsense.org/index.php?topic=3473.0

resim açıklamasını buraya girin

Şimdi kendime (sunucunun kendisinde) güvenlik duvarı üzerinden bağlanabiliyorum:

$ telnet external.server.hostname.com 19235
XXX.XXX.XXX.XXX çalışıyor ...
External.server.hostname.com sitesine bağlandı.
Kaçış karakteri '^]'.

ve artık wp-cron hakkında PHP uyarısı almıyorum.


Nasıl çalıştığını açıklayan bu ayrıntılı cevabı okuduktan sonra bunu anladım .wp_cron

Kısa cevap: Bunu wp-config.php dosyanızdaki tanımlara ekleyin: define ('ALTERNATE_WP_CRON', true);

Mazoşistler için gerçekten uzun bir cevap: Programlanmış yayınlar artık değil ve hiç "kırılmadı". WordPress geliştiricileri bunu düzeltemez çünkü düzeltilecek hiçbir şey yoktur.

Sorun, sunucunuzun bir nedenle wp-cron işlemini düzgün bir şekilde yürütememesi gerçeğinde yatmaktadır. Bu işlem WordPress'in zamanlama mekanizmasıdır, zamanlanmış yayınlardan XMLRPC pinglerine geri ping göndermeye kadar her şeyi işler.

Çalışma şekli oldukça basit. Bir WordPress sayfası her yüklendiğinde, WordPress dahili olarak wp-cron'u tetiklemesi gerekip gerekmediğini kontrol eder (geçerli saati wp-cron'un son çalıştırılmasıyla karşılaştırarak). Wp-cron'u çalıştırması gerekiyorsa, wp-cron.php dosyasını çağırarak kendisine bir HTTP bağlantısı kurmaya çalışır.

Kendi kendine olan bu bağlantı bir sebep için var. wp-cron'un yapacak çok işi var ve bu iş zaman alıyor. Kullanıcının web sayfasını bir sürü şey yaparken görmesini ertelemek kötü bir fikirdir, bu nedenle bu bağlantıyı kendisine geri vererek, wp-cron programını ayrı bir işlemde çalıştırabilir. WordPress'in kendisi wp-cron'un sonucunu umursamadığı için, sadece bir saniye bekler, ardından web sayfasını kullanıcı için oluşturmaya geri döner. Bu arada, başlatılan wp-cron, işini bitene veya yürütme süresi bitene kadar yapar.

Bu HTTP bağlantısı, kötü yapılandırılmış bazı sistemlerin başarısız olduğu yerdir. Temel olarak, WordPress bir web tarayıcısı gibi davranıyor. Siteniz http://example.com/blog ise , WP işlemi başlatmak için http://example.com/blog/wp-cron.php adresini arar . Ancak, bazı sunucular bunu bir nedenle yapamazlar. Olası nedenler arasında:

  1. Sunucunun DNS'si yoktur ve bu nedenle kendisi olmasına rağmen "example.com" un kim olduğunu anlayamaz .
  2. Yanlış yönlendirilmiş bir güvenlik denemesinde sunucu yöneticileri "geri döngü" isteklerini engelledi, bu yüzden kendi kendine geri arama yapamaz.
  3. Sunucu "mod_security" veya benzeri bir şey çalıştırıyor, bu da beyin ölü yapılandırması nedeniyle çağrıyı aktif olarak engelliyor.
  4. Başka bir şey.

Mesele şu ki, web sunucunuz WordPress'in işini yapmasını engelleyen standart dışı bir şekilde yapılandırılmıştır. WordPress bunu düzeltemez.

Ancak, bu koşula sahipseniz, bir geçici çözüm vardır. Wp-config.php dosyanızdaki tanımlara şunu ekleyin:

define ('ALTERNATE_WP_CRON', doğru);

Bu alternatif yöntem, cronun çalışması gerektiğinde kullanıcıların tarayıcısının yeniden yönlendirilmesini sağlayan bir yönlendirme yaklaşımı kullanır, böylece cron bıraktıkları bağlantıda çalışmaya devam ederken hemen siteye geri dönerler. Bu yöntem bazen biraz iffy, bu yüzden varsayılan değil.

Kaynak: http://wordpress.org/support/topic/scheduled-posts-still-not-working-in-282#post-1175405

Bu harika ve ayrıntılı gönderide belirtildiği gibi, sunucu yapılandırmanız veya varsa ortam üzerinde herhangi bir kontrolünüz yoksa - bir çözüm

define ('ALTERNATE_WP_CRON', doğru);

wp-config.php dosyanızda.


3
Çok güzel bir rapor!
brasofilo

2
İnsanlar kendi sorunlarını çözdüklerinde güzel, ancak çözümü bırakmak için geri döndüklerinde harika. @ohaal Peki, şimdi her şey yolunda mı?
its_me

1
@AahanKrish: Görünüşe göre, tetik parmağında biraz hızlıydım. Sorun ilk beklenenden biraz daha kıvrıktı - suçlu, başlangıçta tahmin edildiği gibi apache2 hatası değildi. Cevabımı ayrıntılarla güncelledim.
ohaal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.