2010-09-02 7 views
0

Je suis en train de supprimer un dossier using this script:Supprimer dossier en php

function Delete($path) 
{ 
    if (is_dir($path) === true) 
    { 
     $files = array_diff(scandir($path), array('.', '..')); 

     foreach ($files as $file) 
     { 
       Delete(realpath($path) . '/' . $file); 
     } 

     return rmdir($path); 
    } 

    else if (is_file($path) === true) 
    { 
     return unlink($path); 
    } 

    return false; 
} 

Delete('tmp'); 

Il travaille dans mon serveur Xampp, mais pas sur mon serveur web. J'ai changé les permissions du dossier et du fichier qu'il contient à 0777. Donc il devrait être accessible en écriture (ou dans ce cas effaçable) mais rien ne se passe. J'ai même essayé de donner le chemin absolu du dossier comme paramètre de la fonction, mais toujours rien. Des idées?

+1

Des messages d'erreur? Vous devriez en avoir. –

+0

Nothing.No messages d'erreur. – Vidi

+0

Essayez d'ajouter en haut 'ini_set ('display_errors', 1); error_reporting (E_ALL); 'et voir si des erreurs se produisent. –

Répondre

0

Renvoie-t-il une valeur false? Ou il retourne vrai mais ne supprime pas réellement?

Normalement, je suppose que c'est un problème de permissions. Essayez de créer un dossier avec mkdir à partir de PHP, donc PHP est le propriétaire (pour ainsi dire) et essayez de supprimer cela avec votre fonction.

Si cela fonctionne, c'est un problème de permissions/propriétaire.

+0

J'ai essayé ceci: if (mkdir ("tmp", 0777)) echo ('works'); else echo ('non'); if (Supprimer ('tmp')) echo ('oui'); else echo ('non'); Mais rien ne se passe. Ce n'est pas le dossier. Et ça ne montre rien. – Vidi

+0

Etes-vous sûr que votre hôte autorise ces fonctions? –

+0

Oui, j'ai juste essayé de faire un nouveau fichier php et de créer un dossier en utilisant le nouveau fichier php. Ça a marché. Assez intéressant, même si j'ai utilisé mkdir ("tmp", 0777), il a créé un dossier tmp avec 0755 persmissions qui sont les paramètres par défaut. Suis-je en utilisant la fonction mkdir mal? La valeur des autorisations doit-elle être entre guillemets? – Vidi

1

Utilisez ceci:

function delTree($dir) 
{ 
$files = glob($dir . '*', GLOB_MARK); 
foreach($files as $file 
{ 
    if(is_dir($file)) 
    delTree($file); 
    else 
    @unlink($file); 
} 

if(is_dir($dir)) rmdir($dir); 
}; 
0

Vous pouvez tester ce code

<?php 
$files = glob('application/*'); foreach($files as $file){ if(is_file($file)) unlink($file); } 
?> 

Ou,

function viewDir($path) { 
    return is_file($path) ? 
      @unlink($path) : 
      array_map(__FUNCTION__, glob($path.'/*')) == @rmdir($path); 
} 
$dir=$_SERVER["DOCUMENT_ROOT"]."/xxxx/xxxx"; 
echo $dir; 
viewDir($dir); 
0

Peut être certains fichiers sont ouverts en utilisant php comme fopen et que le temps il sera ne supprime pas le dossier ou le répertoire. J'ai rencontré le même problème lorsque j'ai essayé de supprimer un fichier/dossier

0

Essayez quelque chose comme ceci.

<?php 
function delete_directory($target) { 
     if (is_dir($target)) 
      $dir_handle = opendir($target); 
    if (!$dir_handle) 
      return false; 
    while($file = readdir($dir_handle)) { 
      if ($file != "." && $file != "..") { 
       if (!is_dir($dirname."/".$file)) 
        unlink($dirname."/".$file); 
       else 
        delete_directory($target.'/'.$file); 
      } 
    } 
    closedir($dir_handle); 
    rmdir($target); 
    return true; 
} 

?> 

Espérons que cela aide.

Questions connexes