2009-10-12 6 views
0

Я хочу переместить все файлы из одной папки в другую. мой код выглядит следующим образом. в этом я сделал папку, в которой я хочу, чтобы скопировать все файлы из папки templatsкопировать файл из одной папки в другую

$doit = str_replace(" ", "", $slt['user_compeny_name']); 
mkdir("$doit"); 
$source = "templat/"; 
$target = $doit . "/"; 
$dir = opendir($source); 
while (($file = readdir($dir)) !== false) { 
    copy($source . $file, $target . $file); 
} 

Он работает отлично. скопировать все файлы, но дать предупреждение о том, что первый аргумент для копирования() функции не может быть каталогом

может ли один помочь мне как можно скорее

ответ

4

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

while (($file = readdir($dir)) !== false) 
{ 
    if(!is_dir($file)) 
    { 
     copy($source.$file, $target.$file); 
    } 
} 
3

Вы не составляет для . и .. файлов в верхней части каталога. Это означает, что первое, что он пытается скопировать, это «\ template». который будет аналогичен попытке скопировать каталог.

Просто добавьте что-то вроде:

if ($file !== "." && $file !== "..") 
... 
3

opendir() будет включать в себя элементы . и .. согласно documentation.

Вам нужно будет исключить их, используя код в других комментариях.

+0

спасибо! теперь он отлично работает – Rajanikant

0

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

Между тем объекты были введены с гораздо большим количеством функций и возможностей. Излишне говорить, что остальные ответы будут по-прежнему работать.

Но здесь мы идем, используя DirectoryIterator:

$szSrcFolder = 'source_folder'; 
$szTgtFolder = 'target_folder'; 

foreach (new DirectoryIterator($szSrcFolder) as $oInfo) 
    if ($oInfo->isFile()) 
     copy($oInfo->getPathname(), $szTgtFolder . DIRECTORY_SEPARATOR . $oInfo->getBasename()); 

Помните, что в этом сценарии, все пути относительно рабочей директории самого сценария.

Я думаю, что это объяснение, но мы посмотрим. Эти несколько строк будут перебирать все содержимое исходной папки и проверять, является ли это файлом и скопировать его в целевую папку, сохраняя исходное имя файла.

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