2011-03-01 1 views
2

PHP를 통해 recuchils에 액세스 할 수있는 수업을 작성하고 있습니다.exec 명령은 PHP가 아닌 터미널에서 작동합니다.

필자는 ../database/의 books.rec라는 파일과 Recutils.php 클래스를 실행하는 스크립트를 가지고 있습니다.

내 수업은 올바른 매개 변수로 시스템 응용 프로그램을 실행하기 만하면됩니다.

하지만 recins의 PHP 기능을 사용하려고하면 명령이 작동하지 않습니다. PHP와

recins -f Title -v "Moi" -f Author -v "Moche" -f Location -v "loaned" -t Books ../database/books.rec

:

내 스크립트에 의해 실행되는 명령입니다 아무것도 레코드가 삽입되지 않습니다 (오류 메시지에 너무).
터미널에서 : 확인을 누르면 명령이 잘 수행되고 레코드가 삽입됩니다.

나는 또한 recsel를 사용하여 작업을 선택 할 수있는 방법이 있고 그것이 정확히 같은 파일을 사용합니다, 아주 잘 작동 (너무 exec에서 실행).

다른 사람이 같은 파일을 사용하면 명령이 작동하지 않는 이유를 설명 할 수 있습니까?

감사

PS : 추가 정보 : http://www.gnu.org/software/recutils/

+0

은 www가 데이터 권한 명령 행 유틸리티를 실행해야합니까 행운? –

+0

'exec' 두 번째 매개 변수를 사용하여 출력을 얻으려고 했습니까?(exec는 마지막 줄만 반환합니다). '../ database/books.rec'는 PHP 스크립트와 관련이 있습니다. – soju

+0

@ tandu3 : 예. www-data에 허가가 있습니다. 왜냐하면 저는'recsel'과 같은 스크립트에서 똑같은 일을하고 작동하기 때문입니다. 아주. @soju : 예 두 번째 매개 변수를 사용하고 그것은 비어 있습니다. books.rec은 동일한 스크립트에서 완벽하게 사용할 수 있으므로 액세스 할 수 있습니다. –

답변

1

명령 줄과 PHP 스크립트에서 동일한 사용자로 명령을 실행하고 있는지 다시 한 번 확인합니다. 그것은 문제 일 수 있습니다. exec('whoami')

당신은 당신이 PHP 스크립트를 시작한 스크립트를 가지고 있다고 말합니다.

더 간단한 exec 명령을 실행하여 먼저 작동하는지 확인하십시오.

다른 일들이 시도 :

  1. 은 표준 에러 출력 exec('ls /tmp 2>&1', $out);을 확인하십시오이 그래서 당신은 모두를 표준 얻을에 표준 오류 리디렉션합니다.
  2. php의 shell_exec()을 사용하면 명령 줄에서 실행할 때와 같이 (예 : bash) 셸을 호출 할 수 있습니다. shell_exec('ls /tmp 2>&1 >> /tmp/log')은 모든 출력을 로그 파일에 저장해야합니다.
  3. 나는 이것이 당신을 도울 것이라고 생각하지 않지만 다른 모든 것이 실패 할 경우 시도해 보는 것이고, 백그라운드 프로세스로 설정하고 완료되었는지 확인하는 것입니다. exec('nohup php process.php > process.out 2> process.err < /dev/null &'). &은 명령이 백그라운드에서 실행되도록 설정하고 스크립트가 계속되도록합니다.

+0

정말 고마워요! shell_exec ('ls/tmp 2> & 1 >>/tmp/log'')를 사용하여 권한이 거부 된 것을 볼 수있었습니다 (다른 방법으로는 여전히 반환 문자열이 없습니다). 내 프로젝트에서 오른쪽으로 변경하는 것을 잊어 버렸습니다 (프로젝트는 ~/www 및/var/www가 아님). 내 파일을 읽을 수 있었는지, 내가 쓸 수 없다는 것을 이해하지 못했습니다. In은 문제가되지 않았습니다. 그러나 쓰기 권리에서. –

0

는 PHP에 대한 recins 명령에 액세스 할 수 있습니까? books.rec 경로가 맞습니까? 절대 경로로 시도하십시오.

+0

예'recsel'은 (recsel'을 실행할 수 있다면 같은 방법으로 같은 시간에 설치되는) recins를 실행할 수 있다고 가정하면 my $ PATH ('recsel')에 있습니다. 그리고 books.rec의 네 경로는 정확합니다 (나는 같은 스크립트에서 완벽하게 사용합니다). –