libreoffice-headless를 설치했으며 일반 사용자로 셸에 로그온 할 때 문서를 변환 할 수 있습니다.
[root@desktop ~]# yum install libreoffice-headless
[root@desktop ~]# yum install libreoffice-writer
[root@desktop ~]# su NotionCommotion
sh-4.1$ /usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc
convert /tmp/ayb/document_34.doc -> /tmp/ayb/document_34.pdf using writer_pdf_Export
이제 동일한 작업을 수행하려고하지만 PHP를 사용하므로 사용자 아파치로 다음을 수행하면 파일이 변환되지 않습니다.
<?php
shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>
문제를 해결하기 위해 쉘을 통해 사용자 아파치와 동일한 명령을 실행했지만 여전히 파일을 변환하지는 않습니다.
[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"
Apache는 일반 사용자와 달리 집이 없으며 HOME=/tmp/ayb
변환을 시도하기 전에 집을 지정해야 할 수도 있지만 도움이되지 않습니다 (CentOS 5.8 및 다른 버전의 LibreOffice를 사용할 때 생각합니다. 하지만 확실하지는 않습니다).
사용자 아파치로 실행할 때 libreoffice를 사용하여 파일을 PDF로 변환하려면 어떻게해야합니까?
설치된 시스템 :
CentOS 6.4
httpd.x86_64 2.2.15-28.el6.centos @updates
libreoffice-headless.x86_64 1:3.4.5.2-16.1.el6_3 @base
답변
여기에는 두 가지 문제가 있습니다. 첫 번째는 www-data
(아파치 사용자)에 $HOME
libreoffice가 $HOME
정의 되어 있지 않으면 실행할 수 없다는 것입니다 . 두 번째 문제는이 방법을 구체적으로 설정하지 않으면 (실제로 실제로는 사용하지 않아야 함) apache
시스템 /tmp
디렉토리에 액세스 할 수 없다는 것 입니다. 웹 서버는 일반적으로 제한된 환경에서 실행되며 매우 유효한 보안상의 이유로 파일 시스템에 대한 전체 액세스 권한이 없습니다.
따라서 i) apache의 사용자에게 홈을 제공하고 ii) 쓸 수있는 tmp
디렉토리를 작성해야합니다. 따라서 웹 페이지를 저장하는 동일한 폴더에 디렉토리를 작성한 후 다음 php
코드 를 실행하십시오 .
<?php
shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>
방금 테스트했으며 내 컴퓨터에서 완벽하게 작동합니다. ./tmp
사용 권한이 777로 설정되어 있는지 확인하십시오. 또한 너무 큰 소리로 재생하는 경우 아파치를 다시 시작해야 할 수도 있습니다. 변경을 한 후 잠시 후에 작동하지 않아 다시 시작해야했습니다.
답변
데비안에 비슷한 문제가 있었고 해결했습니다.
다음 strace
과 같이 처음부터 명령을 실행하십시오 .
strace -f -o output.txt soffice --headless --convert-to pdf (...)
이렇게하면 시스템 API 및 그 결과에 액세스 할 때마다 거대한 로그 파일이 생성됩니다.
필자의 경우 5000 행 근처에 다음과 같은 것이 있습니다.
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)
이 추적에 이어 폴더 /var/spool/libreoffice
에 대한 권한을 반복적으로로 변경 했습니다 777
.
그 후 모든 사용자에 대해 변환이 작동하기 시작했습니다.
어쩌면 Permission denied
다른 파일을 가져 와서 자동으로 처리하고 사용자의 권한을 수정해야합니까?