2010-11-15 7 views
1

Je vais avoir des problèmes de supprimer un fichier à partir d'un répertoire supérieur, j'ai trouvé ce post et essayé, mais pas de chance ....:Suppression de fichiers dans le répertoire supérieur

gotdalife arobase gmail point com 25-Sep -2008 02:04

pour quelqu'un qui a eu un problème avec les autorisations niés erreur, il est parfois causé lorsque vous essayez de supprimer un fichier qui se trouve dans un dossier supérieur dans la hiérarchie à votre répertoire de travail (c'est-à-dire en essayant de supprime un chemin qui commence par "../").

Donc, pour contourner ce problème, vous pouvez utiliser chdir() pour modifier le répertoire de travail dans le dossier où le fichier que vous voulez supprimer le lien se trouve.

<?php 
>  $old = getcwd(); // Save the current directory 
>  chdir($path_to_file); 
>  unlink($filename); 
>  chdir($old); // Restore the old working directory  ?> 

ici est le code que j'ai actuellement:

session_start(); 

if (!isset($_SESSION['agent']) OR ($_SESSION['agent'] !=md5($_SERVER['HTTP_USER_AGENT']))){ 

    require_once ('includes/login_functions.inc.php'); 
    $url = absolute_url(); 
    header("Location: $url"); 
    exit(); 
} 



$folder = $_GET['folder']; 
$filename = $_GET['name']; 
$path = "../gallery/photos/$folder"; 

if (isset($_POST['submitted'])) { 

    if ($_POST['sure'] == 'Yes') { 

     $old = getcwd(); // Save the current directory 
     chdir($path); 
     unlink($filename); 
     chdir($old); // Restore the old working directory 

    } 
    else{ 

     echo '<p>The photo has NOT been deleted.</p>'; 
    } 
} 

Je reçois le message d'erreur:

Attention: unlink() [function.unlink]: Aucune erreur dans J: \ xampp \ htdocs \ bunker \ admin \ delete_file.php sur la ligne 37

ligne 37 étant:

unlink($filename); 

quelqu'un peut-il voir ce que j'ai fait de mal?

+2

http://4.bp.blogspot.com/_Mp0d-dsENrg/S15lV3B8PHI/AAAAAAAAiA8/UTTVHEEwD44/s400/59934678.jpg –

+1

Avez-vous essayé de déclarer explicitement le chemin? (par exemple, pas de "../" mais un vrai chemin difficile) Je ne sais pas où cela vous laissera si cela fonctionne/ne fonctionne pas mais pourrait être un bon test :) – clifgriffin

+0

Ummm, avez-vous une idée à quel point d'une idée qui est? Je veux dire passer une entrée brute à 'chdir' et exécuter' unlink' ...? Au moins faire une sensibilisation pour empêcher 'delete_file.php? Folder = ../../../../../ etc & file = passwd' ... (les permissions empêcheront probablement cela, mais il y a forcément des fichiers qu'il peut supprimer qui sont tout aussi mauvais pour vous au moins) ... – ircmaxell

Répondre

2

J'utilise toujours des noms de chemin de fichier absolus.

Je définirais le filedir comme une constante dans votre config, puis concaténerais afin que vous ayez un chemin de fichier absolu, puis passer un appel à unlink(). Btw: J'espère que vous savez que votre code est fortement insecure.

0

Voir ici:

http://bugs.php.net/bug.php?id=43511

et ici

http://php.bigresource.com/Track-php-03TimDKO/

http://www.phpbuilder.com/board/showthread.php?t=10357994

Bien que je ne recommanderais pas le faire, selon les commentaires ci-dessus. Y a-t-il l'option pour une approche différente?

+0

désolé im très nouveau à php donc je ne suis pas au courant de toutes les autres approches, je suis ouvert aux suggestions ... tout ce que je dois faire est de supprimer un fichier sélectionné, mais il semble me causer problème après problème. – alsweet

Questions connexes