2009-08-13 4 views
5

Этот вопрос связан с установкой Windows на PHP5.Перемещение файла в Корзину (PHP)

Выполнение файла unlink() затрудняет восстановление.

Вместо этого я хотел бы переместить файл в Корзину (без exec()).

У вас есть идея?

Благодарим за помощь.

+0

Просто пояснение, чтобы упростить данное решение. Оба * is_file * и * is_array * возвращают логическое значение (то есть true или false). Сравнение его с === с истинным или ложным является избыточным. Хотя я видел хуже, например * $ var = is_array ($ arr)? true: false; * но все же ... – 2011-06-21 03:40:48

ответ

7

Это единственное решение, которое работает и переносится на всех дисках.

function Recycle($filename) 
{ 
    if (is_file($filename) === true) 
    { 
     $filename = realpath($filename); 
     $recycle = glob(current(explode('\\', $filename, 2)) . '\\RECYCLER\\*', GLOB_ONLYDIR); 

     if (is_array($recycle) === true) 
     { 
      return rename($filename, current($recycle) '\\' . basename($filename)); 
     } 
    } 

    return false; 
} 

Удаленные файлы правильно переехал, например:

O:\RECYCLER\S-1-5-21-1715567821-1390067357-1417001333-1003 

Восстановление из корзины должно быть возможным, однако я не проверял.

EDIT: Я только что обновил эту функцию для работы с файлами с относительными путями.

+0

Привет, спасибо за функцию. К сожалению, для меня это не работает (файл исчезает, но я не знаю, где его нет. Это не в системной папке [DRIVE]: \ RECYCLER \\).) :(Кажется (верьте мне, если я ошибаюсь), что OS записывает некоторые данные в системный файл, когда мы перемещаем файл в «корзину». Может быть, я должен сделать exec() с некоторой командой DOS. :) BTW Я нахожусь в XP. – Toto

+0

Я тоже на XP, и эта функция отлично работает для меня, файл появляется на корзине, и я тоже могу его увидеть. Например, если вы удаляете файл, расположенный в C: убедитесь, что вы включили «Показать скрытые папки», затем перейдите к C: \ RECYCLER \ __ SOMETHING __ \, файл должен быть там, то же самое работает и для других дисков (по умолчанию поведение Windows) , Он также должен появиться в Корзине. –

+0

Нужно было работать над относительными путями, теперь должно работать нормально. Скажи мне, если он все еще не работает. –

7

Почему вы просто не создаете одну папку и не называете ее «Корзиной», а затем вместо unlink() .. просто переместите файлы в эту папку «Корзина»?

Если вы хотите переместить файл, используйте функцию php rename().

Позже вы можете запустить скрипт хрон, который проверяет время файлов, а затем вы можете удалить файлы, скажем, старше 10 дней и т.д.

Я надеюсь, что это помогает.

+0

Действительно, это тот же принцип. Корзина - это не что иное, как карта, в которой файлы не могут быть выполнены. Файлы «Удаленные» все еще существуют и все еще занимают одно и то же место в Корзине. – KdgDev

+0

Нет восстановления из Recyble Bin, хотя .. –

+2

В моих особых потребностях, env. это только Windows. Если файлы перемещаются в корзину, я могу лучше взаимодействовать с ними с другими двоичными инструментами (WinSCP, Explorer и т. Д.), Поскольку они распознаются как переработанные файлы. «Корзина» в моем приложении не предоставила мне все эти функции, и мне пришлось бы программировать функции, которые уже находятся в ОС. :) – Toto

0

Это работает для меня, using MaDdoGs CmdUtils, под Win7 x64, php 5.4.24. Также с большими файлами, нечетными именами файлов, ...

function recycle($filename) 
{ 
    if (!is_file($filename)) 
     return false; 
    system(__DIR__.'/third-party/Recycle.exe -f "'.$filename.'"', $r); 
    return $r; 
} 
Смежные вопросы