2017-05-18 1 views
0

Je suis en train de coder un panneau de contrôle pour un de mes serveurs et j'utilise shell_exec pour exécuter une commande qui utilise l'API letsencrypt pour créer un certificat. J'ai reçu la commande shell https://zerossl.com/usage.html. (Je mis en place tout selon les instructions en les et il ne fonctionne correctement lorsqu'il est exécuté directement dans la coquille à la main. NB il ne nécessite pas l'entrée d'utilisateur du tout)PHP shell_exec ne semble exécuter que la moitié de la commande

Voici la ligne shell_exec

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

Les variables $ uname et $ domain sont saisies dans une base de données et peuvent être répercutées avec succès. Dans ce cas, ils sont respectivement admin et plenixdev.tk. Le répertoire de travail courant (défini par chdir()) est/tmp/$ uname et je me suis assuré que le dossier /webroot/.well-known/acme-challenge/ est réellement créé pour empêcher le script de trier Là.

Je crée d'abord les clés nécessaires dans le script en exécutant:

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

et

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

Le shell_exec que je l'ai mentionné au début de la prend les clés et les variables et vise à créez un fichier $ domain.csr (ce qu'il fait) et un fichier de certificat.

Cependant, il ne réussit qu'à créer le fichier .csr (même si tous les fichiers nécessaires se trouvent dans le même dossier) et arrête en quelque sorte l'exécution ou l'erreur de façon invisible avant de pouvoir créer les certificats. Lorsque je lance ensuite la commande à la main dans le même dossier avec le fichier .csr etc, tout fonctionne parfaitement.

Et je ne peux pas sembler capable de comprendre ce qui ne va pas, ou vider la sortie sur la page pour être capable de voir des erreurs.

+1

Pourquoi avez-vous des guillemets autour de toutes les variables PHP? Ce n'est pas dans la commande d'origine. Essayez d'afficher la commande sur l'écran et voyez qu'elle semble correcte. Vous verrez que la commande ressemblera (et ne devrait pas) ressembler à ... --key 'test.com'.key ... ' –

+0

@JonathanKuhn Merci. Vraiment, ce quelque chose d'aussi petit que cela ne le ferait pas. – WolfSkin

Répondre

0

Suite au conseil de @ JonathanKuhn, j'ai supprimé les guillemets dans shell_exec autour des variables et cela a fonctionné. Publier cette réponse pour que d'autres personnes puissent la voir