2010-03-09 6 views
2

병렬 포트 프로그래밍을 통해 하드웨어와 상호 작용하는 프로그램이 있습니다. 나는 그것을 컴파일하고 객체 파일을 사용하여 하드웨어와 상호 작용 (단순한 주도)했다. 내가 쉘에서 직접 실행하면 LED가 빛나는 목적을 수행하지만, php에서 shell_exec()를 사용하여 실행하면 명령이 실행되지만 하드웨어와 상호 작용할 수 없습니다. 나는 완전히 혼란 스럽다.PHP를 통해 병렬 포트 제어 프로그램 실행

+0

'shell_exec'은 한 번에 하나의 명령 만 실행한다는 것을 알고 계십니까? 어쩌면 혼란 스러울 지 모르겠습니다. 기능이 완료된 후 어떻게 하드웨어와 계속 상호 작용할 것으로 예상합니까? – Anthony

+0

@Anthony : 명령이 "LED 켜기"인 경우 더 이상 상호 작용이 필요하지 않을 수 있습니다. – Piskvor

+0

초기 명령 이상으로 장치를 제어 할 때와 같이 앞뒤로 의미가있는 "상호 작용"을 읽습니다. 그러나 나는 전에 잘못 읽었다. 스크립트가 쉘 명령을 실행하지 않거나 원하는 명령이 아니라면 CGI가 끝납니다. 그럼 내 사악한 생각으로 넘어 가라. – Anthony

답변

0

이것은 꺼져있을 수도 있지만 하드웨어 인터페이싱을하기 위해 PHP를 사용한다면, 거기에 AJAX를 던질 것입니다.

기본적으로 Ajax 기능을 통해 서버에 자바 스크립트 패스 키 스트로크가 있습니다. 매번 PHP는 javascript를 통해 새로운 요청을받습니다. 미리 작성된 shell_exec() 명령 세트의 키 입력을 조회하고 해당 키 입력에 대해 실행합니다.

자바 스크립트가 키 누름을 수신 대기하고 쉘 명령 배열이 가능한 각 키 스트로크 (또는 환상적인 경우 획의 조합)와 직접적으로 관련되게하십시오.

나는 점과 대시와 같은 단순한 것으로 시작 하겠지만, 정말 멋진 것들을 빠르게 얻을 수있을 것입니다.

1

PHP 스크립트가 다른 사용자 (예 : Apache 모듈로 실행하는 경우 사용자 : apache 일 수 있음)로 실행되는 경우 HW에 대한 액세스 권한이 사용자 자신과 동일하지 않을 수 있습니다. 병렬 포트와 상호 작용하는 데 필요한 권한을 확인하십시오.

+0

shell_exec가 전혀 실행되지 않으면 CGI 모드에서 스크립트를 실행해야합니다. 나는 그가 명령을 해고했다고 말하는 줄 알았지 만, 그 후에는 아무런 상호 작용을하지 않았다. – Anthony

+0

그는 "명령은 실행되지만 하드웨어와 상호 작용할 수 없습니다"라고 말하면서 나도 권한 문제와 같은 것처럼 들린다. 스크립트는 아마 아파치 사용자로 실행될 것이고, 아파치는 필요한 권한을 갖지 않을 것이다. 따라서 그는 ie를 사용하여 래퍼 스크립트를 만들어야합니다. setuid 비트 세트 또는 HW와 상호 작용하고 PHP에서 호출하는 데몬, 또는 apache 사용자 (또는 PHP 스크립트가 실행되는 사용자)에게 적절한 사용 권한을 부여합니다./var/log/messages에서 오류 메시지를 확인하면 스크립트가 실패한 실제 이유를 찾을 수 있습니다. – wimvds

0

병렬 포트에 연결된 호스트에 소켓 서버를 설치하고 PHP가 말할 수있는 도메인 소켓을 제공했습니다. RESTful 프로토콜을 통한 I/O 스트리밍을 다루는 유일한 방법입니다.

Anthony mentioned으로, 약간의 AJAX는 사용자 환경이 제공되는 한 다소 원활하게 만들 것입니다.

간단한 PHP 소켓을 사용하여 연결, 전송, 응답, 표시 및 세척/헹굼/반복 요청을 할 수 있습니다. shell_exec()를 사용하는 것보다 훨씬 쉽습니다.