2014-10-24 3 views
-1

저는 Mac OS X 10 Yosemite에 있습니다. 그래서 다른 사람들이 같은 문제를 경험하는지 궁금합니다. 이 코드는 문제에 대한 통찰력을 제공합니다. index.php 파일을 다음과 같이 작성하십시오.Apache + PHP Mac OS X 10.0 - shell_exec()에서 diskutil 사용을 차단합니까?

<?php 
$exec = "diskutil list"; 
echo $exec; 
$output = shell_exec($exec); 
echo $output; 

내장 Apache + PHP 버전을 사용하는 경우입니다. XAMPP 또는 Nightrain을 사용할 때 위의 명령을 실행해도 문제가 없습니다. 그래서 아파치 나 PHP 버전의 OSX가 특정 shell_exec 명령을 차단하는지 궁금합니다. 지금까지

내 경험 : 나는 명령 줄에서 다음 명령을 입력하면

가 :

diskutil info /dev/disk1s1 

을 나는 디스크 정보의 전체 개요를 얻을. 다른 모든 - : 아파치 내 사용자 (직원 사용자)와 같은 소유권을 사용하도록 구성되어

Could not find disk: /dev/disk1s1

: 나는 OSX에 PHP에서 같은 명령을 실행 shell_exec()를 사용할 때

는하지만 오류가 발생 명령이 작동합니다.

또한 내가 명령 줄에서 다음 명령을 사용할 때 :

diskutil list 

나는 전체 개요를 얻을. 하지만 다시 shell_exec() 아무 것도 반환되지 않으며, 아파치 오류 로그에 나는 참조 :

Could not start up a DiskManagement session

내가 봤 제로 결과를 발견했다.

+0

PHP-Nightrain을 사용하여 명령을 실행할 때 위에서 설명한 것과 동일한 문제가 발생하지 않습니다. – Taapo

답변

0

먼저 명령 줄 명령이 있지만 PHP 스크립트의 명령은 다른 것입니다. 의미 명령 줄의 예는 다음과 같습니다

diskutil info /dev/disk1s1 

하지만 당신의 PHP 스크립트의 명령은 디스크 같은 /dev/disk1s1을 잎 :

diskutil list 

당신이 작동하지 않습니다 무엇을하고 있는지 그래서 불분명. 또한 PHP 스크립트에서 자주 호출되는 바이너리의 전체 경로를 설정해야합니다. 따라서이 줄 대신 :

$exec = "diskutil info"; 

이렇게 변경하십시오. 내가 /dev/disk1s1을 추가 참고 이렇게 명령에 따라 행동 할 수있는 디스크가 있습니다

$exec = "/usr/sbin/diskutil info /dev/disk1s1"; 

을 그리고 내 맥 OS X 10.9.5 설치에 diskutil의 위치입니다.이 같은 which을 사용, 그것은 동일한 경로에있을 것입니다 확인하십시오 :

이 같은 반환
which diskutil 

: 나는 명령 줄에서 실행할 때, 내가 뭐하는 거지 그리고

/usr/sbin/diskutil 

을 그것은 이것을 좋아한다. 테스트 파일이 이름이 shell_exec_test.php 인 것으로 가정하면

php ./shell_exec_test.php 
+0

나는 그것을 시도했다 - 아무 소용이 없다. 같은 문제가 발생합니다. 또한 고정 명령 (나는 또한 질문에 수정). – Taapo

+0

@Taapo 최신 편집물을 읽으십시오. 명령 줄에서 제공하는 예제와 스크립트 자체의 예제를 살펴보십시오. PHP 스크립트에서'/ dev/disk1s1'을 생략했습니다. – JakeGould

+0

죄송합니다. "diskinfo list"를 (를) 나열하기 전에 질문을 편집하고 있었지만 다른 사람이 질문을 편집 (admin?)했기 때문에 질문이 원래의 "diskutil info" – Taapo