php 명령줄에서 .php 파일을 실행할 때 실행 환경(getcwd())의 작업 디렉터리는 php 명령 프로그램(php.exe)이 위치한 디렉터리이므로 상대 디렉터리를 사용하려는 경우 파일의 경로를 먼저 전환해야 합니다. 현재 작업 디렉터리가 작동합니다.
소규모 테스트 프로그램:
$oldpath = getcwd(); // 원래 작업 디렉토리 php.exe가 위치한 디렉토리
$path = 디렉토리이름(__FILE__)
chdir($path); //작업 디렉토리를 현재 파일이 있는 디렉토리로 전환
$fpath = "포럼/readme.txt";
$fp = fopen($fpath, "a b"); // 작업 디렉터리를 전환하지 않으면 파일을 찾을 수 없다는 오류가 보고됩니다
fwrite($fp, "oldpath:".$oldpath."-newpath:".getcwd());
fclose($fp);
?>
crotab을 사용하여 정기적으로 실행해야 하는 프로그램에도 이 문제가 있습니다. 다음 글을 참고하시면 됩니다.
crontab에서 정기적으로 실행해야 하는 php 스크립트를 이용하여 스크립트를 작성했는데 아래와 같은 오류가 발생했습니다
코드는 다음과 같습니다.
/var/www/html/bt/e/BtSys:.:/usr/share/pear:/usr/share/phpPHP 경고: require(../class/connect.php): 스트림을 열지 못했습니다: 해당 파일이 없습니다. 또는 17행의 /var/www/html/bt/e/BtSys/torrents-scrape.php 디렉토리
PHP 치명적인 오류: require(): 필수 '../class/connect.php'를 열지 못했습니다(include_path='/var/www/html/bt/e/BtSys:.:/usr/share/pear:/usr/ share/php') /var/www/html/bt/e/BtSys/torrents-scrape.php 17행
해결 방법 1을 시도하고 다음 코드를 추가하세요
// 포함 경로 설정
$cur_dir=getcwd()
$cur_dir=$basedir = 디렉토리 이름(__FILE__)
$path = ini_get('include_path')
ini_set("include_path", "$cur_dir:$path")
$path = ini_get('include_path')
//에코 $경로
요구(../class/a.php)
요구(../class/b.php)
.............
실행 실패
해결책 2를 시도하고 다음 코드를 추가하세요
다음과 같이 코드를 복사하세요.
$cur_dir = 디렉토리 이름(__FILE__)
chdir($cur_dir)
요구(../class/a.php)
요구(../class/b.php)
성공적으로 실행
요약: 요구시 상대디렉토리라면 crontab에서 php 스크립트 실행시 스크립트가 위치한 디렉토리로 들어가야 합니다