2011-11-02 2 views
0

워드 문서의 내용을 서버에 업로드하고 텍스트를 추출하여 데이터베이스에 삽입하는 코드를 만듭니다.PHP : 앤티 워드 및 업로드 파일

exec("PATH=$PATH:/home1/myserver/bin && antiword " . 
    $_FILES['file']['tmp_name'], $mycontent); 

일부 기괴한 이유로 인해 $ mycontent는 항상 빈 배열입니다. Google은 그다지 도움이되지 못했습니다. 아무도 내가 뭘 잘못하고 있는지 알아?

+0

'$ PATH' (아마도 혼자 정의하지 않은 경우)를 피하십시오. 'exec ("PATH = \ $ PATH ...'또는 작은 따옴표 사용 – mAu

+0

) 잊어 버려요 :) –

답변

1

exec 견적의 $ PATH가 BASH $ PATH가 아닌 PHP $ PATH가 무엇이든간에 변환하려고 시도 중입니다.

$ (\$)를 이스케이프하거나 작은 따옴표를 사용할 수 있습니다.

일반적으로 좀 더 안전하게하려면 escapeshellarg() 또는 escapeshellcmd()을 사용해야합니다. 이 상황을 막았을 것입니다. 또한 사용자 입력을 사용하여 exec()으로 전화를 걸면 사용자가 명령을 회피하고 자신의 악의적 인 쉘 명령을 호출하는 것을 방지 할 수 있습니다.

편집
사실, 당신이 어떤 이유로 당신의 이름/경로에 문제가있을 수 있습니다. 그냥 간단히 시작하십시오.

exec('/home1/myserver/bin/antiword ' . 
      escapeshellarg($_FILES['file']['tmp_name']), $mycontent); 

되지 않은 경우,이 무엇인지 : 당신은 테스트하는 파일을 생성하고, $ _FILES에서 파일을 대체해야합니다

echo '/home1/myserver/bin/antiword ' . 
      escapeshellarg($_FILES['file']['tmp_name']); 

이 작업을 수행합니다. 하지만 명령 행에서 직접 작동합니까?

+0

사용 된 작은 따옴표는 여전히 운이 좋지 않습니다. ( –

+0

경로 부분을 모두 지우고 그냥 당신이 필요로하는 것이 무엇이든 그것을위한 완전한 경로를 넣으십시오. 당신이 앤티 그램을 위해 그것을 사용하고 있다면, 다음을 실행하십시오 : exec ('/ home1/myserver/bin/antiword') escapeshellarg ($ _ FILES [ 'file'] [ 'tmp_name ']), $ mycontent);' – evan