2015-12-14 17 views
5

Ich möchte den Export von .odf Datei zu .pdf automatisieren.PHP exec scheitern ohne Fehler

Ich habe versucht, etwas namens unoconv.

Wenn Sie die Windows-Eingabeaufforderung eingegeben haben, ist alles in Ordnung.

>"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt 

Einmal in einem PHP-Skript verwendet, funktioniert nichts mehr. Kein Fehler erscheint.

exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt'); 

//or 

shell_exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt') 

Ich habe auch versucht \ oder mit ' und " anders zu entkommen, aber keiner meiner Tests waren schlüssig.

$test = exec($cmd, $output, $return); 
echo var_dump($test); 
echo var_dump($output); 
echo var_dump($return); 

Gib mir

//echo var_dump($test)give nothing 

//echo var_dump($ouput); 
array (size=0) 
    empty 

//echo var_dump($return); 
int 1 

Dieses wie ein Berechtigungsproblem klingt, aber ich habe auch überprüft diese und alle Ordner sind zugänglich für PHP.

+0

Versuchen Sie es mit einem sehr einfachen Befehl zu tun, müssen Sie zitieren Zeichen sortieren und zu entkommen die Syntax richtig zu machen. – arkascha

Antwort

0

Ich würde dies als Kommentar statt hinzufügen, aber nicht genug rep ...

ich dieses Problem hatte, wenn sie von einem WAMP-Server IIS ändern, und wie Sie sagten, es wäre ein Problem mit den Berechtigungen. Es stellt sich heraus, dass ich den "IUSR" -Benutzer und die "IIS_IUSRS" -Gruppe vollständige Berechtigungen für die Ausführung geben musste.

Später stieß ich auf etwas Ähnliches und ich glaube, ich entschied mich dafür, einfach den Benutzer zu ändern, den IIS als Administrator ausführt, aber dies wird wahrscheinlich nicht empfohlen.

Natürlich ist dies irrelevant, wenn Sie nicht IIS verwenden, aber ich lasse das hier für den Fall, dass jemand anderes ist.

+0

Wie Sie sagen, kann es für jemanden nützlich sein, aber in der Tat verwende ich nicht IIS – Raccoon

+0

Was ist Ihr Server-Setup? Ich denke, in WAMP hatte ich etwas Ähnliches und habe den Wampapache-Dienst geändert, um als Administrator zu arbeiten, wenn das hilft –

0

Durch Testen von exotischem Code wurde python.exe überschrieben und unbrauchbar. Der Code in der ursprünglichen Post war fast korrekt. Mein Fehler.

Für Neugierige, das ist mein letzter Code mit einer leicht zu bedien Funktion

createPDF.bat

@echo off 
set arg1=%1 
set arg2=%2 

cd "C:\Program Files (x86)\OpenOffice 4\program\" 

python.exe "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf -o %arg2% %arg1% 

createPDF.php

function createPDF($from, $to) 
{ 
    //Launch the .bat, do not forget the double backslash 
    $handle = popen("start /B path\\to\\createPDF.bat ".$from." ".$to, "r"); 

    //Debug if needed 
    //echo "'$handle'; " . gettype($handle) . "\n"; 
    //$read = fread($handle, 2096); 
    //echo $read; 

    //Close the socket 
    pclose($handle); 
} 

Und jetzt, wenn ich eine Odt-Datei in PDF konvertieren muss ich Ju st haben zuerst die folgenden

test.php

include_once($_SERVER['DOCUMENT_ROOT']."path\to\createPDF.php"); 

//createPDF(source, destination), do not forget the double backslash (\\) 
createPDF("E:\\A\\strange\\path\\to\\Report.odt" , "D:\\Final_report");