#1 Le 28/01/2014, à 14:38
- Alex213
mv et php
Bonjour
décidément les commandes unix dans php me donnent du file à retordre
j'essaye de déplacer un fichier en faisant :
$cmd = 'mv -n "/var/www/dev_2013/TEST_api_mail/Server_api_mail/temp/'.$file_name1.'" "/var/www/dev_2013/TEST_api_mail/Server_client/4_file_sent/'.$file_name1.'"';
exec($cmd, $output, $return_val);
if ($return_val == 0) {
echo "success";
} else {
echo "failed";
}
et ça me retourne failed !
je suis quasi sûre que c'est une erreur de syntaxe mais je ne la voit pas si vous pouvez m'aider merci.
Hors ligne
#2 Le 28/01/2014, à 14:50
- jplemoine
Re : mv et php
il faudrait que tu imprimes le contenu de la variable $cmd juste avant le exec...
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#3 Le 28/01/2014, à 14:51
- Alex213
Re : mv et php
c'est à dire ?
avec un echo ?
Hors ligne
#4 Le 28/01/2014, à 14:53
- jplemoine
Re : mv et php
oui. un truc du genre echo ou print, je ne m'en rappelle jamais.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#5 Le 28/01/2014, à 14:57
- Alex213
Re : mv et php
print et echo testé et cela ne change rien
Hors ligne
#6 Le 28/01/2014, à 14:58
- Alex213
Re : mv et php
avec :
$cmd = 'mv -n "/var/www/dev_2013/TEST_api_mail/Server_api_mail/temp/'.$file_name1.'" "/var/www/dev_2013/TEST_api_mail/Server_client/4_file_sent/'.$file_name1.'"';
print '$cmd :'.$cmd.'<br>';
exec($cmd, $output, $return_val);
if ($return_val == 0) {
echo "success";
} else {
echo "failed";
}
ou
$cmd = 'mv -n "/var/www/dev_2013/TEST_api_mail/Server_api_mail/temp/'.$file_name1.'" "/var/www/dev_2013/TEST_api_mail/Server_client/4_file_sent/'.$file_name1.'"';
echo '$cmd :'.$cmd.'<br>';
exec($cmd, $output, $return_val);
if ($return_val == 0) {
echo "success";
} else {
echo "failed";
}
Hors ligne
#7 Le 28/01/2014, à 15:11
- jplemoine
Re : mv et php
Le but est que tu postes le contenu de la variable pour voir ce que ça donne --> je n'arrive pas à analyser ton listing.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#8 Le 28/01/2014, à 15:14
- Alex213
Re : mv et php
ok
donc le contenu de la variable :
mv -n "/var/www/dev_2013/TEST_api_mail/Server_api_mail/temp/titi.txt" "/var/www/dev_2013/TEST_api_mail/Server_client/4_file_sent/titi.txt"
Hors ligne
#9 Le 28/01/2014, à 15:16
- jplemoine
Re : mv et php
Si tu lances la commande dans un terminal, qu'est-ce que ça donne ?
Pourquoi le -n ?
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#10 Le 28/01/2014, à 15:18
- Alex213
Re : mv et php
Je n'ai pas à ma dispo de terminal.
Le -n pour ne pas écraser le fichier s'il existe.
Hors ligne
#11 Le 28/01/2014, à 15:24
- jplemoine
Re : mv et php
faire un print_r($output); après l'exec qui permettrait de voir le retour de la commande..
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#12 Le 28/01/2014, à 15:26
- Alex213
Re : mv et php
voilà le retour de la commande :
Array ( )
un array vide
Hors ligne
#13 Le 28/01/2014, à 15:35
- jplemoine
Re : mv et php
La commande a l'air bonne. Pour moi, c'est soit un problème de droit ou un répertoire inexistant mais je ne vois pas comment on peut le voir.
Désolé mais je passe la main à quelqu'un qui aurait une bonne idée : là, je sèche.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#14 Le 28/01/2014, à 15:40
- Alex213
Re : mv et php
Tous les répertoires existent.
Pour ce qui est des droits j'y ai pensé aussi mais je ne sais pas non plus comment les voirs.
Hors ligne
#15 Le 28/01/2014, à 15:41
- Alex213
Re : mv et php
Mais merci de ton aide quand même
Hors ligne
#16 Le 28/01/2014, à 15:48
- bruno
Re : mv et php
Pourquoi ne pas simplement utiliser la fonction rename de PHP ?
Si tu tiens absolument à utiliser exec() met le chemin complet de ta commande (le mieux serait me de tester si le fichier existe et s'il est exécutable) :
$cmd = '/bin/mv -n "/var/w… …';
#17 Le 28/01/2014, à 15:48
- Alex213
Re : mv et php
Et ce n'est définitivement pas un problème de droit car je passe par une connection SSH avec le user root
Hors ligne
#18 Le 28/01/2014, à 15:52
- Alex213
Re : mv et php
parce qu'on me demande d'utiliser exec () et mv
pour le fichier si c'est du fichier à déplacer que vous parlez oui il existe.
je viens de rajouter le /bin/mv et pareil
Hors ligne
#19 Le 28/01/2014, à 15:54
- jplemoine
Re : mv et php
Si tu lances la commande du post #8 dans la session ssh (que j'ai appelé terminal précédement ), est-ce que ça fonctionne ? Si ça ne fonctionne pas, quel est le message d'erreur ?
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#20 Le 28/01/2014, à 16:23
- bruno
Re : mv et php
parce qu'on me demande d'utiliser exec () et mv
Ça c'est bien débile, exec n'est utile que si l'on a pas de fonction PHP pour exécuter une opération sur le système.
pour le fichier si c'est du fichier à déplacer que vous parlez oui il existe.
Non je parlais du fichier /bin/mv.
#21 Le 29/01/2014, à 11:13
- tiramiseb
Re : mv et php
Salut,
Es-tu sûre que le fichier destination n'existe pas déjà ?
[ton cahier des charges est vraiment moisi en effet... par curiosité, quel est le contexte ? des exercices ? un supérieur très mauvais informaticien ?]
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#22 Le 30/01/2014, à 15:22
- Pseudo supprimé
Re : mv et php
parce qu'on me demande d'utiliser exec () et mv
Cela a l'air de fonctionner;
par exemple, renommer /tmp/name.txt en /tmp/name-re.txt,
touch /tmp/name.txt
php -a
Interactive shell
php > $a='/tmp/name.txt';
php > echo "$a";
/tmp/name.txt
php > $b='mv '."$a".' /tmp/name-re.txt';
php > echo "$b";
mv /tmp/name.txt /tmp/name-re.txt
php > exec("$b", $output, $return_val);
php > echo "$return_val";
0
variante avec les backquotes
touch /tmp/name.txt
php -a
Interactive shell
php > $b='`mv /tmp/name.txt /tmp/name-re.txt`';
php > echo "$b";
`mv /tmp/name.txt /tmp/name-re.txt`
php > exec($b, $output, $return_val);
php > echo "$return_val";
0
php > exit