Probleme avec EXEC()

Questions sur le développement PHP.

Modérateur : Modérateurs

Avatar de l’utilisateur
nais
Membre
Membre
Messages : 17
Inscription : mer. 16 août 2006, 14:08

Messagepar nais » mar. 22 août 2006, 12:04

Bonjour à ts,

Je vous explique mon pb:

J'aimerais permettre aux utilisateurs de mon site de pouvoir modifier leur mot de passe par l'intermédiaire d'un formulaire.
Les mots de passe sont stockés dans le fichier .htpasswd, et donc, pour modifier un mot de passe, je dois passer par une commande DOS.

J'ai mis ça :

Code : Tout sélectionner

$w_path = $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . "/Acces Extranet/htpasswd";
exec("'".$w_path." -b .htpasswd ".$_SESSION['userCode']." ".$_POST['w_newPswd']."'", $w_array, $w_ret);

Mais j'ai cette erreur dans le fichier log :
''C:' n'est pas reconnu en tant que commande interne
ou externe, un programme ex?cutable ou un fichier de commandes.


Avant j'avais essayé ça :

Code : Tout sélectionner

exec($HTTP_SERVER_VARS['DOCUMENT_ROOT'] . "/Acces Extranet/htpasswd -b .htpasswd ". $_SESSION['userCode']." ".$_POST['w_newPswd']."", $w_array, $w_ret);

Et j'avais l'erreur suivante:
'C:/Program' n'est pas reconnu en tant que commande interne
ou externe, un programme executable ou un fichier de commandes.


Alors est-ce que quelqu'un pourrait m'apporter son aide ?
Merci bcp d'avance :)

Avatar de l’utilisateur
karrakis
Membre ancien
Membre ancien
Messages : 444
Inscription : lun. 26 avr. 2004, 12:29
Localisation : Paris
Contact :

Messagepar karrakis » mar. 22 août 2006, 13:53

Bonjour,

extrait de la page de manuel de exec : <a href='http://fr.php.net/manual/fr/function.exec.php' target='_blank'>http://fr.php.net/manual/fr/function.exec.php</a>


Notes

Avertissement

Si vous allez passer des données provenant de l'utilisateur à cette fonction, vous devez utiliser escapeshellarg() ou escapeshellcmd() pour être sûrs qu'ils n'endommagent pas le système en exécutant des commandes arbitraires.

<a href='http://fr.php.net/manual/fr/function.escapeshellarg.php' target='_blank'>http://fr.php.net/manual/fr/function.escapeshellarg.php</a>

Dans le cas où ça ne changerais tien il va falloir que tu 'echapes' les espaces dans les nom de répertoire.

Avatar de l’utilisateur
nais
Membre
Membre
Messages : 17
Inscription : mer. 16 août 2006, 14:08

Messagepar nais » mar. 22 août 2006, 14:03

Hola Karrakis,

J'ai écris ma commande comme suit:

Code : Tout sélectionner

exec('"' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/htpasswd" -b .htpasswd '.$_SESSION['userCode'].' '.$_POST['w_newPswd'], $w_array, $w_ret);

Ca fonctionne presque... :unsure:
Mais mon rapport d'erreurs me dit :
Automatically using MD5 format.
C:/Program Files/Apache Group/Apache2/htdocs/Acces Extranet/htpasswd: cannot modify file .htpasswd; use '-c' to create it

Alors que le fichier existe bien ^^ Et quand je fais la manip à la main, en DOS, ça modifie correctement le mot de passe d'un login donné...
A quel endroit ai-je fais une erreur ? :unsure:
Merci d'avance. :)

Avatar de l’utilisateur
karrakis
Membre ancien
Membre ancien
Messages : 444
Inscription : lun. 26 avr. 2004, 12:29
Localisation : Paris
Contact :

Messagepar karrakis » mar. 22 août 2006, 14:20

Ce serais pas un probleme de droit ? L'utilisateur qui execute le script php a t il le droit de modifier se fichier?

Avatar de l’utilisateur
nais
Membre
Membre
Messages : 17
Inscription : mer. 16 août 2006, 14:08

Messagepar nais » mar. 22 août 2006, 14:28

Bah j'ai vérifié : clic droit sur le fichier .htpasswd -> Propriétés -> Sécurité et tous les utilisateurs ou groupes d'utilisateurs ont le droit de :
- Modifier
- Lire et exécuter
- Lire
- Ecrire
:huh:
Y a-t'il autre chose à vérifier ? :unsure:

Avatar de l’utilisateur
nais
Membre
Membre
Messages : 17
Inscription : mer. 16 août 2006, 14:08

Messagepar nais » mer. 23 août 2006, 11:51

Bon j'espère que quelqu'un va me lire ^^

En fait il faut préciser le chemin d'accès à l'exécutable et aussi le chemin d'accès au fichier .htpasswd....

Donc j'ai écrit ça comme ça :

Code : Tout sélectionner

exec('"' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/htpasswd" -b "' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/.htpasswd" '.$_SESSION['userCode'].' '.$_POST['w_newPswd'], $w_array, $w_ret);


Mais sur la 2nde définition de chemin il plante :huh:
Cf. le rapport d'erreur :
'C:/Program' n'est pas reconnu en tant que commande interne
ou externe, un programme ex?cutable ou un fichier de commandes.


J'ai donc un problème avec mes guillemets et mes quotes :unsure: mais pourtant, quand je fais un echo de la ligne j'obtiens ça :
"C:/Program Files/Apache Group/Apache2/htdocs/Acces Extranet/htpasswd" -b "C:/Program Files/Apache Group/Apache2/htdocs/Acces Extranet/.htpasswd" 14 hello

et ça me semble correct.

Donc si quelqu'un pouvait m'éclairer un peu ce serait super :)

Avatar de l’utilisateur
pyr
Membre avancé
Membre avancé
Messages : 76
Inscription : lun. 24 juil. 2006, 9:33

Messagepar pyr » mer. 23 août 2006, 14:17

Essaie les double slash dans le path ;)

Avatar de l’utilisateur
nais
Membre
Membre
Messages : 17
Inscription : mer. 16 août 2006, 14:08

Messagepar nais » mer. 23 août 2006, 14:25

Oui ms non je peux pas Pyr, parce que comment je peux rajouter un slash à un chemin que j'obtiens comme ça :

Code : Tout sélectionner

$HTTP_SERVER_VARS['DOCUMENT_ROOT']
?

Par ailleurs, j'ai presque résolu le truc :P

Quand j'écris ma ligne de code de cette manière ça fonctionne correctement :

Code : Tout sélectionner

exec('C:\Progra~1\Apache~1\Apache2\htdocs\AccesE~1\htpasswd -b C:\Progra~1\Apache~1\Apache2\htdocs\AccesE~1\.htpasswd '.$_SESSION['userCode'].' '.$_POST['w_newPswd'], $w_array, $w_ret);


Alors que si je l'écris comme ça :

Code : Tout sélectionner

exec('"' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/htpasswd" -b "' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/.htpasswd" '.$_SESSION['userCode'].' '.$_POST['w_newPswd'], $w_array, $w_ret);

il bloque au premier espace dans un nom de répertoire (et ce même si je met des guillemets <_< )

Si quelqu'un sait pourquoi il fait ça...

Avatar de l’utilisateur
karrakis
Membre ancien
Membre ancien
Messages : 444
Inscription : lun. 26 avr. 2004, 12:29
Localisation : Paris
Contact :

Messagepar karrakis » mer. 23 août 2006, 14:27

Peut etre parce que le chemin windows est entre double quote au lieu de simple quotes?

Avatar de l’utilisateur
nais
Membre
Membre
Messages : 17
Inscription : mer. 16 août 2006, 14:08

Messagepar nais » mer. 23 août 2006, 14:40

Hello karrakis.... j'viens d'essayer avec des doubles quotes pour le chemin windows ms ça ne lui plaît pas non + :huh: lol

Avatar de l’utilisateur
karrakis
Membre ancien
Membre ancien
Messages : 444
Inscription : lun. 26 avr. 2004, 12:29
Localisation : Paris
Contact :

Messagepar karrakis » mer. 23 août 2006, 15:17

exec('"' < tu mets une double quote essaie avec une simple. J'me suis mal exprimé en fait.

sinon un truc comme ça

Code : Tout sélectionner

exec(escapeshellarg('"' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/htpasswd") . ' -b ' . escapeshellarg ('"' . $HTTP_SERVER_VARS['DOCUMENT_ROOT'] . '/Acces Extranet/.htpasswd") . $_SESSION['userCode'].' '.$_POST['w_newPswd'], $w_array, $w_ret);

JelOw
Nouveau membre
Messages : 1
Inscription : mar. 19 juil. 2011, 16:58

Re: Probleme avec EXEC()

Messagepar JelOw » mar. 19 juil. 2011, 17:01

Bonjour,

J'appelle la fonction comme ci-dessous:

Code : Tout sélectionner

exec("C:\Program Files\BitNami WAPPStack\php\php.exe dbf2pgsql.php > testoutput.php 2>&1 & echo $!", $output);


J'obtiens le message d'erreur suivant :
'C:\Program' n'est pas reconnu en tant que commande interne
ou externe, un programme ex�cutable ou un fichier de commandes.

Pareil si je remplace le chemin uniquement par "php"..

Help me :roll:


Revenir vers « PHP »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Bing [Bot] et 0 invité