Et bonsoir amis du soir !
J'ai un petit soucis pour supprimer plusieurs images d'un coup qui serait liées à un article. Je tente en fait de récupérer les images associées à un article dans un tableau et de les supprimer à la chaine dans un foreach, mais sans succès. Mon code me retournant cette erreur :
Warning: unlink(/galerie/img/works/1.jpg): No such file or directory in /customers/9/2/e/alexandre-ribes.fr/httpd.www/galerie/admin/work.php on line 23 Warning: unlink(/galerie/img/works/2.jpg): No such file or directory in /customers/9/2/e/alexandre-ribes.fr/httpd.www/galerie/admin/work.php on line 23 Warning: Cannot modify header information - headers already sent by (output started at /customers/9/2/e/alexandre-ribes.fr/httpd.www/galerie/admin/work.php:23) in /customers/9/2/e/alexandre-ribes.fr/httpd.www/galerie/admin/work.php on line 38
Et voici le code en question :
$id = $db->quote($_GET'delete']);
// Avant de supprimer le produit, on supprime aussi les images associées
$images = $db->query("SELECT img_id, img_name FROM " . PREFIX . "images WHERE img_work_id=$id")->fetchAll();
foreach($images as $k => $image)
{
// On la supprime du dossier img/works/
unlink(WEBROOT . 'img/works/' . $image'img_name']);
$img_id = $db->quote($image'img_id']);
$db->query("DELETE FROM " . PREFIX . "images WHERE img_id=$img_id");
}
// On met à jour le nombre d'items dans la catégorie
$item = $db->query("SELECT i_cat_id FROM " . PREFIX . "items WHERE i_id=$id")->fetch();
$cat_id = $db->quote($item'i_cat_id']);
$db->query("UPDATE " . PREFIX . "cats SET c_count = c_count - 1 WHERE c_id=$cat_id");
// Enfin on supprime le produit
$db->query("DELETE FROM " . PREFIX . "items WHERE i_id=$id");
Si quelqu'un a une idée ou bien saurait m'expliquer ce qui ne fonctionne et pourquoi (ou ce que je fais mal aussi), je suis preneur :)
Merci bien :)
essaie cette fonction, et dis nous ce que ça te retourne:
UPDATE: 04:20
/**
* Test un unlink() sur un fichier, et affiche des informations de debug
* si des events sont rencontrés
* @param string $file
* @return bool
**/
function jaimeLesCourgettes($file){
$realpath = realpath($file);
switch($file){
case !file_exists($file):
yaQuoiDansCeDossier(dirname($file));
var_dump(
'Path to file : '.$file,
'Realpath : '.$realpath
);
return false;
break;
default:
var_dump( 'You can unlink($file) !' );
// unlink($file);
// or you can try
// unlink($realpath);
return true;
break;
}
}
/**
* Affiche les fichiers contenue dans un dossiers
* @param string $path chemion vers le dossier
* @return bool
**/
function yaQuoiDansCeDossier($path){
if(!file_exists($path) || file_exists($path) && !opendir($path)){
yaQuoiDansCeDossier(dirname($path));
return true;
}
$folderOpen = opendir($path);
$listFiles = ];
while($entry = readdir($folderOpen)){
if(in_array($entry, '.', '..'])) continue;
$path = preg_replace("/\\\|\//", DIRECTORY_SEPARATOR, $path);
$pathEntry = $path.DIRECTORY_SEPARATOR.$entry;
$listFiles] = $pathEntry;
}
echo '<h1>Files contents from '.$path.'</h1>';
var_dump( $pathEntry );
echo '-----------------';
return true;
}
tu l'appel AVANT la ligne 9 (selon ton past)
jaimeLesCourgettes(WEBROOT . 'img/works/' . $image'img_name']);
WEBROOT ne te renvoie pas le bon chemin essaie en le remplaçant :
$galeriePath = "/customers/9/2/e/alexandre-ribes.fr/httpd.www/galerie/";
foreach($images as $k => $image)
{
// On la supprime du dossier img/works/
$imageFilename = $galeriePath . 'img/works/' . $image'img_name'];
if (file_exists($imageFilename) {
unlink($imageFilename);
} else {
echo "Impossible de supprimer $imageFilname, le fichier n'existe pas";
}
$img_id = $db->quote($image'img_id']);
$db->query("DELETE FROM " . PREFIX . "images WHERE img_id=$img_id");
}
Mieux, selon l'emplacement du controleur frontal de ton application, tu peux utiliser $_SERVER'DOCUMENT_ROOT'] (qui va te retourner le chemin absolu du répertoire où se trouve ton fichier php) et ajouter un chemin relatif à ce chemin. Par exemple si tu exécute un fichier PHP situé dans /var/www/mon_projet/web/app.php et que tu veux accéder à une image se trouvant dans /var/www/mon_projet/galerie/img/poulet.jpg tu peux faire :
// On utilise ../ pour descendre d'un dossier
$filename = $_SERVER'DOCUMENT_ROOT'] . '/../galerie/img/poulet.jpg';
unlink($filename);
Donc, selon le code montrer post 1, ajoute avant la ligne 9 ceci:
var_dump( substr(sprintf('%o', fileperms(WEBROOT . 'img/works/' . $image'img_name'])), -4) ); die( __FILE__.':'. __LINE__ ); //
ça va t'afficher les droits du fichier