[PHP] exec() [Résolu/Fermé]

Signaler
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
-
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
-
Bonjour,
je rencontre quelque problème avec la fonction exec();
J'essaye d'extraire le contenu d'un archive zip avec 7z. En local (comme dab) tout marche toujours super bien puis quand je veux passer sur le serveur dédié, ça fait rien, ça retourne pas d'erreur...

j'ai simplifié une page pour tester, j'ai fais un dossier (ou l'utilisateur IIS a full contrôle) dans lequel se trouve :
- 7z.exe
- fichier.zip (contenu un fichier .txt)
- page.php

dans laquelle je fais :

<?php
exec('7z e fichier.zip');
?>

plus simple c'est pas possible et pourtant ça marche pas.

Cependant le truc bien bizarre que j'ai eu, c'est sur ma page plus complexe j'ai réussi une fois à extraire l'archive et depuis ça marche plus alors que j'avais pas touché au code....

7 réponses

Messages postés
34
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
18 août 2009
9
Dans les propriété IIS du serveur virtuel il faut s'assurer que les autorisations sont accordées pour "les scripts et executables".
Coté php.ini il faut également s'assurer que le moteur n'est pas en mode SAFE
safe_mode = Off

Et bien sûr vérifier éventuellement que la même ligne de commande marche bien quand elle est lancée dans le ROOT directory.

Vérifier également que l'utisateur IIs a bien les droit d'accès aux executables (ou l'utilisateur de la session windows si il y a autentification intégrée)

(mais par la suite attention aux pb de sécurité !)
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
68
ba justement pas logique qu'elle ce soit lancé une fois... Ensuite je fais aussi des exec de pdftotxt et antiword sans aucun soucis sur le serveur. Donc c'est assez bizarre
Messages postés
34
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
18 août 2009
9
Les executions sont sensées se faire avec quel utilsateur (utilisateur didié IIS ?)
Qu'est ce que donne l'execution de la page en ligne de commande avec une session de cet utilisateur (si c'est possible) ?

Eventuellement qu'est ce que donne la même instruction système avec des backitcks
par exemple :
<?php
echo `7z e fichier.zip`;
?>
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
68
en fait j'ai deja testé avec ' ou " et ` ne marche pas je viens de tester, j'ai aussi fait avec des ",' et tout autour du nom de fichier mais je veux la syntaxe que j'utilise est bonne déjà vu qu'elle marche en local...

j'ai ça en local :
exec("7z e $destination$fichier_zip -o$dossier_zip");
temp/fichier.zip vers temp_zip

le même code qui marche en local et qui fait rien sur le serveur c'est bizarre, souvent c'est un problème de droit mais la je vois pas pourquoi puisque d'autre exe tourne....

Ensuite j'ai aussi testé si 7z avait des dépendances mais apparemment pas parce qu'avec le cmd et mon 7z.exe dans un autre dossier tout seul ça marche niquel.

si qqn connait un autre extracteur qui marche bien avec exec() je veux bien...
Messages postés
34
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
18 août 2009
9
Vous n'avez pas un petit executable qui produit du texte sur la sortie standard ?
genre setver.exe pour voir si même ça ça ne marche pas ?
Messages postés
34
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
18 août 2009
9
Sinon il y effectivement la solution de passer par des modules
https://www.php.net/zip
mais est ce compatible avec 7zip ?
A tester.
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
68
je vais prendre la solution php je crois, y a que ça de vrai, la command exec je la déteste, une fois sur 2 elle marche pas bien, je vais essayer de me trouver un exemple pour extraire, surtout que je récup qu'un seul fichier et je supprime le reste.