rename

Eléphant du PHP | 166 Messages

12 juin 2017, 12:23

Bonjour
voici mon code :

Code : Tout sélectionner

// Renomer mon fichier $newName = $_POST["renom"]; $newFile = rename($tmp_file,$newName);
Je voudrais renommer un fichier temporaire "$tmp_file" avec le nouveau nom "$newName", mais cela ne fct pas ?
message : move_uploaded_file(): Unable to move 'C:\Users\maintenance_voirie\AppData\Local\Temp\phpCD69.tmp' to 'tests/porch.jpg'

Mammouth du PHP | 2703 Messages

12 juin 2017, 13:17

la ligne indiquée dans le message d'erreur correspond bien à ces lignes ?
car cela parle de la fonction move_uploaded_file et non de la fonction rename.

Eléphant du PHP | 166 Messages

12 juin 2017, 13:22

en fait j'ai cela avant :

Code : Tout sélectionner

<form method="post" enctype="multipart/form-data" action=""> <input type="file" name="fichier" multiple="multiple"><br> Nouveau nom : <input type="text" name="renom" ><br> Dossier de destination : <input type="text" name="dir" size="12"><br> <input type="submit" name="upload" > </form> <?php if( isset($_POST['upload']) ) // si formulaire soumis { //on transforme en fichier temporaire xxxx.tmp $tmp_file = $_FILES['fichier']['tmp_name']; if( !is_uploaded_file($tmp_file) ) { exit("Le fichier est introuvable"); }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 juin 2017, 19:33

salut,

est tu certains d'avoir la structure que tu attends ?
=> var_dump($_FILES); pour voir le contenue du tableau.
ton message parle de la fonction move_uploaded_file et tu nous sort une ligne de code avec la fonction rename !
si ton but c'est de modifier le nom d'un fichier existant pourquoi pas. Par contre si c'est modifier le nom du fichier temporaire de l'upload c'est une bétise, et du coup je comprend que move_uploaded_file ne trouve pas le fichier.
la fonction move_uploaded_file va te permettre de nommer ton fichier comme tu le souhaites à la destination.

juste au passage, si ton fichier contient bien les deux lignes de ton premier message tu as un beau trous de sécurité (comme par exemple remplacer ton index.php par un autre fichier qui va être utile a quelqu'un d'autre ;)

pour l'upload de fichier je te propose de lire ceci

ps : tu indiques la possibilité d'upload multiple mais tu ne sembles pas le gérer dans le code...

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 166 Messages

26 juin 2017, 13:12

voici mon code :

Code : Tout sélectionner

<form method="post" enctype="multipart/form-data" action=""> <input type="file" name="fichier" multiple="multiple"><br> Nouveau nom : <input type="text" name="renom" ><br> Dossier de destination : <input type="text" name="dir" size="12"><br> <input type="submit" name="upload" > </form> <?php if( isset($_POST['upload']) ) // si formulaire soumis { //on transforme en fichier temporaire xxxx.tmp $tmp_file = $_FILES['fichier']['tmp_name']; if( !is_uploaded_file($tmp_file) ) { exit("Le fichier est introuvable"); } // on vérifie l'extension $type_file = $_FILES['fichier']['type']; if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif')) { exit("Le fichier n'est pas une image"); } // Renomer mon fichier $newName = $_POST["renom"]; $newFile = rename($tmp_file,$newName); // On créer un dossier if(isset($_POST['upload']))//si le formulaire est soumis { if (!empty($_POST['dir'])) { //si le champ name n'est pas vide $dossier = $_POST['dir']; //si le dossier n'existe pas déjà if(!file_exists($dossier)) { mkdir($dossier,0777,true); echo "Le Dossier -- ".$dossier." -- a bien ete cree"; } } else { echo "Veuillez rentrer un nom"; } } // on copie le fichier dans le dossier de destination $name_file = $_FILES['fichier']['name']; if( !move_uploaded_file($tmp_file, $dossier."/".$name_file)) { exit("Impossible de copier le fichier dans $dossier"); } echo " Le fichier a bien été uploadé"; } ?>
En fait le but c'est que je veux renommer un fichier ex : voiture.jpg en voiture555.jpg. J'utilise donc "rename" mais cela ne fct pas ? est-ce le bon procédé ?

Mammouth du PHP | 1967 Messages

26 juin 2017, 16:04

Tu dois renomer ton fichier après avoir utilisé move_upload_file sinon la fonction ne tretrouve pas ton fichier temporaire d'où l'erreur que tu mentionne en premier post
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 166 Messages

26 juin 2017, 21:47

j'ai donc mis mon code tout a la fin :

Code : Tout sélectionner

// on copie le fichier dans le dossier de destination $name_file = $_FILES['fichier']['name']; if( !move_uploaded_file($tmp_file, $dossier."/".$name_file)) { exit("Impossible de copier le fichier dans $dossier"); } echo " Le fichier a bien été uploadé"; // Renomer mon fichier $newName = $_POST['renom']; $newFile = rename($tmp_file,$newName); var_dump ($tmp_file,$newName);
quand je fais le var-dump, je vois bien le fichier renomé grace à :
$newName = $_POST['renom'];
mais dans le dossier il reste toujours en ancien nom de fichier ?
si je fais un var_dump sur $newFile cela me mais une erreur false.

Mammouth du PHP | 1967 Messages

27 juin 2017, 11:26

sais tu comment fonctionne move_uploaded_file ?
En gros
lors de la soumission d'un formulaire avec un fichier, php va télécharger le fichier dans un dossier temporaire. tu va pouvoir alors vérifier que ce fichier correspond à ce que tu veux (taille max, extension, ...)
ensuite tu fait appel à move_uploaded_file pour déplacer le fichier de son emplacement temporaire vers sa position définitive en te permettant de choisi cette place et même son nom définitif.

il te suffit donc de faire confiance à cette fonction pour renomer ton fichier lors du transfert
 // on copie le fichier dans le dossier de destination
$name_file = $_FILES['fichier']['name'];
// Renomer mon fichier
$newName = $_POST['renom'];
if( !move_uploaded_file($tmp_file, $dossier."/".$newName))
{
exit("Impossible de copier le fichier dans $dossier");
}
echo " Le fichier a bien été uploadé";
// Renomer mon fichier
$newName = $_POST['renom'];
var_dump ($tmp_file,$newName);
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 166 Messages

28 juin 2017, 13:17

merci
je voudrais intégrer ce code :

Code : Tout sélectionner

// Renomer mon fichier $newName = $_POST['renom']; if( !move_uploaded_file($tmp_file, $dossier."/".$newName)) { exit("Impossible de copier le fichier dans $dossier"); } echo " Le fichier a bien été uploadé"; }
dans une class que j'ai appelé : Image.php.
cela ressemble à ca :

Code : Tout sélectionner

<?php class Image { public function getNewname() { // Renomer mon fichier $newName = $_POST['renom']; if( !move_uploaded_file($tmp_file, $dossier."/".$newName)) { exit("Impossible de copier le fichier dans $dossier"); } echo " Le fichier a bien été uploadé"; } } ?>
ensuite dans l'autre fichier, je viens récupéré le résultat avec le code suivant :

Code : Tout sélectionner

require('class/Image.php'); $image = new Image; // instanciation de la classe Image
cela ne fct pas ?

Eléphant du PHP | 82 Messages

03 juil. 2017, 13:25

Bonjour,

Dans ta méthode getNewName(), la variable $dossier n'existe pas. Pense à mettre le chemin dans lequel tu veux le mettre.

Lorsque tu utilises ta classe tu dois appeler ta méthode :

Code : Tout sélectionner

require('class/Image.php'); $image = new Image; // instanciation de la classe Image $image->getNewName();
Bon courage
@+