2015-09-04 11 views
6

Befehl

$file = '/var/www/test.docx'; 
move_uploaded_file($uploaded_file, $file); 
echo 'is file: '.is_file($file)."\n"; 

exec('/usr/bin/doc2pdf -o '.$file.'.new '.$file.' 2>&1', $out); 
print_r($out); 

Ausgang

is file: 1 
Array 
(
    [0] => Error: Unable to connect or start own listener. Aborting. 
) 

Dies ist ein Teil eines Upload-Skript zu starten und als www-data unter Apache läuft ..doc2pdf - keine Verbindung herstellen oder eigene Zuhörer

Die Befehlszeile allein funktioniert gut aus Putty als root

Die Scri pt hat unter www-data gearbeitet, aber jetzt tut es nicht? : -/

Update I

apt-get install sudo 
sudo visudo # added "www-data ALL = NOPASSWD: /usr/bin/doc2pdf" 

Code:

exec('sudo /usr/bin/doc2pdf -o '.$file.'.new '.$file.' 2>&1', $out); 
print_r($out); 

Fehler:

sudo: unable to resolve host dyntest-amd-3700-2gb 

Update II

echo "127.0.1.1 $(hostname)" >> /etc/hosts 
reboot 
+0

Fügen Sie die Option '-V' zu' doc2pdf' Befehl und überprüfen Sie die Ausgabe von '$ Bereich führt zum . Außerdem erwartet 'sudo' typischerweise ein tty. Überprüfen Sie Ihre '/ etc/sudoers' Datei auf die Option 'Defaults erforderlich'. Sehen Sie sich diesen StackExchange-Beitrag an: http://unix.stackexchange.com/a/122624. –

Antwort

5

Sie können entweder den Besitzer von/usr/bin/doc2pdf mit dem Befehl chown ändern oder die Berechtigungen von www-data user ändern, sodass co ausgeführt werden kann mmands als root ohne Passwort eingeben. Um dies zu tun, müssen Sie /etc/sudoers Datei bearbeiten. Es ist besser, sie nicht direkt zu bearbeiten. Dafür gibt es ein Util in Linux: visudo.

$ sudo visudo

diese

bis zum Ende der Datei hinzufügen

www-data ALL = NOPASSWD:/usr/bin/doc2pdf

Datei speichern und Sie sind erledigt. Vergessen Sie nicht, auch diese Zeile Ihrer PHP-Code zu ändern (hinzufügen sudo am Anfang):

exec('sudo /usr/bin/doc2pdf -o '.$file.'.new '.$file.' 2>&1', $out); 
+0

Wenn ich 'sudo' in der Befehlszeile eintrage, erhalte ich eine Fehlermeldung .. – clarkk

+0

@clarkk, können Sie angeben, welchen Fehler Sie bekommen? –

+0

'-bash: sudo: Befehl nicht gefunden' – clarkk

0

Connect ssh als root

sudo visudo

www-data ALL = (ALL) NOPASSWD hinzufügen:/usr/bin/doc2pdf

und sparen: wq

+0

Beim Ausführen von 'visudo' wird ein Fehler zurückgegeben .. habe meine Frage aktualisiert – clarkk

+0

Es scheint, dass Sie eine Dateibearbeitung vorschlagen, richtig? Also erkläre das. Vielleicht hat das OP nicht die gleichen Programme, die Sie in Ihrem Beispiel verwenden. –

Verwandte Themen