Kører LibreOffice soffice.exe på Windows fra PHP exec () fast
Problem
Jeg har problemer med at konvertere Word-dokumenter til PDF ved hjælp af soffice.exe i LibreOffice 5.4.6 - kører på Windows Server 2012 R2 via IIS.
Efter at have ændret biblioteket til den relevante LibreOffice-programkatalog i PHP (chdir), er kommandoen, jeg kalder i PHP, følgende:
$cmd = "soffice.exe --headless -convert-to pdf -outdir ".sys\_get\_temp\_dir()." ".$workingdoc;
exec($cmd);
Hvor $ workingdoc er den fulde sti til .docx Word-filen.
sys\_get\_temp\_dir () på mit system oversætter til C: \ Windows \ Temp
Hvis jeg ekko $ cmd-variablen til en browser, så kopierer du denne udgave til en cmd.exe-kommandoprompt interaktivt på serveren, bliver en PDF produceret uden problem.
For eksempel kan en ekko ud $ cmd, som jeg kopierer-indsæt i en cmd.exe-prompte være:
soffice.exe --headless -convert-to pdf -outdir C:WindowsTEMP C:WindowsTemppdD125.docx
Dog kører denne $ cmd-variabel fra PHP via exec () i samme brugerkontekst som det, jeg interaktivt initierede cmd.exe fra, bare hænger. Jeg kan se soffice.exe i Task Manager med RAM forbrug svinger mellem 10-20MB. I min C: \ Windows \ Temp-mappe får jeg desuden flere tomme mapper kontinuerligt oprettet hvert sekund, mens soffice.exe stadig kører, alle med et navn i formatet lu * .tmp
For eksempel er en af de mange mapper, der bliver produceret, lu1124fq1pud.tmp
PDF'en bliver ikke oprettet, og den eneste måde, hvorpå PHP-scriptet kan afslutte og stoppe mapperne lu , der oprettes (udover PHP timeouts), er at tvinge opgaven soffice.exe i Task Manager.
Så hvorfor virker kommandoen soffice.exe, når den bliver kaldt fra cmd.exe, men ikke via PHP, selvom de via begge metoder lanceres i samme brugerkontekst?