2010-02-19 2 views
5

내 포함 경로에 $_SERVER['DOCUMENT_ROOT']을 사용하고 있습니다. 따라서 파일이 실행중인 위치 (예 : 라이브 또는 스테이징 중 어디에 있는지)를 파악할 수 있으며 cron에서 실행하는 스크립트를 제외하고 제대로 작동합니다 경로를 하드 코딩하십시오.

cron과 브라우저에서 모두 사용할 수있는 다른 변수가 있습니까?

realpath(dirname(__FILE__)); 

이 웹 요청과 크론 스크립트 모두 작동합니다

답변

10

PHP 스크립트를 cron으로 실행할 때 웹 서버 대신 CLI의 컨텍스트에서 실행되는 것으로 가정합니다. CLI에서 PHP를 실행하는 경우 $ _SERVER [ 'DOCUMENT_ROOT']가 올바르게 채워지지 않습니다. 당신은이 문제를 해결하려면 다음 코드를 사용할 수 있습니다 : 스크립트가 cron을 통해 실행중인 경우

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

하위 폴더에서 실행중인 스크립트가 하위 폴더를 반환합니다. –

5

다음은 당신에게 당신의 스크립트에있는 디렉토리를 제공 할 것입니다.

+0

realpath를 사용하면 Windows 시스템에서 작업 할 때 도움이되었습니다. 감사합니다. – CrandellWS

3

가장 좋은 방법은 앱의 다른 곳에서 참조 할 수있는 고유 한 상수를 정의하는 것입니다. 예를 들어, MyAppDirectory이 뭔가를 넣을 수 있습니다/public_html을/index.php에 :

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

이 관계없이 index.php를 호출 또는에서 포함되는 위치에 다시/MyAppDirectory에 당신에게 일관된 참조를 제공 할 것입니다. 자신의 상수를 정의하면 원하는대로 cron이나 브라우저에서 응용 프로그램을 호출 할 수있을뿐만 아니라 최소한의 변경만으로 훨씬 큰 방법으로 저장소 구조를 변경할 수 있습니다. 젠드 프레임 워크는 Zend_Application 부트 스트랩 프로세스와 함께이 부분을 많이 사용하며, "php APPLICATION_PATH"에 대한 인터넷 검색은 다양한 추가 참조를 제공합니다.

0

당신은, chdir() 기능을 사용할 수 있습니다 : 나는 윈도우에서 작동

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

을, 그래서 "nnCron"를 사용, 하지만 리눅스에서도 작동해야합니다.

관련 문제