Perl CGI(Mason)를 사용하여 xlsx 파일을 pdf로 변환하려고 합니다.
순수 Perl을 사용하여 파일을 변환하는 방법을 찾지 못했기 때문에 이를 사용 soffice
하여 작업을 수행했습니다.
브라우저를 통해 이 작업을 수행하기 전까지는 잘 작동합니다.
변환을 담당하는 코드는 매우 간단합니다.
my @cmd = ( "soffice", "--headless", "--convert-to", "pdf", $filename );
system(@cmd);
일반 사용자가 실행할 때는 명령줄에서 제대로 실행되지만 Apache 사용자(Apache의 Mason)로 실행하면 오류가 발생합니다.
(process:14954): dconf-CRITICAL **: 14:28:42.846: unable to create directory '/usr/share/httpd/.cache/dconf': Permission denied. dconf will not work properly.
누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
시스템 명령 대신 Perl만 사용하여 xlsx를 pdf로 변환하는 방법이 있습니까?
편집하다
오류를 전달하기 위해 dconf
불만이 있는 디렉토리 트리를 수동으로 생성하고 이를 Apache 사용자에게 전달했지만 다음 오류가 발생했습니다.
[Java framework] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx
내가 시도해도 마찬가지입니다 unoconv
.
Error: Unable to connect or start own listener. Aborting.
해결책
unoconv --listener
작동하기 전에 수동으로 시작하면 문제가 해결되었습니다. PDF 파일을 생성하는 중입니다.
답변1
이 오류는 Apache가 명령줄에서 이 스크립트를 실행한 사용자와 다른 사용자로 실행되고 있기 때문에 발생합니다. 요즘에는 CGI를 사용하지 않습니다. FastCGI로 실행되도록 Mason을 설정하겠습니다. 지옥, 나는 심지어 Apache를 버리고 NGINX를 사용할 것입니다. 이 문제를 해결하려면 다음 중 하나를 수행해야 합니다.
- 동일한 사용자가 디렉토리를 소유하거나 Apache를 실행하는 사용자가 쓸 수 있도록 디렉토리를 만듭니다. Apache는 CGI 프로세스를 생성하므로 스크립트를 실행하는 사용자와 다른 권한을 갖습니다. 파일을 보고
/etc/apache2/envvars
변수를 확인APACHE_RUN_GROUP
하고APACHE_RUN_USER
- 사용수 실행
답변2
unoconv --listener
작동하기 전에 수동으로 시작하면 문제가 해결되었습니다. PDF 파일을 생성하는 중입니다.