A voir également:
- Comment remplacer des fichiers existants
- Remplacer disque dur par ssd - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Remplacer word - Guide
- Wetransfer gratuit fichiers lourd - Guide
5 réponses
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
15 juin 2021 à 10:08
15 juin 2021 à 10:08
Bonjour,
Commence par découper ton code au lieu d'essayer de tout faire en une seule ligne de code
Ajoutes y ensuite un peu de debug .. des echo, des var_dump de tes variables...
Pense aussi à activer l'affichage des erreurs PHP
Et puis.. ça ne marche pas... ça ne nous permet pas vraiment de t'aider.
Il faudrait à minima expliquer en quoi "ça ne marche pas" ... Message d'erreur ? Comportement non conforme à l'attendu ? ( et en quoi il est non conforme.. )
Commence par découper ton code au lieu d'essayer de tout faire en une seule ligne de code
Ajoutes y ensuite un peu de debug .. des echo, des var_dump de tes variables...
Pense aussi à activer l'affichage des erreurs PHP
Et puis.. ça ne marche pas... ça ne nous permet pas vraiment de t'aider.
Il faudrait à minima expliquer en quoi "ça ne marche pas" ... Message d'erreur ? Comportement non conforme à l'attendu ? ( et en quoi il est non conforme.. )
Pour le coup j'ai un peu changé ma condition j'arrive à supprimer si le fichier existe mais le problème c'est que ça me supprime tout les fichiers vu que je l'ai mise dans la boucle. Je n'ai pas de document qui s'ajoute...
clearstatcache(); if (move_uploaded_file($_FILES["upload$i"]['tmp_name'], "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]) !== file_exists("./img_tmp/".$_GET['user_id']."-".$value.".*")) { array_map('unlink', glob("./img_tmp/".$_GET['user_id']."-".$value.".*")); } // Upload fichiers dans img_tmp move_uploaded_file($_FILES["upload$i"]['tmp_name'], "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]);
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
16 juin 2021 à 10:17
16 juin 2021 à 10:17
Il faut que tu supprimes ... AVANT de l'uploader....
En gros.. tu testes si le file_exists
Si oui.. tu supprimes
Et ensuite.. tu move_uploaded ..
En gros.. tu testes si le file_exists
Si oui.. tu supprimes
Et ensuite.. tu move_uploaded ..
Dz
>
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
16 juin 2021 à 10:27
16 juin 2021 à 10:27
il faut que je la mette en dehors de ma boucle for si j'ai bien compris ?
le code doit être comme ça ? J'ai fait le teste et rien ne se produit, j'ai des doublons et aucune suppression...
le code doit être comme ça ? J'ai fait le teste et rien ne se produit, j'ai des doublons et aucune suppression...
$value = $ligne['document_upl']; clearstatcache(); if (file_exists("./img_tmp/".$_GET['user_id']."-".$value.".*")) { array_map('unlink', glob("./img_tmp/".$_GET['user_id']."-".$value.".*")); } for($i=0; $i<=$total_ligne; $i++) { foreach ($result as $ligne) { $value = $ligne['document_upl']; $_FILES["tmp_name"]='./img_tmp/'; // Recuperation des extensions $infosfichier[$i] = pathinfo($_FILES["upload$i"]['name']); $extension_upload[$i] = $infosfichier[$i]['extension']; // Upload fichiers dans img_tmp move_uploaded_file($_FILES["upload$i"]['tmp_name'], "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]);
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
>
Dz
16 juin 2021 à 11:14
16 juin 2021 à 11:14
je n'ai pas dit de le mettre en dehors de ta boucle ....
d'ailleurs si tu fais ça ... la variable $value n'existe pas encore.. donc.. normal que ça ne marche pas !
je t'ai juste dit de découper ton code en deux étapes au lieu d'essayer de tout faire en une seule...; et puis à mettre ces étapes dans le bon ordre...
Il faut savoir relire son code et être un minimum logique.. sinon tu ne t'en sortiras pas...
d'ailleurs si tu fais ça ... la variable $value n'existe pas encore.. donc.. normal que ça ne marche pas !
je t'ai juste dit de découper ton code en deux étapes au lieu d'essayer de tout faire en une seule...; et puis à mettre ces étapes dans le bon ordre...
Il faut savoir relire son code et être un minimum logique.. sinon tu ne t'en sortiras pas...
Oui j'ai vu au final que ce n'était pas logique de mettre la variable à l'extérieur de la boucle...
J'ai essayé de le découper en deux étapes en utilisant une requête sql pour faire ma condition. En soit mon code paraît cohérent mais j'ai toujours un problème... Cette fois ci, j'ai tout le contenu qui est supprimé et aucun document récupéré lorsque je refais un ajout alors qu'il y a des fichiers existant à l'origine ...
C'est sûr c'est le gros problème que j'ai en ce moment, je maîtrise pas très bien la logique...
Voici l'intégralité de mon code qui a été modifié :
J'ai essayé de le découper en deux étapes en utilisant une requête sql pour faire ma condition. En soit mon code paraît cohérent mais j'ai toujours un problème... Cette fois ci, j'ai tout le contenu qui est supprimé et aucun document récupéré lorsque je refais un ajout alors qu'il y a des fichiers existant à l'origine ...
C'est sûr c'est le gros problème que j'ai en ce moment, je maîtrise pas très bien la logique...
Voici l'intégralité de mon code qui a été modifié :
for($i=0; $i<=$total_ligne; $i++) { foreach ($result as $ligne) { $value = $ligne['document_upl']; $SQL_img = "SELECT * FROM recrut.img WHERE img_nom LIKE '".$_GET['user_id']."-".$ligne['document_upl'].".%'"; // echo $SQL_img; $req_img = $mysqli -> query ($SQL_img); $res_img = $req_img -> fetch_array(); if ($res_img["img_nom"] == NULL) { $_FILES["tmp_name"]='./img_tmp/'; // Recuperation des extensions $infosfichier[$i] = pathinfo($_FILES["upload$i"]['name']); $extension_upload[$i] = $infosfichier[$i]['extension']; // Upload fichiers dans img_tmp move_uploaded_file($_FILES["upload$i"]['tmp_name'], "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]); $img_blob[$i] = ''; $img_nom[$i] = $_GET["user_id"]."-".$value.".".$extension_upload[$i]; $img_blob[$i] = addslashes(file_get_contents("./img_tmp/".$img_nom[$i])); if ( !empty( $img_blob[$i] ) ) { // Insere l'image dans la BDD $requete = "REPLACE INTO recrut.img(img_id,img_nom,img_blob,img_date) VALUES (".$_GET['user_id'].",'".$img_nom[$i]."', '".$img_blob[$i]."', NOW());"; // Envoie de la requête $result = $mysqli->query($requete) or die($requete . " " . $mysqli->error); } } else { array_map('unlink', glob("./img_tmp/".$_GET['user_id']."*")); $doc_exist[$i] = $res_img['img_blob']; // var_dump($doc_exist[$i]); $tmpFile[$i] = "./img_tmp/".$res_img['img_nom']; error_log($tmpFile[$i]); file_put_contents($tmpFile[$i], $doc_exist[$i]); $tmpFile[$i]; $img_nom[$i] = $res_img['img_nom']; $img_blob[$i] = addslashes(file_get_contents($tmpFile[$i])); if ( !empty( $img_blob[$i] ) ) { // Insere l'image dans la BDD $requete = "REPLACE INTO recrut.img(img_id,img_nom,img_blob,img_date) VALUES (".$_GET['user_id'].",'".$img_nom[$i]."', '".$img_blob[$i]."', NOW());"; // Envoie de la requête $result = $mysqli->query($requete) or die($requete . " " . $mysqli->error); } } $i++; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Après plusieurs phases de test, j'en suis venu à un soucis bien précis, celui de supprimer uniquement le fichier existant. Ma condition fonctionne par contre je ne parvient pas à faire en sorte que le unlink supprime qu'un fichier bien précis...
C'est pourtant le bon chemin de mon répertoire. Après lorsque je fais un
Cela me retourne :
string(51) "2-Attestation-Inscription-conseil-Departemental.jpg" string(20) "2-Carte-Identite.png" string(13) "2-Diplome.pdf" string(9) "2-RCP.png" string(9) "2-RIB.png"
Du coup j'ai l'impression que lorsque j'utilise ma variable il y a tout ça à la fois alors que je souhaiterai qu'il y ait qu'un seul nom...
Dois-je refaire une boucle pour que le "unlink" supprime un par un les fichiers concernés ?
Voici la dernière version de mon code :
unlink("./img_tmp/".$nom_img);
C'est pourtant le bon chemin de mon répertoire. Après lorsque je fais un
var_dump($nom_img);
Cela me retourne :
string(51) "2-Attestation-Inscription-conseil-Departemental.jpg" string(20) "2-Carte-Identite.png" string(13) "2-Diplome.pdf" string(9) "2-RCP.png" string(9) "2-RIB.png"
Du coup j'ai l'impression que lorsque j'utilise ma variable il y a tout ça à la fois alors que je souhaiterai qu'il y ait qu'un seul nom...
Dois-je refaire une boucle pour que le "unlink" supprime un par un les fichiers concernés ?
Voici la dernière version de mon code :
for($i=0; $i<=$total_ligne; $i++) { foreach ($result as $ligne) { $value = $ligne['document_upl']; $SQL_img = "SELECT * FROM recrut.img WHERE img_nom LIKE '".$_GET['user_id']."-".$ligne['document_upl'].".%'"; // echo $SQL_img; $req_img = $mysqli -> query ($SQL_img); $res_img = $req_img -> fetch_array(); if ($res_img["img_nom"] == NULL) { $_FILES["tmp_name"]='./img_tmp/'; // Recuperation des extensions $infosfichier[$i] = pathinfo($_FILES["upload$i"]['name']); $extension_upload[$i] = $infosfichier[$i]['extension']; // Upload fichiers dans img_tmp move_uploaded_file($_FILES["upload$i"]['tmp_name'], "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]); $img_blob[$i] = ''; $img_nom[$i] = $_GET["user_id"]."-".$value.".".$extension_upload[$i]; $img_blob[$i] = addslashes(file_get_contents("./img_tmp/".$img_nom[$i])); if ( !empty( $img_blob[$i] ) ) { // Insere l'image dans la BDD $requete = "REPLACE INTO recrut.img(img_id,img_nom,img_blob,img_date) VALUES (".$_GET['user_id'].",'".$img_nom[$i]."', '".$img_blob[$i]."', NOW());"; // Envoie de la requête $result = $mysqli->query($requete) or die($requete . " " . $mysqli->error); } } else { // array_map('unlink', glob("./img_tmp/".$_GET['user_id']."*")); foreach ($req_img as $ligne_img) { $nom_img = $ligne_img['img_nom']; $blob_img = $ligne_img['img_blob']; $doc_exist[$i] = $blob_img; $tmpFile[$i] = "./img_tmp/".$nom_img; error_log($tmpFile[$i]); file_put_contents($tmpFile[$i], $doc_exist[$i]); $tmpFile[$i]; // Recuperation des extensions $infosfichier[$i] = pathinfo($_FILES["upload$i"]['name']); $extension_upload[$i] = $infosfichier[$i]['extension']; if ($tmpFile[$i] != "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]) { unlink("./img_tmp/".$nom_img); var_dump($nom_img); // Upload fichiers dans img_tmp move_uploaded_file($_FILES["upload$i"]['tmp_name'], "./img_tmp/".$_GET["user_id"]."-".$value.".".$extension_upload[$i]); } // var_dump($tmpFile[$i]); $img_nom[$i] = $nom_img; $img_blob[$i] = addslashes(file_put_contents($tmpFile[$i], $doc_exist[$i])); if ( !empty( $img_blob[$i] ) ) { // Insere l'image dans la BDD $requete = "REPLACE INTO recrut.img(img_id,img_nom,img_blob,img_date) VALUES (".$_GET['user_id'].",'".$img_nom[$i]."', '".$img_blob[$i]."', NOW());"; // Envoie de la requête $result = $mysqli->query($requete) or die($requete . " " . $mysqli->error); } } } $i++; } }
15 juin 2021 à 10:28
Ce qui ne marche pas c'est la suppression, après l'upload du fichier fonctionne. Je me retrouve en quelques sorte avec des doublons juste l'extension qui change et j'aimerai remplacer le fichier lorsqu'il détecte que ce n'est pas la même extension de fichier.
En tout cas merci pour votre réponse !