[RESOLU] Demand d'aide sur la commande Exec sur macOS

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Demand d'aide sur la commande Exec sur macOS

Re: [RESOLU] Demand d'aide sur la commande Exec sur macOS

par Sebastien » 29 déc. 2015, 18:23

Merci bien pour ces infos.
J'ai presque fini mon script, il me manque pu qu'un truc auquel je n'avais pas pensé : ça me génère un AIFF (qui marche très bien pour faire des montages dans iMovie) mais je vais aussi avoir besoin, dans un autre registre (pour une radio locale équipé 100% windows) une sortie MP3. Or la sortie de SAY ne sort que du AIFF (puisque c'est une un format normé ...Apple). Je vais donc lancer un deuxième Exec pour convertir le fichier een MP3 et ça devrait être fini

J'en profite pour remercier tous celles et ceux qui m'ont aidé à mener à bien ce projet. Encore merci.

Et si cette IHM pour say vous interesse, elle sera bientôt disponible en téléchargement. Contactez moi en PV pour avoir l'adresse (pas avant janvier 2016 par contre, je dois la terminer)

Re: [RESOLU] Demand d'aide sur la commande Exec sur macOS

par Wolan » 29 déc. 2015, 17:55

Bonjour,

Pour reproduire le problème j'ai fait tourner le script dans les mêmes conditions (OSX et XAMPP).

Ensuite j'ai changé la commande exec pour rediriger le flux d'erreur vers le flux de sortie standard ce qui m'a permis de récupérer le message d'erreur via PHP.
exec("say \"test\" 2>&1",$output,$return);
var_dump($output);
var_dump($return);
Dans mon cas le message (abrégé) était le suivant :
dyld: Symbol not found

Avec un peu de recherche Google on arrive à cette page : https://stackoverflow.com/questions/249 ... doest-work

La variable DYLD_LIBRARY_PATH contient l'emplacement où chercher les bibliothèques et XAMPP réécrit cette variable (dans ce fichier /Applications/XAMPP/xamppfiles/bin/envvars) pour pointer sur les siennes au lieu du répertoire /usr/bin d'OSX.

Pas de modifications nécessaires à mon avis puisque le changement de valeur de DYLD_LIBRARY_PATH n'est valable que pour la durée du script d'après la documentation PHP (https://secure.php.net/manual/fr/function.putenv.php).

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 29 déc. 2015, 16:08

Bonjour et merci, je viens de le faire et ça marche. Mais j'avoue que là le ne comprends pas du tout à quoi correspond ces lignes, mais ca marche !
Je suppose que putenv est pour changer des variables d'environnement mais (si c'est le cas) j'en comprends pas beaucoup plus.
Pourrais je en savoir plus ?
Et si c'est le cas, y'a t il des modifications a remettre, après coups (donc après mon return var) pour retrouver un état initial ?

Re: Demand d'aide sur la commande Exec sur macOS

par Wolan » 29 déc. 2015, 01:50

Bonsoir,

Avant
if (@$_POST["valider"] == "valider")
Placer les lignes suivantes :
exec('unset DYLD_LIBRARY_PATH ;');
putenv('DYLD_LIBRARY_PATH');
putenv('DYLD_LIBRARY_PATH=/usr/bin');
Puis tester.

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 28 déc. 2015, 14:27

TTest effectué sans grands résultats

Code : Tout sélectionner

Voici le dump array(1) { [0]=> string(41) "/Applications/XAMPP/xamppfiles/htdocs/say" } output : array(0) { } return_var : int(5)
voici l'integralité du code (à force de changements, je vois eut être plus des évidences qui me sauteraient aux yeux d'habitude)

Code : Tout sélectionner

<?php session_start(); $t = array(); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php if (@$_POST["valider"] == "valider") { exec("pwd",$dir); echo "<hr>Voici le dump<br>"; var_dump($dir); echo "<hr>"; if (isset($_POST["nom_fic"])) { // say -r 175 "Un message de validation vous informe votre événement." -o 37.aiff // $ligne = 'say -r ' . $_POST["rapidite"] . ' "' . $_POST["texte"] . '" -o ' . '/Users/sebastien/temp/voix/' . $_POST["nom_fic"] . '.aiff'; // $ligne = 'say -r ' . $_POST["rapidite"] . ' "' . $_POST["texte"] . '" -o ' . $_POST["nom_fic"] . '.aiff'; $ligne = "say \"Test voix\" -o /Users/sebastien/temp/voix/". $_POST["nom_fic"].".aiff"; //passthru("/Applications/Calculator.app"); exec($ligne, $output, $return_var); echo 'output :<br />'; var_dump($output); echo 'return_var :<br />'; var_dump($return_var); } } ?> <h1>SAY</h1> <form name="saisie" method="post" action="index.php"> Saisir votre texte :<br /> <textarea name="texte" style="width:80%;height:120px;"></textarea><br> Rapidité : <input type="text" name="rapidite" value="175"> Nom du fichier (sans extension) : <input type="text" name="nom_fic" value=""> <input type="submit" name="valider" value="valider"> </form> </body> </html>
et pour rappel, voici un ls -l du dossier

Code : Tout sélectionner

drwxrwxrwx 7 sebastien admin 238 28 déc 13:20 say

Re: Demand d'aide sur la commande Exec sur macOS

par Wolan » 27 déc. 2015, 23:24

Et un test en gardant le répertoire user mais en mettant le texte en dur et en retirant le réglage de rapidité?

Quelque chose comme ça :
$ligne = "say \"Test voix\" -o /Users/sebastien/temp/voix/". $_POST["nom_fic"].".aiff";

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 27 déc. 2015, 21:02

oups, j'ai oublié de préciser mais j'avais déjà essayé, c'est même le premier test que j'ai fait :-

Code : Tout sélectionner

Voici le dump array(1) { [0]=> string(41) "/Applications/XAMPP/xamppfiles/htdocs/say" } output : array(0) { } return_var : int(5)

Re: Demand d'aide sur la commande Exec sur macOS

par Wolan » 27 déc. 2015, 20:54

Peux tu temporairement faire sortir le fichier dans le répertoire xampp au lieu de ton répertoire User?

Soit :
$ligne = 'say -r ' . $_POST["rapidite"] . ' "' . $_POST["texte"] . '" -o ' . '' . $_POST["nom_fic"] . '.aiff';
Et regarder si l'écriture du fichier est effectuée.

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 27 déc. 2015, 19:30

Bonsoir et merci de se pencher sur mon problème

Voila les derniers tests demandés. Le var_dump me sort :
array(1) { [0]=> string(41) "/Applications/XAMPP/xamppfiles/htdocs/say" } output :
array(0) { } return_var :
int(5)
Pour les droits, le répertoire qui contient le fichier php est en
drwxrwxrwx 7 sebastien admin 238 27 déc 17:56 say
et le répertoire de destination, qui n'est pas dans le sous répertoire du serveur Apache mais dans mon home, est en
drwxr-xr-x 42 sebastien staff 1428 22 déc 19:06 voix
Je l'ai passé en 777 pour voir mais pas mieux :-(
drwxrwxrwx 42 sebastien staff 1428 22 déc 19:06 voix
Le fichier n'est toujours pas généré.

Voici mon code corrigé :

Code : Tout sélectionner

<?php session_start(); $t = array(); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php if (@$_POST["valider"] == "valider") { exec("pwd",$dir); echo "<hr>Voici le dump<br>"; var_dump($dir); echo "<hr>"; if (isset($_POST["nom_fic"])) { // say -r 175 "Un message de validation vous informe de la bonne prise en compte de la saisie de votre événement." -o 37.aiff $ligne = 'say -r ' . $_POST["rapidite"] . ' "' . $_POST["texte"] . '" -o ' . '/Users/sebastien/temp/voix/' . $_POST["nom_fic"] . '.aiff'; //passthru("/Applications/Calculator.app"); exec($ligne, $output, $return_var); echo 'output :<br />'; var_dump($output); echo 'return_var :<br />'; var_dump($return_var); } } ?> <h1>SAY</h1> <form name="saisie" method="post" action="index.php"> Saisir votre texte :<br /> <textarea name="texte" style="width:80%;height:120px;"></textarea><br> Rapidité : <input type="text" name="rapidite" value="175"> Nom du fichier (sans extension) : <input type="text" name="nom_fic" value=""> <input type="submit" name="valider" value="valider"> </form> </body> </html>
et le résultat dans le navigateur

Code : Tout sélectionner

[color=#000000]Voici le dump array(1) { [0]=> string(41) "/Applications/XAMPP/xamppfiles/htdocs/say" } output : array(0) { } return_var : int(5) [/color]
je me demande s'il n'y a pas des sécurités au niveau de XAMPP

Re: Demand d'aide sur la commande Exec sur macOS

par Wolan » 27 déc. 2015, 15:13

Bonjour,

Peux tu rajouter ces instructions à ton script :
exec("pwd",$dir);
var_dump($dir);
Et vérifier quels sont les droits à cet emplacement?

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 17 déc. 2015, 16:52

D'accord je comprends mieux. Mais en ligne de commande ca marche, il y a donc blocage à un endroit (droits ?)

Re: Demand d'aide sur la commande Exec sur macOS

par ynx » 17 déc. 2015, 15:21

D'après le manuel de la commande say, celle-ci retourne une valeur différente de 0 si une erreur est survenue : https://developer.apple.com/library/mac ... say.1.html

Le var_dump($return_var); indique que la commande retourne la valeur 5, il semble donc bien qu'il y ai une erreur lors de l’exécution de la commande say.
Toujours d'après la doc, "Diagnostic messages will be printed to standard error". Mais ne connaissant pas bien MAC, je ne sais pas où trouver ces erreurs (dans un fichier log ?).

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 17 déc. 2015, 14:19

J'ai trouvé, 15 min apres ma premiere réponse, le passage de say en 777 mais ca ne donne rien de mieux, la création de fichiers ne fonctionnent pas non plus. Toutefois, je viens de me rendre compte que l'utilisateur (chose a laquelle je n'avais pas pensé) n'a pas les droits pour écrire dans le dossier de destination. Je l'ai aussi changé en 777 mais ca n'a rien apporté de mieux.

Bon, je conçois que PHP n'est pas le meilleur langage pour faire ce genre de truc mais ca devrait marcher qd meme :-)

Re: Demand d'aide sur la commande Exec sur macOS

par Sebastien » 17 déc. 2015, 14:00

Merci de ta réponse, je n'ai eu la notification mail de ta réponse et donc je ne me reconnecte que maintenant.
Effectivement, sous la douche ce matin, avant de voir ta réponse, c'est ce à quoi je viens de penser.

Avec les echo, voila ce que ca donne

Code : Tout sélectionner

output : array(0) { } return_var : int(5)
JE voulais te,nter ton idée mais pour faire un chmod sur Say, encore faut il le trouver ;-) Je v ais investiguer....

Re: Demand d'aide sur la commande Exec sur macOS

par ynx » 15 déc. 2015, 15:48

Salut,

L'instruction exec() accepte deux paramètres supplémentaires qui seront automatiquement remplis par le retour de la commande exécutée.
Essaye de modifier ton utilisation de exec() comme ceci pour voir les messages de retour :
exec($ligne, $output, $return_var);

echo 'output :<br />';
var_dump($output);

echo 'return_var :<br />';
var_dump($return_var);
Il s'agit peut être d'un problème de droit sur l'exécutable say. Il faut effectivement que l'utilisateur du serveur web (Apache je suppose) ait les droits d’exécution sur le programme say (quitte à passer également cet exécutable en 777 pour faire simple).

Bonne journée,