PHP는 exec를 통해 linux "less" 명령을 실행합니다 - 바이너리 파일 경고

StackOverflow https://stackoverflow.com//questions/12709486

  •  13-12-2019
  •  | 
  •  

문제

일부 PDF 파일을 TXT로 변환해야 합니다.예를 들어 pdftotext에는 PDF의 테이블에 몇 가지 문제가 있기 때문에 "less" 명령으로 끝납니다.문제는 정보를 표시하는 것보다 exec 함수(또는 shell_exec/system)에서 명령을 실행했을 때 선택한 PDF가 바이너리 파일이고 결과 파일이 PDF 데이터가 포함된 TXT라는 것입니다.하지만 일반적으로 터미널에서 동일한 작업을 수행하면 모든 것이 정상입니다.저도 www_data 사용자로 로그인을 시도하고 이 사용자로 명령어를 실행해 보았지만 역시 문제가 없습니다.

명령:

$ less /var/www/original.pdf > /var/www/new.txt

PHP 코드:

exec("less -f /var/www/original.pdf > /var/www/new.txt 2>&1");

PHP exec의 결과:

"/var/www/original.pdf" may be a binary file.  See it anyway?

exec 명령에 "-f" 옵션이 있는 이유는 "예, 어쨌든 보고 싶습니다."를 위해 "y"를 누를 필요가 없기 때문입니다.

set | grep less 수익률:

LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
            Lossless LZW RLE Zip' -- "$cur" ));
                _apport_parameterless
                _apport_parameterless
                _apport_parameterless
                _apport_parameterless
_apport_parameterless () 
도움이 되었습니까?

해결책

에서 무엇을 읽고,당신의 콘솔을 표시할 수 있는 PDF 파일 less 고 있기 때문에 당신은 입력 전처리 설치 lesspipelessfile.방법 확인 less 사용하는 전처리기를 읽고 환경변수라는 LESSOPEN 는 지점을 lesspipelessfile 스크립트입니다.

가 방법이 있을 수도 있습니다 당신의 웹 서버를 통해 환경 변수 및 쉘 명령을 수도 있습을 복제할 수 있도록 이 동작을 당신의 전화 less 분석 Pdf 파일이 제대로.

내가 제안하는 것을 호출하는 것입 bash 스크립트를 수행합 변환을 위해 당신을 호출하는 대신 less 이 직접 있습니다.는 방법은,당신의 bash 스크립트가 설정할 수 있는 적절한 환경 변수를 실행하여 해당 명령을 변환하는 PDF 파일을 읽을 수 있는 출력된다.

의 예는 다음과 같다:

#!/bin/bash

eval $(lesspipe)
less $1 > $2 2>&1

그런 다음,PHP,호출하는 스크립트는 다음과 같다:

exec("/path/to/your/script/script.sh /var/www/original.pdf /var/www/new.txt");

그것은 작동하지 않는 경우에,변경하십시오 eval $(lesspipe) 하기 eval $(lessfile).

다른 팁

우선 텍스트 스트림을 읽는 대화 형 프로그램입니다.이 문맥에서 대신 cat를 사용해야합니다.PDF는 텍스트 기반과 달리 PDF가 바이너리 형식 이므로이 또는 코스는 작동하지 않습니다.

PDF를 pdftotext와 같은 텍스트 변환기로 사용하지 않으십니까?

PHP 코드는 어떻게 실행되었나요?명령줄에서 다음을 통해 php file.php 또는 브라우저로 접속할 때 웹 서버에 의해 http://servername/something/file.php?

한 가지 추측은 less 명령줄에서 수행할 때 실행하는 것은 동일하지 않습니다. less PHP 코드가 실행될 때와 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top