J'ai un script PHP qui exécute un fichier .bat sur ma machine Windows en utilisantCe qui est équivalent linux d'exécuter un fichier .bat sur les fenêtres du système en utilisant PHP()
$ result = système ("cmd/C nameOfBatchFile.bat ");
Ceci définit certaines variables d'environnement et est utilisé pour appeler l'API Amazon EC2 à partir de la ligne de commande.
Comment faire la même chose à partir d'un serveur Linux? J'ai renommé mon fichier .bat en shell (.sh) et j'ai modifié le script pour utiliser 'export' lors de la définition des variables d'env. J'ai testé en exécutant le code à partir d'un terminal mastic et il fait ce qu'il devrait. Donc je sais que les commandes dans le script sont bonnes. Comment est-ce que je cours ceci de PHP? J'ai essayé d'exécuter la même commande que ci-dessus avec le nouveau nom de fichier et je ne reçois aucune erreur, ou fichier non trouvé etc mais cela ne semble pas fonctionner.
Où puis-je commencer à essayer de résoudre ce problème?
---------------------------------- MISE À JOUR ----------- --------------------
Voici le script PHP qui appelle le fichier shell -
function startAmazonInstance() {
$IPaddress = "1.2.3.4"
$resultBatTemp = system("/cmd /C ec2/ec2_commands.sh");
$resultBat = (string)$resultBatTemp;
$instanceId = substr($resultBat, 9, 10);
$thefile = "ec2/allocate_address_template.txt";
// Open the text file with the text to make the new shell file file
$openedfileTemp = fopen($thefile, "r");
contents = fread($openedfileTemp, filesize($thefile));
$towrite = $contents . "ec2-associate-address -i " . $instanceId . " " . $IPaddress;
$thefileSave = "ec2/allocate_address.sh";
$openedfile = fopen($thefileSave, "w");
fwrite($openedfile, $towrite);
fclose($openedfile);
fclose($openedfileTemp);
system("cmd /C ec2/mediaplug_allocate_address_bytemark.sh");
}
Et voici le fichier .sh - ec2_commands.sh
#!/bin/bash
export EC2_PRIVATE_KEY=$HOME/.ec2/privateKey.pem
export EC2_CERT=$HOME/.ec2/Certificate.pem
export EC2_HOME=$HOME/.ec2/ec2-api-tools-1.3-51254
export PATH=$PATH:$EC2_HOME/bin
export JAVA_HOME=$HOME/libs/java/jre1.6.0_20
ec2-run-instances -K $HOME/.ec2/privateKey.pem -C $HOME/.ec2/Certificate.pem ami-###### -f $HOME/.ec2/aws.properties
Je suis en mesure d'exécuter ce fichier à partir de la ligne de commande, donc je sais que les commandes fonctionnent bien. Lorsque je travaillais sur Windows, il y avait un délai au démarrage de l'instance et je pouvais répercuter les résultats sur l'écran. Maintenant, il n'y a pas de retard comme si rien ne se passait.
Je ne sais pas si vous avez besoin d'une autorisation d'exécution si vous la donnez directement au shell? – paxdiablo
ok j'ai essayé ceci mais il ne semble toujours pas courir le dossier. Le chemin vers le fichier est-il relatif au script PHP? J'ai vérifié les autorisations des fichiers et ils sont 777 – undefined
Le script n'a pas besoin d'autorisations d'exécution parce que vous ne l'exécutez pas - vous exécutez '/ bin/sh' et vous lui passez le script à exécuter. – meagar