2013-02-04 5 views
0

나는 다음과 같이 약간의 애플 스크립트가 :PHP exec 및 OSASCRIPT?

beep 
delay 2 
tell application "Finder" to activate 

그것은 단지 전경에 "찾기"창을 가지고 다음 이초 기다렸다가, 소리를한다.

명령 줄에서 실행할 때 제대로 작동합니다.

그러면 PHP가 exec() PHP 함수를 사용하여 해당 스크립트를 호출하도록합니다.

<? 
$cmd = "/usr/bin/osascript \"myscript.scpt\""; 
exec($cmd); 
?> 

여전히 정상적으로 작동합니다.

하지만 브라우저에서 동일한 PHP 스크립트를 호출해도 작동하지 않습니다! PHP가 시작되면 삐 소리가 들리므로 Apple 스크립트가 시작되지만 마지막 줄은 실행되지 않습니다. (ENV와 검사로 | 종류) 변수가 제대로 설정되어

$cmd = "HOME='/Users/mikael' && … && /usr/bin/osascript \"myscript.scpt\""; 

하지만 여전히 :

나는 나는 그들이 터미널에서 모든 동일한 방식이었다 확인했다 그래서 환경 변수 일이 될 것이라고 생각 브라우저에 표시되는 PHP 스크립트 내부에서 내 사과 스크립트를 실행하고 표준 MacOS 아파치 항목을 사용하는 것은 행운이 없습니다.

아이디어가 있으십니까?

답변

1

osascript이 웹 서버를 통해 PHP에서 실행되면 로그인 컨텍스트로 실행되지 않으므로 Finder와 같이 데스크톱에서 실행되는 응용 프로그램으로 Apple 이벤트를 보낼 수 없습니다. SSH를 통해 osascript을 사용하려고해도 비슷한 문제가 발생한다는 것을 알 수 있습니다.

로그인 컨텍스트는 OS X의 복잡하고 문서화가 잘되어 있지 않은 영역입니다. 자세한 내용을 보려면 Amit Singh의 Mac OS X Internals: A Systems Approach 사본을 준비하십시오.

그러나 대답이 일반적으로 매우 간단합니다. 웹 서버에서 올바르게 작동하는 osascript에 의존하지 마십시오.

+0

감사합니다. MacOS에 로그인 컨텍스트라는 것이 있었는지 알지 못했지만이를 확인합니다. 아래에서 언급 한 해결 방법에 대해 어떻게 생각하십니까? – MikaelW

+0

아주 좋은 해결 방법은 아닙니다. 기본적으로 MAMP 실행 프로그램은 로그인 컨텍스트로 실행된다는 사실에 달려 있습니다. 따라서 생산 단계에서 안정적으로 일하는 것이 어려울 것입니다. – duskwuff

0

좋아, 브라우저에서 PHP에서 Apple 스크립트를 호출 할 수있는 방법을 발견했을 수도 있습니다.

이 완전히 만족하지 않습니다하지만 내가 할거야 무엇 :

을 그래서 기본적으로 대신 기본 맥 OS 아파치 서버를 사용하여, 나는 또한 MySQL은 웹 서버 &를 설정이 하나를 사용 http://www.mamp.info/en/index.html

나는 MAMP를 언급하지만 다른 것이있을 수 있습니다.

내 Apple 스크립트가 마침내 해당 솔루션을 사용하여 완전히 실행됩니다.

0

나는 동일한 문제가 있었고 아파치가 사용자 www로 실행된다는 것을 깨달았다. etc/apache2/httpd.conf를 편집하여이를 변경할 수 있습니다. 사용자를 사용자의 짧은 이름으로 변경하고 직원을 그룹으로 지정하십시오.