2015-12-14 18 views
5

Chciałbym zautomatyzować eksport pliku .odf do .pdf.PHP exec fail without errors

Próbowałem czegoś o nazwie unoconv.

Po wpisaniu w wierszu polecenia systemu Windows wszystko jest w porządku.

>"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 

Po użyciu w skrypcie PHP nic już nie działa. Nie pojawia się żaden błąd.

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') 

Próbowałem też uciec \ lub używając ' i " inaczej, ale żaden z moich badań były jednoznaczne.

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

Daj mi

//echo var_dump($test)give nothing 

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

//echo var_dump($return); 
int 1 

brzmi to jak problem uprawnienia, ale sprawdziłem to również i wszystkie foldery są dostępne dla PHP.

+0

spróbować z bardzo prostego polecenia najpierw trzeba uporządkować znaki cudzysłowu i ucieka, aby uzyskać prawo składni. – arkascha

Odpowiedz

0

Dodam to jako komentarz, ale nie na tyle, zamiast rep ...

miałem ten problem przy zmianie z serwera WAMP do IIS, a jak powiedział, że to problem uprawnienia. Okazuje się, że musiałem dać użytkownikowi "IUSR" i grupie "IIS_IUSRS" pełne uprawnienia do wykonania.

Później napotkałem coś podobnego i uważam, że postanowiłem po prostu zmienić uruchamianie IIS użytkownika na Administratora, ale prawdopodobnie nie jest to zalecane.

Oczywiście nie będzie to miało znaczenia, jeśli nie korzystasz z usług IIS, ale zostawię to tutaj na wszelki wypadek.

+0

Tak jak mówisz, może być użyteczne dla kogoś, ale w rzeczywistości nie używam IIS – Raccoon

+0

Jaka jest twoja konfiguracja serwera? Myślę, że w WAMPie miałem coś podobnego i zmieniłem usługę wampapache, aby działała jako Administrator, jeśli to pomaga –

0

Testując kod egzotyczny, python.exe został nadpisany i nie nadaje się do użytku. Kod w początkowym wpisie był prawie poprawny. Mój błąd.

Dla ciekawskich ludzi, to jest mój ostatni kod z łatwy w obsłudze funkcji

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); 
} 

A teraz, kiedy muszę przekonwertować plik odtworzyć w pdf I ju st mają wykonać następujące

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");