Manuel çalışma cron çalışır, ama

1 Cevap php

Bir URL unvanını almak için bir php komut dosyası ile ilgili bir sorun var. Ben elle çalıştırdığınızda çalışır, ama ben cron aracılığıyla çalıştırdığınızda.

Küçük bir betik bir URL unvanını almak için almak için googled:

function getTitle($url) {
    $fh = fopen($url, "r");
    $str = fread($fh, 7500);
    fclose($fh);
    $str2 = strtolower($str);
    $start = strpos($str2, "<title>")+7;
    $len   = strpos($str2, "</title>") - $start;
    if ($start == 7)
            return $url;
    return substr($str, $start, $len);
}

Ben o metinlerde URL'ler için bakmak nerede, altında çalıştırmak ve Titel ile url yazdırır:

$data = mysql_query('SELECT * FROM msgs ORDER BY id DESC LIMIT 100');
while ($rad = mysql_fetch_array($data)) {
    preg_match_all($pattern, $rad["text"], $a);
    $count = count($a[1]);
    for ($row = 0; $row < $count ; $row++) {
        echo 'URL:'.$a[1]["$row"].'<BR>';
        echo 'TITLE:'.getTitle($a[1]["$row"]).'<BR><BR>';
    }
}

Yukarıdaki kod url.php bulunur. Ben tarayıcı aracılığıyla elle çalıştırdığınızda iyi çalışır ve doğru başlığı ile url yazdırır. Ben zamanlanmış bir cron işi (her dakika) olarak çalıştırdığınızda getTitle her zaman gerçek olamayacak "$ == 7 başlayacak" yorumlamak gibi görünüyor, yani Ancak, url ve url yazıyor.

Bu zamanlama ile yapmak zorunda miyim? Fopen ve fread çok zaman alıyor mu? Eğer öyleyse, bunu nasıl düzeltebilirim.

Ben tipik bir cron sorun env olduğunu gördüm. değişkenler, ama bu nasıl etkilediğini görmüyorum?

Herhangi bir yardım veya fikir bekliyoruz!

1 Cevap

(Eğer farklı bir kullanıcı olarak çalıştırıldığında ya da) sizin cron farklı bir ortam var çünkü genellikle olur.

Eğer komut satırında bunu çalıştırdığınızda size "env" çalıştırarak okuyabilirsiniz farklı bir ortam var.

Eğer çalıştırdığınız komutu ortamın prepending değişkenleri değiştirebilirsiniz. Gibi:

PATH = / bin :/ usr / local / bin php myprogram.php

Yapmanız gereken başka bir şey PHP komut hata raporlamayı etkinleştirmek olduğunu.

fopen Örneğin YANLIŞ dönüş olabilir ve bu tür hataları yakalamak zorundayız. Böylece bu işlenmeyen bir hata sonucu olabilir ifade boş dize prepend zaman "$ başlangıç ​​== 7" olur.

Eğer hata ayıklama sırasında error_reporting (E_ALL) burada çalışan yardımcı olabilir.