2014-01-27 5 views
2

PHP 응용 프로그램에서 PhantomJS 64 비트를 사용하여 HTML 페이지를 동적으로 캡처하여 사용자에게 전자 메일로 보냅니다. 나는 그것을 전환하면 내가 명령 줄에 위의를 실행하지만, PHP 스크립트 exec을 사용하여 명령을 실행할 때 종료 코드 (11)PHP + PhantomJS 래스터 화

을 전혀 출력 실패하고 반환 할 때

phantomjs rasterize.js "http://..." /path_to_images/image.png 

이 방법은 잘 작동 32 비트 phantomJS 바이너리를 사용하면 명령이 성공하지만 오류가 Reference Error: can't find variable google 인 페이지부터 google JSAPI를로드하지 못합니다. 이는 페이지 콘텐츠가 모두로드되어 이미지로 캡처되지 않기 때문에 문제가됩니다. JSAPI는 HTTPS를 사용하여 포함됩니다. HTTP로 전환하면 참조 오류는 사라졌지만 렌더링 된 이미지는 모두 검은 색으로 나타납니다.

나는 php가 실행중인 사용자와 동일한 사용자로 명령을 테스트했다.

을 요약하면 :

command> phantomjs_64 rasterize.js "http://..." /path_to_images/image.png 

OK

exec('phantomjs_64 rasterize.js "http://..." /path_to_images/image.png'); 

코드 (11)

command> phantomjs rasterize.js "http://..." /path_to_images/image.png 
exec('phantomjs rasterize.js "http://..." /path_to_images/image.png'); 

불완전한 출력이

사람이 왜 기본 phantomJS을 알고 있나요 없음 출력, 종료하지 급한 rize.js 스크립트는 PHP에서 실행될 때 실패하거나 이에 대한 해결 방법이 있습니까?

+1

여기에 오류 코드에 대한 정보가있을 수 있습니다. http://stackoverflow.com/questions/16190926/exec-exit-code-meaning-for-11 –

+0

@BriceFavre 나는 그 질문을 보았는데, 그 코드를 설명합니다. 하지만 그것이 PHP exec와 커맨드 라인에서 왜 발생하는지 말해주지는 않습니다. sudo에 대한 암호 액세스 설정이 필요하지 않은 PHP에서 작동하게하려면 해결 방법이 필요합니다. –

답변

0

업데이트 :이 이 Arlo Carreon이 HostGator 공유 호스팅에서이 작업을 수행하는 방법을 알려줍니다 (내 문제 였음). 명령의 끝 부분에 2>&1을 추가하기 만하면 출력이 리디렉션됩니다. 64 비트 버전은 여전히 ​​작동하지 않지만 32 비트 버전은 수정되었습니다.

PHP 웹 서버를 통해 PHP 스크립트를 요청한 경우에만 발생하는 것으로 나타났습니다. 이 문제를 해결하려면 전자 메일을 받아야하는 사용자를위한 데이터베이스 항목을 만들고 DB의 각 사용자 항목에 대해 PhantomJS를 호출하는 PHP 스크립트를 실행하도록 cron을 설정해야합니다. cron이 가장 작은 간격으로 실행되도록 설정되면 사용자는 전자 메일이 생성되어 즉시 전송 된 것으로 인식합니다.