2017-05-18 7 views
0

Ich kodiere eine Systemsteuerung für einen Server von mir und ich benutze shell_exec, um einen Befehl auszuführen, der die letsencrypt api verwendet, um ein Zertifikat zu erstellen.PHP shell_exec scheint nur die Hälfte des Befehls auszuführen

Ich habe den Shell-Befehl von https://zerossl.com/usage.html. (Ich habe von ihnen alles wie pro Anweisung und es nicht ordnungsgemäß ausgeführt werden, wenn sie direkt in die Schale von Hand ausgeführt. NB es keine Benutzereingaben erfordern überhaupt)

Hier ist die shell_exec Linie

shell_exec("le.pl --key '$uname'.key --csr '$domain'.csr --csr-key '$domain'.key --crt '$domain'.crt --domains \"www.'$domain','$domain'\" --path /home/'$uname'/web/'$domain'/public_html/.well-known/acme-challenge --generate-missing --unlink --live"); 

Die Variablen $ uname und $ domain werden aus einer Datenbank abgerufen und können erfolgreich wiederholt werden. In diesem Fall sind sie admin bzw. plenixdev.tk.

Das aktuelle Arbeitsverzeichnis (gesetzt von chdir()) ist/tmp/$ uname und ich habe sichergestellt, dass der Ordner /webroot/.well-known/acme-challenge/ tatsächlich erstellt wurde, um das Stolpern des Skripts zu verhindern Dort.

ich zuerst die notwendigen Schlüssel im Skript erstellen, indem Sie:

shell_exec("openssl genrsa -out '$uname'.key 4096"); 

und

shell_exec("openssl genrsa -out '$domain'.key 4096"); 

Die shell_exec, die ich bei der die nimmt diese Schlüssel und die Variablen und soll beginnen erwähnt Erstellen Sie eine $ domain.csr-Datei (was sie tut) und eine Zertifikatsdatei.

Er schafft es jedoch nur, die .csr-Datei zu erstellen (obwohl alle benötigten Dateien im selben Ordner sind) und stoppt die Ausführung oder unsichtbare Fehlermeldung, bevor er die Zertifikate erstellen kann. Wenn ich dann den Befehl manuell im selben Ordner mit der .csr etc ausführe, läuft alles ganz gut.

Und ich kann nicht in der Lage sein herauszufinden, was falsch läuft, oder die Ausgabe auf der Seite ausgeben, um irgendwelche Fehler zu sehen.

+1

Warum haben Sie alle php-Variablen in Anführungszeichen gesetzt? Das ist nicht im ursprünglichen Befehl. Versuchen Sie, den Befehl auf dem Bildschirm zu wiederholen und zu sehen, dass er richtig aussieht. Sie werden sehen, dass der Befehl wie folgt aussehen wird (und sollte): "--key 'test.com'.key ...' –

+0

@JonathanKuhn Vielen Dank. Wirklich nicht das etwas so klein wie das würde es verursachen. – WolfSkin

Antwort

0

Nach @ JonathanKuhns Ratschlag entfernte ich die Anführungszeichen innerhalb der Shell_Exec um die Variablen und es funktionierte. Veröffentlichen Sie diese Antwort, damit andere, die hierher kommen, sie sehen können.