posix_mkfifo로 만든 fifo (명명 된 파이프) 파일을 사용하여 "include"문을 사용하는 방법을 찾고있었습니다. 나의 기대가 높았던 것에 따라 나는 그것이 결코 일어나지 않을 것이다라고 확신하고 있었던 행동을 기다리고있는, 페이지를 막기 위해 매우 우울하게하게되었다.fifo (명명 된 파이프) 파일에서 지시문을 include
그래서 ... 논리는 "fopen"-family 함수를 "include"하는 것으로 확실하게 사용되며 fifos는이 방법으로 열 수 있습니다. 나의 유일한 일은 다음을 작성하는 것입니다. 그것은, 그것이 포함될 때까지 어쩌면 자원을 보존하고, 파일을 포함하고, 처리기를 닫고, 파일을 삭제합니다. 그러나 물론 그것은 그렇게 아무것도 아니 었습니다. 나는 include가 파일을 블로킹 방식으로 열고 이것이이 문제가 내 문제의 원인이라고 생각한다. C에서 FIFO를 사용하여 작업 한 결과, 비 차단 오픈 메소드에서 FIFO의 정보가 독자가 읽는 것을 결정할 때까지 보존된다는 것을 알았습니다. 나는 똑같은 행동을 바라고 있었다.
독자가 계속할 수 있도록 동일한 FIFO에 쓰기 위해 다른 페이지를 열려고 시도했지만 실패 할 수도 있습니다. 또한 페이지가 더 이상 응답하지 않았을뿐만 아니라 사용자가 중단하도록 대답하지 못했습니다. 사실 session_start()가 몇 분 동안 두 개의 프로세스에서 사용할 수 없다고 말하면서 몇 분 동안 세션을 차단했기 때문입니다. 한 번 (나는 여기에 오류 메시지에 대해 잘못되었을 수도 있습니다. 나는 잘 기억할 수 있습니다. 그리고 테스트 파일을 삭제했습니다.)
이 문제를 해결할 수있는 방법이 있다면 필자의 질문은 : fifo를 사용하는 것입니다.
마지막으로 이 질문에 대한 답변을 드리겠습니다. 나는이 시스템을 실제 코드와 필요에 따라 동적으로 수정하려는 목적으로 내 시스템을 처리한다고 말합니다. 완전히 뒤집을 수 있습니다. 그리고 그것은 원래의 파일을 읽고, 코드를 확인하고, 생각할 때 그것을 변경 한 다음, 새로운 "루트"폴더에서 파일에 쓰고, 폴더와 파일 계층 구조를 유지 한 다음 파일을 "포함"해야합니다 . 현재 나는 fifos의 사용을 실제 파일로 바꾸었지만 많은 코드를 필터링해야합니다. 그리고 eval은 함수에서 과용 되긴하지만 현재 디렉토리와 스크립트 이름 또는 실제 파일에 특정한 것을 유지하지 못하기 때문에 해결책이 아닙니다. 게다가 많은 것들, 특히 상대 경로를 사용하면 매우 유용합니다. PHP 구문의 이상한 사용. 그래서 나는 아직도 파일에 글을 쓰고있다.
시스템이 끔찍한 시간 소비자와 나쁜 자원 관리자이기 때문에, 나의 원래 생각은 더 가볍고, 메모리에 보관되고, 휘발성이며, 실제로 IPC의 유일한 목적으로 만들어진 FIFO로 작성하는 것이 었습니다. 코멘트에서 제안한 것처럼 관련하여
, 폴
이것은 해결책의 일부로 보인다 : http://stackoverflow.com/questions/580013/how-do-i-perform-a-non-blocking-fopen-on-a-named-pipe-mkfifo (오른쪽의 관련 게시물도 확인하십시오.) – Quasdunk
아마도 스트림 래퍼를 작성한 다음 해당 래퍼를 통해 파일을 포함 할 수 있습니까? 그런 다음 래퍼 코드에서 코드를 변경합니다. 참조 : http://www.php.net/manual/en/function.stream-wrapper-register.php and http://www.php.net/manual/en/class.streamwrapper.php – hakre
@ include 문이 fopen을 처리하는 방식을 제어 할 수 없기 때문에 Quasdunk의 솔루션이 작동하지 않습니다. – khael