2012-03-21 8 views
1

도움말을 검색하고 this thread의 모든 것을 시도했지만 여전히이 작업을 수행 할 수 없습니다. shell_exec()를 사용하여 PHP 스크립트에서 sox (Sound eXchange) 명령 줄 유틸리티를 실행하려고합니다. 두 개의 오디오 파일을 연결해야합니다. 둘 다 PHP 스크립트와 동일한 디렉토리에 있습니다 (즉, 아파치에서 액세스 가능).PHP를 통해 sox 명령을 실행할 수 없습니다 shell_exec

  1. 일부 삭스 명령() shell_exec를 사용하여 잘 작동 :

    여기 혼란이다. 예를 들어 오디오 파일을 재생하거나 정보를 검색 할 수 있습니다.

  2. 연결 명령을 출력하여 (정확히 PHP가 셸에 보내는 내용을 알고 있으므로) 셸 창에 복사하여 붙여 넣으면 완벽하게 실행됩니다.
  3. My Apache 사용자 (_www)는 PHP 스크립트가있는 디렉토리와 sox 디렉토리에 대한 완전한 권한을가집니다. 두 디렉토리 모두에서 "chown -R _www : _www"및 "chmod -R 777"을 실행했습니다.
  4. sox 실행 파일과 오디오 파일의 전체 경로를 사용하고 있습니다.

그래서이 쉘에서 작동 :

"/soxpath/sox /filepath/file1.wav /filepath/file2.wav /filepath/combined.wav" 

을하지만이 PHP에서 작동하지 않습니다

shell_exec('/soxpath/sox /filepath/file1.wav /filepath/file2.wav /filepath/combined.wav'); 

사람이에 도움이 되거 수 있습니까? 내가 뭘 놓치고 있니? 감사.

+0

shell_exec()는 무엇을 반환합니까? –

+0

/soxpath/sox ???? .... 전체 경로 또는 샘플입니다. – Baba

+0

shell_exec()는 NULL을 반환합니다. "/ soxpath /"는 실제 전체 경로의 자리 표시 자일뿐입니다. 필자의 경우에는 "/bin/sox-14.4.0/" – brettcito

답변

0

좋아, 내가 마침내 내가 혼란을 해결해야한다고 생각 했어. 문제는 무관심한 것이었다. 예, shell_exec()를 사용하여 PHP에서 sox 명령을 실행할 수 있습니다.

저는 자바 스크립트로 타이밍 문제가 발생했습니다. wami recorder을 사용하여 클라이언트 쪽에서 오디오를 캡처 한 다음 서버에 오디오 파일을 저장했습니다. 그래서 내 PHP 스크립트는 정의상 비동기식 인 Ajax 호출 핸들러 컨텍스트에 있습니다. 그 사실을 일찍이 깨달았어야합니다.

문제는 연결하려는 sox 명령을 실행할 때 파일 저장이 완료되지 않았기 때문에 파일이 아직 존재하지 않아 실패한 것입니다. 내가 동기 호출을 만들었을 때 그것은 작동했다.

관련 문제