2010-12-14 3 views
1

PHP에서 호출 된 Python에서 Whoosh 모듈을 사용하여 매우 기본적인 검색 엔진을 설정하려고했습니다. 필자가 필요한 몇 가지 추가 기능을 위해 모듈을 업그레이드 할 때까지 작동했습니다. 어떤 시점에서 이상한 버그가 나타났습니다. "searcher = ixtemp.searcher()"행 뒤의 모든 print 문은 PHP 스크립트에 의해 수신되지 않습니다.PHP와 Python간에 데이터를 전송하는 데 문제가 있습니다.

파이썬 검색 스크립트는 PHP에서 호출되고 첫 번째 결과는 다음 명령으로 표시됩니다

파이썬 스크립트
exec("python print.py",$output,$ret_code); 

echo $output[0]; 

- 이제 PHP를 실행

from whoosh.index import open_dir 

ixtemp = open_dir("index") 

searcher = ixtemp.searcher() 

results = searcher.find("content", u""+"test") 

for k in results: 
    print k['filename'] 

다음과 같은 오류를 제공합니다 -

알림 : 정의되지 않은 오프셋 : 0 in /opt/lampp/htdocs/new/search.php on line 17

python 스크립트는 자체적으로 실행할 때 작동합니다. 약간의 조사가 있은 후에 "searcher = ixtemp.searcher()"줄 앞의 모든 인쇄 문은 PHP에서 읽을 수 있지만 PHP 스크립트에서는 그 이후의 모든 내용을 읽을 수없는 것으로 보입니다. 또한 popen() 및 proc_open 함수도 시도했지만 동일한 문제가 있습니다.

문제가 무엇인지 또는 어떻게 해결할 수 있는지에 대한 아이디어가 있습니까?

감사합니다.

답변

0

나는 아이디어가 없어졌고 777 디렉토리를 chmod하기로 결정했다. 어쨌든 searcher() 함수 위에 항상 데이터를 보낼 수 있기 때문에 왜 그랬는지 확신 할 수 없습니다.

검색을 시작하는 동안 보호 된 색인 파일을 수정하려고 시도했을 가능성이 있습니까?

하지만 인터프리터에서 항상 작동했기 때문에 그 자체로 문제가 될 수는 없습니다.

PHP 파일이어야합니다. 간접적으로 색인 파일을 수정하는에 대한 보호가 된 것 같습니다.

0

두 가지. 스크립트가 완료되고 있습니까? searcher() 호출에 매달려있을 수 있습니다. 둘째, searcher()가 stdout을 리디렉션 할 수 있다고 가정합니다.

내 생각에 스크립트가 완료되지 않았거나 시간이 초과되었거나 뭔가 발생했습니다.

수정이 코드는 현재 작업 디렉토리에 따라 달라집니다. 아래에서 웹 서버가 설정하는 것과 동일한 인터프리터에서 정상적으로 작동한다고 언급합니다.

+0

안녕하세요, 스크립트는 실행하는 데 걸리는 시간이 짧지 않고 인터프리터에서 완벽하게 작동합니다. 또한 searcher = ixtemp.searcher()가 작동하기 전에 명령문을 인쇄하십시오. – usertest

+0

stdout이 리다이렉션되었는지 어떻게 알 수 있습니까? 어떻게 그 happedning을 멈출 수 있을까요? 고마워 – usertest

+0

안녕하세요, 예. 두 스크립트가 같은 위치에 있으며 데이터가 "searcher = ixtemp.searcher()"이후가 아닌 한 그 둘 사이를 이동하므로 작업 디렉토리에 문제가 될 수 없습니다. – usertest

0

스크립트가 전혀 실행되지 않습니까?

$ return_code를 확인하십시오.

가능한 경우 print.py 스크립트 나 심지어 python.exe를 찾을 수 없습니다.

+0

안녕하세요, 그렇습니다. 그리고 나는 print 서술문이 데이터를 전송한다고 말했지만 "searcher = ixtemp.searcher()"전에만 사용했습니다. – usertest

+0

아! 이 경우 아마도 "색인"디렉토리를 찾는 데 문제가 있습니다! –

+0

PHP 파일은 인덱스 디렉토리 만 파이썬 스크립트가 알고 있어야하고 처리 된 결과를 출력해야하는지 알 필요가 없기 때문에 그렇게 생각할 필요가 없습니다. 그리고 파이썬은 인터프리터를 잘 동작시킵니다. 게다가, 위에서 언급 한 라인 이후 출력을 보낼 수없는 이유는 설명하지 못합니다. – usertest

관련 문제