편집하다

편집하다

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 파일을 생성하는 중입니다.

관련 정보