Wywoływanie skryptu raz dziennie - bez CRONa


(northwest) #1

Witam serdecznie,

Kombinuję nad wywołaniem skryptu budującego mapę strony (bez użycia CRON'a):

 

$path_parts = pathinfo($_SERVER['SCRIPT_FILENAME']);
$path_parts['filename'];
if ($path_parts['filename'] != "sitemapgenerator") {
    $filename = 'sitemap.xml';
    if (file_exists($filename)) {
        $aktualnadata = date("Y-m-d");
        $datapliku = date("Y-m-d", filectime($filename));
        if ($aktualnadata <= $datapliku) {
            
        } else {
            file_get_contents($url . "sitemapgenerator.php");
        }
    } else {
        file_get_contents($url . "sitemapgenerator.php");
    }
}

tylko nie bardzo mi to działa (nie wywołuje skryptu) - wiecie może dlaczego?

 

ps. czy takie rozwiązanie ma sens?


(kostek135) #2

Jak ma ci zadziałać, skoro uruchamiasz to raz, albo przejdzie przez wszystkie i-fy, albo też nie, ale efekt końcowy jest taki, że to się już nigdy samoczynnie nie uruchomi drugi raz?


(roobal) #3

Skoro nie chcesz użyć Crona, to myślę, że powinieneś mieć drugi skrypt, który będzie sobie cały czas działał (pętla while lub until) i wywoływał twój skrypt w danym dniu. Pytanie tylko, po co wynajdywać koło na nowo. Chyba że nie masz możliwości użycia Crona?


(Pablo_Wawa) #4

Kilka luźnych uwag - może Cię naprowadzą na dobre rozwiąznie:

 

  1. po co jest druga linia kodu?

Według mnie jest ona zupełnie zbędna.

 

  1. Wydaje mi się, że porównanie dat w wierszu ósmym jest niewłaściwe

Bo plik nie może mieć daty późniejszej (nowszej), niż bieżąca (może być ona co najwyżej sobie równa - w tym samym dniu stworzenia pliku). To taka drobna uwaga, nie mająca w sumie wpływu na warunek. Nie wiem, co chcesz wtedy robić (ale chyba nic, bo to oznacza, że masz aktualny plik XML z mapą strony)?

 

  1. W przeciwnym razie, tj. gdy data pliku jest mniejsza (starsza) niż bieżąca, pownienenś wygenerować nowy plik XML, prawda? Ale nie poprzez

tylko (tak mi się wydaje - nie wiem, co się dzieje w pliku sitemapgenerator.php) pownieneś załączyć ten skrypt poprzez include (i nclude_once ) lub require ( require_once ), który dzięki temu się wykona i wygeneruje mapę w XML. Obawiam się, że poprzez file_get_contents nie uzyskasz akcji wywołania skryptu PHP, a jedynie odczytanie jego zawartości (akcja bez sensu) - nie sprawdzałem.

 

  1. Analoginczne działanie powinieneś podejmować w wierszu z drugim file_get_contents (czyli w przypadku, jeśli pliku XML z mapą nie ma).