2010-11-15 2 views
1

У меня возникли проблемы при удалении файла из высшего каталога, я нашел этот пост и попытался это, но не повезло ....:Удаление файлов в каталоге высшего

gotdalife в GMAIL точка ком 25-сен -2008 2:04

для тех, кто имел проблемы с разрешений отклоненных ошибку, это иногда возникает при попытке удалить файл, который находится в папке выше в иерархии вашего рабочего каталога (т.е. при попытке удалите путь, начинающийся с «../»).

Так, чтобы обойти эту проблему, вы можете использовать Chdir(), чтобы изменить рабочий директории в папку, где находится файл вы хотите разъединить находится.

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

вот код, который я в настоящее время есть:

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>'; 
    } 
} 

Я получаю сообщение об ошибке:

Предупреждение: UNLINK() [function.unlink]: Ошибка J: \ xampp \ htdocs \ bunker \ admin \ delete_file.php в строке 37

линии 37 являются:

unlink($filename); 

может кто-нибудь увидеть, что я сделал не так?

+2

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

+1

Вы пытались явно объявить путь? (например, нет «../», но фактический жесткий путь) Не знаю, где это оставит вас, если оно работает/не работает, но может быть хорошим тестом :) – clifgriffin

+0

Ummm, вы хоть представляете, насколько плохи идеи, которая есть? Я имею в виду передачу сырого ввода в 'chdir' и запуск' unlink' ...? По крайней мере, сделайте некоторую сенсибилизацию, чтобы предотвратить «delete_file.php? Folder = ../../../../../ etc & file = passwd' ... (разрешения, скорее всего, будут предотвращать это, но обязательно будут файлы, которые он может удалить, как минимум, для вас как минимум) ... – ircmaxell

ответ

2

Я всегда использую абсолютные имена файлов.

Я бы определил filedir как константу в вашей конфигурации, а затем объединил, чтобы у вас был абсолютный путь к файлу, а затем сделайте вызов unlink().

КПП: Я надеюсь, вы знаете, что ваш код высоко небезопасный.

0

Смотрите здесь:

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

и здесь

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

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

Хотя я Wouldnt рекомендую делать это, в соответствии с комментариями выше. Есть ли вариант для другого подхода?

+0

извините im очень новичок в php, поэтому я не знаю любых других подходов, я открыт для предложений ... все, что мне нужно сделать, это удалить выбранный файл, но он, похоже, вызывает у меня проблему после проблемы. – alsweet

Смежные вопросы