26.2. Копирование файлов в PHP
Ни одна операционная система не обходится без таких элементарных функций, как копирование и переименование файлов. Только представьте на минуту, что вам предлагают установить сверхбыструю операционную систему, но с одним условием, что там будут отсутствовать функции копирования или переименования файлов. Уверены, что бы ни предлагали вам, ВЫ не согласитесь установить такую операционную систему на свой компьютер, и все дело в каких-то, на первый взгляд совсем незаметных, функциях. Собственно говоря, так и любой язык программирования проиграет в популярности в случае отсутствия этих фикции. С течением времени эти функции станут незаменимыми помощниками вам при работе в РНР. Рассмотрим две функции:
• сору(),
• rename().
Функция сору() копирует файл из одного места в другое, предварительно указанное при помощи вносимых параметров этой функции. Функция сору() подчинена следующему синтаксису.
int сору (string source, string dest)
В данной функции вместо параметра source указывается строка пути файла с нем копируемого файла, также можно использовать переменные. Если указывается просто имя файла без дополнений (каталога, диска и т. д.), то интерпретатор подразумевает, что копируемый файл находится в том же месте, где и сам исполняемый файл, т. е. файл, в котором содержится скрипт. Параметр dest указывает на путь, куда будет копироваться файл. Сама функция возвращает значение true в результате успешного копирования (если не возникнет никаких ошибок), в противном случае — false. Например:
<?php
$path = "Z:/home/localhost/www/1.txt";
$file = basename($path);
if (copy($file, "Z:/home/localhost/1.txt")) {
if (copy ($file, "Z:/home/localhost/2.txt") )
echo "Копирование файла $file произведено удачно!";
}
else {
echo "Копирование файла $file не выполнено! <br>";
}
echo "Исправьте ошибки и проделайте операцию копирования заново";
}
?>
Опишем работу приведенного примера. Сначала задается путь к файлу 1.txt После этого используется функция basename(), чтобы получить само имя этого файла. Имя файла передается в переменную $file. Именно с этим именем будут производиться манипуляции, т. е. именно этот файл будет копироваться. Если произойдет успешное копирование файла 1.txt в указанном направлении: Z:/home/ localhost/1. txt, то указатель выполнения скрипта перейдет в следующий блок, т. е. опять будет выполняться проверка условия. Мы воспользовались этой операцией, чтобы заострить ваше внимание на том, что функция сору() помимо копирования файлов может также производить копирование файла с изменением его имени. При выполнении программы файл 1.txt будет скопирован два раза. Первый раз — Z: /home/localhost/1.txt, второй — Z: /home/localhost/2.txt). В директории localhost появится два идентичных файла, только с разными именами. Один будет иметь имя 1.txt, второй 2.txt.
ВНИМАНИЕ
При использовании функции сору() необходимо четко указывать путь, куда будет копироваться файл, а также его имя. Если вы просто укажете директорию, в которую необходимо скопировать файл, программа вызовет ошибку.
В результате выполнения программы на экран будет выведено:
Копирование файла 1.txt произведено удачно!
При указании каких-либо неверных параметров программа вернет следующие строки:
Копирование файла 1.txt не выполнено!
Исправьте ошибки и проделайте операцию копирования заново
Если нужно переименовать файл, используют функцию rename(). Она перемещает файл из одного места и записывает в другое, при этом изменяя его имя. Функция rename() имеет следующий синтаксис:
int rename (string oldname, string newname)
Параметр oldname указывает имя файла, который мы собираемся переименовать. Следующий за ним параметр указывает новое имя файла — newname. Функция rename() в случае положительного исхода возвращает значение true, в случае отрицательного — false. Например:
<?php
$path = "Z:/home/localhost/www/1.txt";
$file = basename ($path) ;
if (rename($file, "Z:/home/localhost/newname.txt") )
{
есho "Изменение имени файла $file произведено удачно!";
}
else {
echo "Изменение имени файла $file не выполнено!<br>";
echo "Исправьте ошибки и проделайте операцию копирования заново" ;
}
?>
В результате выполнения этого скрипта произойдет удаление файла 1.txt по пути Z: /home/localhost/www/1.txt, перемещение его по пути Z : /home/localhost/' с новым именем newname.txt, хотя все параметры данного файла будут полностью соответствовать файлу 1.txt, т. е. произойдет просто переименование файла и перемещение его в другой каталог. Результатом работы данного скрипта будет следующая строка:
Изменение имени файла 1.txt произведено удачно!
Описанные функции используются в РНР 3 и РНР 4.