[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция рекурсивного копирования дирректоррии
LRCenter
Здравствуйте. Есть замечательная функция, копирования дирректории со всеми вложениями.

function dircpy($basePath, $source, $dest, $overwrite = false){
if(!is_dir($basePath . $dest))
mkdir($basePath . $dest);
if($handle = opendir($basePath . $source)){
while(false !== ($file = readdir($handle))){
if($file != '.' && $file != '..'){
$path = $source . '/' . $file;
if(is_file($basePath . $path)){
if(!is_file($basePath . $dest . '/' . $file) || $overwrite)
if(!@copy($basePath . $path, $basePath . $dest . '/' . $file)){
echo '<font color="red">File ('.$path.') could not be copied, likely a permissions problem.</font>';
}} elseif(is_dir($basePath . $path)){
if(!is_dir($basePath . $dest . '/' . $file))
mkdir($basePath . $dest . '/' . $file);
dircpy($basePath, $path, $dest . '/' . $file, $overwrite);
}}}closedir($handle);}}



Всем хороша эта функция, только вот один не достаток, TRUE-FALSE, не возвращает.
Куда-бы вставить return TRUE; и return FALSE; чтобы можно было использовать ее с операторами ветвлений?



Спустя 5 часов, 15 минут, 12 секунд (25.06.2010 - 15:24) vagrand написал(а):
Отформатируй код нормально - тогда быстрее помогут.

Спустя 14 минут, 25 секунд (25.06.2010 - 15:39) twin написал(а):
Это же рекурсивная функция. Она может выдать что то только по окончании работы.

<?php

function
dircpy($basePath, $source, $dest, $overwrite = false)
{

if(!is_dir($basePath . $dest))mkdir($basePath . $dest);

if($handle = opendir($basePath . $source))
{

while(false !== ($file = readdir($handle)))
{

if($file != '.' && $file != '..')
{
$path = $source . '/' . $file;

if(is_file($basePath . $path))
{

if(!is_file($basePath . $dest . '/' . $file) || $overwrite)
if(!@copy($basePath . $path, $basePath . $dest . '/' . $file))
{
echo '<font color="red">File (' . $path . ') could not be copied, likely a permissions problem.</font>';
}
}

elseif(is_dir($basePath . $path))
{

if(!is_dir($basePath . $dest . '/' . $file))mkdir($basePath . $dest . '/' . $file);
dircpy($basePath, $path, $dest . '/' . $file, $overwrite);
}
}
}

closedir($handle);
}
}

Спустя 20 часов, 54 минуты, 22 секунды (26.06.2010 - 12:33) LRCenter написал(а):
Это значит что ее в принципе нельзя использовать в конструкциях вида:

if (функция(а)) {...}


?

Спустя 1 час, 7 минут, 5 секунд (26.06.2010 - 13:40) SlavaFr написал(а):
Цитата (LRCenter @ 26.06.2010 - 09:33)
Это значит что ее в принципе нельзя использовать в конструкциях вида:

if (функция(а)) {...}


?

можно, но в if не когда входить не будет. smile.gif
ясное дело, что если в функцие нет ретурна, то не следует ожидать что она чтото
на выходе отдаст.

А собственно зачем тебе true или false?
или другими словами в каком случае ты считаеш, что функция должна true выдовать а в каком ты от нее false ждеш?

Спустя 19 часов, 43 минуты, 27 секунд (27.06.2010 - 09:23) LRCenter написал(а):
Ну TRUE, понятное дело если все файлы и папки скопированны без ошибок.

Спустя 6 минут, 22 секунды (27.06.2010 - 09:30) LRCenter написал(а):
А подскажите где бы мне взять готовую функцию рекурсивного перемещения папки со всем вложенным содержимым и струтурой подпапок?

Т.е. как выше но только чтоб не копировал а перемещал. Как я понимаю, использовать эту функцию+ рекурсивное удаление, не рационально. Надо делать на основе rename()?

Наверное что-нибудь в таком роде использовать будет неправильно.

function mover($src,$dst) {    
$handle=opendir($src);
if (!is_dir($dst)) mkdir($dst,0755);
while ($file = readdir($handle)) {
if (($file!=".") and ($file!="..")) {
$srcm=$src."/".$file;
$dstm=$dst."/".$file;
if (is_dir($srcm)) {
mover($srcm,$dstm);
} else {
copy($srcm,$dstm);
unlink($srcm);
}
}
}

closedir($handle);
rmdir($src);
}



Или все-таки подойдет? Опять же как сделать чтоб true возварщал если все получилось?

Спустя 14 минут, 54 секунды (27.06.2010 - 09:45) LRCenter написал(а):
хм для этой задачи подошел простой rename();
Не думал что будет так просто - переместил со всеми файлами и поддирректориями biggrin.gif

Была бы такаяже простая функция для копирования папки с содержимым sad.gif


_____________
Меньше кода - меньше багов ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.