2011-03-17 7 views
9

J'ai le script du répertoire de liste php à partir de ce lien http://www.gaijin.at/en/scrphpfilelist.php. Comment supprimer un seul fichier du directoy? J'ai essayé unlink, mais il a supprimé tous les fichiers de ce répertoire. ceci le code court ce que j'ai obtenu du lien!php supprimer un seul fichier dans le répertoire

while ($file = readdir ($hDir)) { 
if (($file != '.') && ($file != '..') && (substr($file, 0, 1) != '.') && 
    (strtolower($file) != strtolower(substr($DescFile, -(strlen($file))))) && 
    (!IsFileExcluded($Directory.'/'.$file)) 
    ) { 

    array_push($FilesArray, array('FileName' => $file, 
           'IsDir' => is_dir($Directory.'/'.$file), 
           'FileSize' => filesize($Directory.'/'.$file), 
           'FileTime' => filemtime($Directory.'/'.$file) 
           )); 
} 
} 
$BaseDir = '../_cron/backup'; 
$Directory = $BaseDir; 

foreach($FilesArray as $file) { 
    $FileLink = $Directory.'/'.$file['FileName']; 
    if ($OpenFileInNewTab) $LinkTarget = ' target="_blank"'; else $LinkTarget = ''; 
    echo '<a href="'.$FileLink.'">'.$FileName.'</a>'; 
    echo '<a href="'.unlink($FileLink).'"><img src="images/icons/delete.gif"></a></td>'; 
    } 
} 

l'appel du dossier de répertoire de liste: sauvegarde.
dans le unlink($FileLink), lorsque je survoler le lien a un autre dossier dans le dossier d'administration?

+0

Pouvez-vous poster le code que vous avez essayé s'il vous plaît? – Harold

+0

vous avez utilisé dissocier à l'intérieur d'une boucle de sorte que tout à l'intérieur de la boucle est parti. –

+0

@experimentX aucune idée comment mettre «unlink» sans supprimer tous les fichiers – tonoslfx

Répondre

22

unlink('path_to_filename'); supprimera un fichier à la fois.

Si tous vos fichiers du répertoire ont disparu, vous avez listé tous les fichiers et les avez supprimés un à un en boucle.

Eh bien, vous ne pouvez pas supprimer dans la même page. Vous devez faire avec une autre page. créer une page appelée deletepage.php qui contiendra le script à supprimer et lier à cette page avec 'fichier' comme paramètre.

foreach($FilesArray as $file) 
{ 
    $FileLink = $Directory.'/'.$file['FileName']; 

    if($OpenFileInNewTab) $LinkTarget = ' target="_blank"'; 
    else $LinkTarget = ''; 

    echo '<a href="'.$FileLink.'">'.$FileName.'</a>'; 
    echo '<a href="deletepage.php?file='.$fileName.'"><img src="images/icons/delete.gif"></a></td>';   
} 

Sur le deletepage.php

//and also consider to check if the file exists as with the other guy suggested. 
$filename = $_GET['file']; //get the filename 
unlink('DIRNAME'.DIRECTORY_SEPARATOR.$filename); //delete it 
header('location: backto prev'); //redirect back to the other page 

Si vous ne voulez pas naviguer, puis utilisez ajax pour faire élégante.

+0

merci beaucoup;) – tonoslfx

+1

@ boyee077 vous êtes les bienvenus –

+1

Voila, vous avez créé une sécurité béante trou. Les gens peuvent supprimer ce qu'ils veulent s'ils jouent avec le paramètre 'file'. – middus

3

unlink est la bonne fonction php pour votre cas d'utilisation.

unlink('/path/to/file'); 

Sans plus d'informations, je ne peux pas vous dire ce qui s'est passé lorsque vous l'avez utilisé.

1

Si vous souhaitez supprimer un seul fichier, vous devez, comme vous l'avez découvert, utiliser la fonction unlink().

Cette fonction va supprimer ce que vous lui passez comme paramètre: ainsi, c'est à vous de lui passer le chemin au fichier qu'il doit supprimer.


Par exemple, vous allez utiliser quelque chose comme ceci:

unlink('/path/to/dir/filename'); 
7

http://php.net/manual/en/function.unlink.php

Délier peut supprimer en toute sécurité un seul fichier; assurez-vous juste le fichier que vous le supprimez en fait un fichier et non un répertoire (« » ou « .. »)

if (is_file($filepath)) 
    { 
    unlink($filepath); 
    } 
3

Le script que vous avez téléchargé liste le contenu d'un dossier spécifié. Vous avez probablement mis le unlink - appel dans l'un des while -loops qui liste les fichiers.

EDIT - Maintenant que vous avez publié votre code:

echo '<a href="'.unlink($FileLink).'"><img src="images/icons/delete.gif"></a></td>'; 

Faire cela appelle le unlink -fonction chaque fois que la ligne est écrite, la suppression de votre fichier. Vous devez écrire un lien vers un script qui contient une fonction de suppression et transmettre un paramètre qui indique à votre script ce qu'il doit supprimer.

Exemple:

<a href="/path/to/script.php?delete='. $FileLink .'">delete</a> 

Vous ne devriez pas passer le chemin vers un fichier ce script et juste le supprimer si, parce que l'être malfaisant peut l'utiliser pour supprimer simplement tout ou faire d'autres choses mauvaises.

+0

yup son intérieur foreach! – tonoslfx

0
<?php 
    if(isset($_GET['delete'])){ 
     $delurl=$_GET['delete']; 
     unlink($delurl); 
    } 
?> 
<?php 
if ($handle = opendir('.')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      echo "<a href=\"$entry\">$entry</a> | <a href=\"?delete=$entry\">Delete</a><br>"; 
     } 
    } 
    closedir($handle); 
} 
?> 

This is It

4
Simply You Can Use It 

$sql="select * from tbl_publication where id='5'"; 
$result=mysql_query($sql); 
$res=mysql_fetch_array($result); 
//Getting File Name From DB 
$pdfname = $res1['pdfname']; 
//pdf is directory where file exist 
unlink("pdf/".$pdfname); 
Questions connexes