2010-02-19 10 views
5

Używam $_SERVER['DOCUMENT_ROOT'] dla moich ścieżek włączania, więc pliki sprawdzą, skąd pochodzą (tj. Czy są na żywo czy w czasie) i działa dobrze, z wyjątkiem skryptów uruchamianych przez crona, w których muszę hardcode ścieżkę.

Czy istnieje inna zmienna, której mogę użyć, która może działać zarówno z crona, jak iz przeglądarki?

Odpowiedz

10

Podczas uruchamiania skryptu PHP przez cron, zakładam, że jest wykonywany w kontekście CLI zamiast serwera WWW. W przypadku wykonywania PHP z CLI, $ _SERVER ['DOCUMENT_ROOT'] nie jest poprawnie wypełniony. Możesz użyć poniższy kod, żeby to obejść:

if ($_SERVER['DOCUMENT_ROOT'] == "") 
    $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__); 
+1

Jeśli skrypt uruchomiony z podfolderów zwróci podfoldery. –

5

Poniższa daje katalog, że skrypt znajduje się w:

realpath(dirname(__FILE__)); 

to działa dla obu wniosków internetowych i skryptów crona.

+0

za pomocą realpath pomógł mi podczas pracy nad systemem windows, dzięki. – CrandellWS

3

Najlepszym rozwiązaniem jest zdefiniowanie własnej stałej, do której można się odwoływać z dowolnego miejsca w aplikacji. Na przykład, można umieścić coś takiego w MyAppDirectory/public_html/index.php:

define('APPLICATION_PATH', realpath(dirname(__FILE__).'/..')); 

To daje spójną odesłanie do MyAppDirectory/index.php niezależnie od tego, gdzie jest nazywany lub zawarte z. Definiowanie własnej stałej nie tylko pozwala na wywoływanie aplikacji z crona lub przez przeglądarkę, jak chcesz, ale także pozwala zmieniać strukturę przechowywania na znacznie większe sposoby przy minimalnych zmianach do wyśledzenia. Zend Framework używa tego w dużym stopniu dzięki procesowi bootstrap Zend_Application, a użycie go w "php APPLICATION_PATH" zapewni ci szereg dalszych referencji.

0

można użyć chdir() funkcję, jeśli skrypt jest uruchomiony poprzez crona:

chdir(dirname(__FILE__)); //avoid conflict with "cron path" and app base path (if script runs via 'Cron') 

pracuję na Windows, więc korzystaj z „nnCron” ale musi działać również na Linuksie.

Powiązane problemy