2009-11-17 3 views
0

나는 system()을 사용하여 .bat 파일을 호출하는 PHP 스크립트를 가지고있다. 출력이 화면에 쓰여지고이 출력을 파싱하여 일부 값을 파생시킵니다. Windows 2003 IIS 서버에서 실행 중입니다. PHP v5.2.0PHP 시스템() 명령이 내 스크립트로 출력을 반환하지 않는 이유는 무엇입니까?

특히이 스크립트를 사용하여 Amazon EC2 인스턴스를 실행하고 IP 주소를 할당합니다. 지금까지는 큰 도움이되었지만 최근에는 문제가 시작되었습니다. 내가 호출하는 다른 배치 파일을 실행할 수있는이 instace ID가이 인스턴스와 IP 주소를 연결 일단

여기에 코드

$resultBatTemp = system("cmd /C C:\Inetpub\ec2\my_batch_file_to_launch_instance.bat"); 
$resultBat = (string)$resultBatTemp; 
$instanceId = substr($resultBat, 9, 10); 

...

입니다. 인스턴스가 시작되지만 화면에 출력이 나타나지 않는 것으로 보입니다.

이 모든 것이 작동을 멈췄으므로 페이지가 멈추고 결코 새로 고칩니다. 또한 사파리 또는 모질라를 완전히 종료해야합니다. 그렇지 않으면 웹 사이트의 모든 페이지가로드되지 않습니다. 브라우저를 다시 시작해야만 웹 사이트를 다시 볼 수 있습니다. 나는이 스크립트를 호스팅하고 PHP 오류 로그를 확인한 웹 서버에 연결했지만 아무것도 표시하지 않습니다. 나는 DOS 프롬프트를 열었고 그런 식으로 박쥐 파일에서 코드를 입력하고 아마존에 연결하여 인스턴스를 정상적으로 시작합니다. 필자는이 코드 조각을 분리하고 시스템 명령을 제거하고 스크립트의 나머지 부분은 잘 실행되므로 보류는 박쥐 파일의 결과를 출력하는 것처럼 보입니다.

최근이 사이트에서이 스크립트가이 도메인에서 실행되도록 사이트의 새 도메인 이름을 구입했습니다. 이것이 문제의 원인일까요?

감사합니다.

----------------------------------------- -------최신 정보------------------------------------------ -----

이 도움이 되었으면 좋겠다. 나는 틀린 것을 발견했지만, .bat 파일을 호출 한 간단한 시스템 명령과 새로운 PHP 파일을 만들었고, 존재하지 않는 .bat 파일은 오류는 있지만 아무것도 없습니다. 그래서 IIS를 다시 시작했는데 문제가 해결되었습니다. 그다지 틀린 것은 알지 못했지만 그 트릭을했습니다.

답변

1

먼저 system() 호출이 반환하는 것을 확인하십시오. documentation에 따르면 오류가 발생하면 FALSE을 반환합니다. 또한 질문에 my_batch_file_to_launch_instance.bat을 포함하면 문제를 해결하는 데 도움이 될 수 있습니다.

+0

해결책을 찾았지만 도움을 주셔서 감사합니다. 업데이트 된 질문을 참조하십시오. – undefined

+0

그래, 웹 서버 (또는 그 문제에 대한)를 다시 시작하면 이상한 문제를 일으킬 수 있습니다. 거기에 갔다 ;-) –

1

passthru 기능 또한

모든 명령은 사용자가 임의의 명령을 실행하여 시스템을 조작 할 수 없도록하는 안전 사용 escapeshellarg() 나 escapeshellcmd()되어 있는지 확인을 사용해보십시오.

+0

고마워, 나는 passthru하지만 아무것도 헛소리. 탈출구에 대한 조언 주셔서 감사합니다 .. – undefined

관련 문제