Çünkü uzun bir mysql sorgu aşımından bir php komut dosyası tutmak için nasıl

5 Cevap php

Ben dışarı zamanlama olan bir cron görev tarafından yürütülüyor bir güncelleştirme sorgusu var. Sorgu Navicat çalıştırıldığında yürütmek için, ortalama beş dakika sürer.

Kod kabaca bu gibi görünüyor. Bu oldukça basit:

// $db is a mysqli link
set_time_limit (0); // should keep the script from timing out
$query = "SLOW QUERY";
$result = $db->query($query);
if (!$result)
    echo "error";

Komut dosyası zaman aşımı olmamalı olsa bile, zaman sql çağrı bekleyen harcanan hala zaman aşımından konu gibi görünüyor.

Kullanılabilecek bir asenkron çağrı var mı? Veya zaman aşımı süresini ayarlamak?

Bu komut satırından yerine Apache üzerinden daha çağrıldığını çünkü zaman aşımı farklı mı?

Teşekkürler

5 Cevap

Ben somwhere aynı sorunu vardı ve aşağıdaki kodu (benim dosyanın ilk iki satır) ile "çözüldü":

set_time_limit(0);
ignore_user_abort(1);

Göre manual,

Note: set_time_limit () fonksiyonu ve yapılandırma yönergesi sadece komut kendisi yürütme süresini etkiler max_execution_time. Herhangi bir zaman sistemi () kullanarak çağrıları komut çalışmakta olduğu azami süresini belirlerken, akım işlemleri, veritabanı sorguları dahil değildir sistemi gibi script yürütülmesi dışında olur aktivitesi üzerine geçirdi.

Yani PHP'nin zaman sınırı ile ilgisi var düşüktür. Zaman aşımına ne mesajı alıyorsanız? Belki de dahil bir MySQL ayar var.

Php güvenli modda çalışıyor? Alıntı PHP manual of set_time_limit:

This function has no effect when PHP is running in safe mode. There is no workaround other than turning off safe mode or changing the time limit in the php.ini.

Eğer linux üzerinde varsayarsak, Debian tabanlı sistemler mod_php / php cgi ve php-cli için ayrı yapılandırmaları vardır. Bu cgi / cli yapılandırmasını ayırmak değil, farklı bir linux sisteminize kurmak için çok zor olmamalı.

Ayrı yapılandırmaları var, ben senin php cli yapılandırmasını ayarlamak olacaktır. Güvenli mod ve her zaman sınırları ve ram sınırlarını devre dışı.

Fix your query., bir komut dosyası için varsayılan yaşam süresi 30 saniyedir. Bundan daha uzun çalışan herhangi bir sorgu bozuldu.