Mac OS X 10.5 시스템에서 PHP 5.3.5를 실행하는 MAMP 설정이 있습니다. 내 MAMP 서버에 있는 PHP 스크립트를 실행하는 crontab을 설치하려고 합니다. /usr/bin/php(버전 5.2.15)에서 PHP 설치를 사용하는 경우에만 crontab을 실행할 수 있습니다. 즉, 이는 사전 설치된 MAC OS X PHP 설치입니다. crontab을 실행할 때 PHP의 MAMP 버전을 어떻게 사용합니까? /usr/bin/php에 새 버전의 PHP를 설치하기에는 유닉스에 대해 충분히 알지 못하지만 이것이 가능합니까?
crontab에서 다음을 사용하여 PHP 스크립트를 실행하고 싶습니다.맘프스PHP 버전입니다. 스크립트가 성공적으로 실행되어 원하는 결과를 얻었기 때문입니다. 그러나 /usr/bin/php에 있는 시스템의 기본 PHP 설치를 사용하여 crontab을 실행하려고 하면 치명적인 PHP 오류가 발생합니다.
--
이것이 유용할 수 있다면 MAMP 버전의 /usr/bin/php에 대한 결과는 다음과 같습니다. 첫 번째 코드 예제는 내 PHP 스크립트를 성공적으로 실행합니다.
$ MAMP_PHP_PATH="/applications/mamp/bin/php5.3/bin/php"
$ $MAMP_PHP_PATH -f /path/to/my/script.php
이제 다음 명령을 실행하면 다음과 같은 일이 발생합니다.
$ # whereis php in this case returns usr/bin/php
$ php -f /path/to/my/script.php
다음과 같은 오류가 발생합니다(내 형식을 포맷하는 중).
Fatal error: require_once():
Failed opening required '/path/to/includes/initialize.php'
(include_path='.:') in /path/to/my/script.php on line 3
마지막으로, 내 crontab 파일은 다음과 같습니다(MAMP를 사용하는 PHP).
15 * * * * /Applications/MAMP/bin/php5.3/bin/php /path/to/my/script.php
MAMP가 없는 PHP:
15 * * * * php /path/to/my/script.php
감사해요
답변1
crontab에서 필요한 환경 변수를 설정합니다. 예를 들어:
PATH=/Applications/MAMP/bin/php5.3/bin:/usr/local/bin:/usr/bin:/bin
MAMP_PHP_PATH=/applications/mamp/bin/php5.3/bin/php
15 * * * * php /path/to/my/script.php
답변2
이것짧은A: 결국 방금 설치했어요최신 버전의 PHP내 시스템에.
이것긴답변(그리고 그 과정에서 겪었던 모든 고통):
crontab이 실행 중일 때 스크립트에서 인스턴스화한 특정 클래스를 SoapClient
찾을 수 없다는 오류가 계속 발생합니다. 내 거자동 로드 기능둘 다 발견되지 않았으므로 OP에 표시된 대로 다음 오류가 발생합니다.
Fatal error: require_once():
Failed opening required '/path/to/includes/initialize.php'
(include_path='.:') in /path/to/my/script.php on line 3
또 다른 유사한 오류가 발생했습니다. 이와 같은 오류가 계속 발생했습니다. 문제는 이전 버전의 PHP에 SOAP 확장이 활성화되어 있지 않다는 것을 알아냈고, 자동 로드 기능이 이를 찾았을 때 설치된 PHP를 확인했습니다.php.ini파일에는 다음 줄이 포함되어 있습니다. include_path
그리고 포함하려는 SOAP 클래스에 대한 디렉터리를 확인합니다. 클래스를 찾을 수 없으면 치명적인 오류가 발생합니다.
노트: ( include_path
php.ini 파일에 있는 Unix 환경의 $PATH 변수와 유사하게 작동합니다).
locate php.ini
명령과 약간의 직관을 사용하여 내 시스템의 php.ini 파일이 /private/etc/php.ini.default
당시 위치에 있다는 것을 발견했습니다.오래된php.ini 파일 – PHP 5.2 버전용 파일입니다. 요점은 비누가 전혀 활성화되지 않았기 때문에 include_path
내 php.ini 파일의 매개변수가 해당 위치를 찾을 수 없다는 것입니다.
그래서 PHP 5.4.4를 다운로드하고 다음 명령을 실행했습니다.
$ ./configure --enable-soap --with-mysql
$ make
$ make install
설치는 에 있었지만 /usr/local/bin
루트 PHP 설치는 에 있었기 /usr/bin
때문에 다음 명령을 실행하여 모든 것을 /usr/local/bin
로 이동하고 /usr/bin
이전 PHP 버전을 덮어썼습니다.
$ sudo cp -Rvf /usr/local/bin/ /usr/bin
나는 다음을 지정합니다.
-R
계층 구조의 모든 파일을 복사하고 /usr/local/bin/
, -v
프로세스가 진행되는 동안 어떤 파일이 이동되었는지 알려주는 출력 메시지를 표시하며, 이를 통해 -f
필요한 경우 해당 파일을 덮어쓸 수 있습니다./usr/bin
이전 버전의 PHP를 새 버전으로 덮어쓰면 새 버전의 위치php.ini파일은 다른 곳에 있습니다. 하지만 어디? 나는 이것을 알아내기 위해 이것을 실행했다:
$ php -i | grep -i "configuration file"
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
적절하게 변경한 후 /private/etc/php.ini.default의 파일을 php 5.4.4 설치와 함께 제공된 새 php.ini 파일로 덮어썼습니다.
비올라. cron 작업이 실행 중이므로 다른 PHP 경로를 지정할 필요가 전혀 없습니다. 건배!