2011-11-19 4 views
0

SQL 쿼리를 포함하는 "save.php"라는 PHP 스크립트가 있으며이 스크립트는 브라우저가 아닌 백그라운드에서 실행해야합니다. 이 스크립트를 호출하기 위해 "trigger.php"라는 파일에서 exec() 명령을 사용하고 있습니다.cronjobs를 사용하여 백그라운드에서 MySQL 쿼리를 포함하는 PHP 스크립트 실행

save.phpexec() 일 때 정상적으로 실행되지만, mysql 쿼리를 사용할 때 질의만으로는 쿼리가 작동하지 않고 나머지 스크립트는 정상적으로 실행됩니다. 내가 생각한 한 mysql_connect를 실행할 수 없다.

내 필요가 다르기 때문에 나는 cronjob을 사용할 수 없다. 나는 스크립트를 트리거 할 필요가 있으며 연속적으로 실행되어야하지만 간격은 없다.

그렇다면 배경에서 실행해야하는 파일에 MySqL 서버 연결을 만들 수있는 방법이 있습니까?

답변

1

나는 그 문제를 알아낼 수 있었다.

저는 PHP와 MySQL 용 MAMP를 실행하고 있습니다. MySQL의 소켓은 MAMP의 MySQL 디렉토리에 생성되지만 exec()을 사용하여 PHP 스크립트를 호출하면 보통 디렉토리의 MySQL 소켓을 확인하는 쉘/명령 프롬프트 (/var/mysql/mysql.sock)에서 스크립트가 실행됩니다. 그래서 다음과 같은 오류가 발생합니다.

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) 

그래서, /var에서 디렉토리를 생성하고 지금은 아주 잘

sudo mkdir /var/mysql 

sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock 

작품을 사용하여 실제 소켓에 심볼릭 링크를 추가했다.

의견을 보내 주셔서 감사합니다.

0

나는 네가 무엇을 요구하고 있는지 (나는 생각의 기차를 잃어 버렸음) 정확히 모르겠다. 그러나 만일 당신이 당신의 호스트가 당신을 허락한다면 영원히 또는 적어도 당신의 스크립트를 실행하려고한다면?) cronjob을 사용하지 않고 스크립트 맨 위에 set_time_limit ($ seconds) 함수를 사용하여 호스트에서 허용하는 최대 실행 시간을 설정할 수 있습니다. 스크립트가 끝나면 잠자기 ($ 초) 한 다음 exec()를 호출하여 다시 실행합니다. 실행 시간을 고려해야합니다. 그렇지 않으면 트리거가 누락됩니다.

SQL 연결이 작동하지 않는 경우에는 그 곳에서 무슨 일이 일어나는지 알아야합니다. 일부 코드를 게시하면 디버그를 도와 드릴 수 있습니다. 영속 연결을위한 mysql_connect와 mysql_pconnect는 데이터베이스와 연결을 설정하기 위해 사용할 명령이다.

+0

방금 ​​mysql_connect() 명령을 사용하여 오류가 발생했습니다. 오류 번호는 2002로 표시됩니다. 스크립트가 백그라운드에서 실행 중이므로 브라우저가 아닌 다른 소켓을 사용하기 때문에 발생합니다. .. !! 나는 그것을 올바르게하고있다. ..? – aBadAssCowboy

0

PHP 스크립트는 데몬으로 실행되지 않으므로 (많은 시간 제한이 시작일 뿐이므로) 런처가 필요합니다.

pcntl_fork()은 지원하는 시스템에있는 경우 exec()의 간단한 대안입니다.

exec()의 문제점은 실행중인 PHP 인터프리터가 웹 서버에서 실행중인 PHP 인터프리터와 다른 환경을 가지고 있다는 것입니다.

두 환경에서 phpinfo()을 실행하여 실제 차이점을 확인하십시오.

비록 내가 "서버에 연결할 수 없음"오류를 일으키는 지 알 수는 없지만 고백해야합니다. 전체 오류 메시지를 게시하십시오. 로컬 방화벽이 php.exe를 차단할 수 있습니까? 다른 보안 조치, 아마도? 아니면 MySQL 서버의 호스트 이름에 대해 잘못된 정보를 얻을 수 있습니까?

exec'ed 스크립트를 명령 줄에서 실행하십시오. 그러면 웹 서버가하는 일에 가깝게 될 것입니다.

+0

oki .. 터미널에서 실행할 때 다음과 같은 메시지가 표시됩니다. 오류 : mysql_connect() : [2002] 해당 파일이나 디렉토리가 없습니다 (unix를 통해 연결을 시도하고 있습니다 : ///var/mysql/mysql.sock)/응용 프로그램/MAMP/빈/mamp/테스트/이름없는 사이트 4/test/db_connect.php 온라인 5 소켓이 내 MySQL 서버에서 허용되지 않을 수 있습니다 .. 내가 어떻게 만들 수 있습니까 ..? Mac OS X Lion 및 MAMP를 사용 중입니까 – aBadAssCowboy

+0

도메인 소켓 대신 TCP/IP를 통해 연결해보십시오. – aib

관련 문제