ProfiPHPProfiPHP
Категория: Функции для работы с файловой системой

Функция Copy

Функция Copy копирует файл.
bool copy( string $source, string $dest [, resource $context ] )
В параметре Source должен содержаться путь к исходному файлу.

В параметре Dest необходимо указать путь к целевому файлу. Если Dest является URL, то операция копирования может завершиться ошибкой, если обертка URL не поддерживает перезаписывание существующих файлов. Если целевой файл уже существует, то он будет перезаписан.

Параметр Context являет собой корректный ресурс контекста, созданный функцией Stream_context_create.

Функция Copy возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Пример использования:
copy( $_SERVER['DOCUMENT_ROOT'].'/archive.zip', $_SERVER['DOCUMENT_ROOT'].'/folder/archive.zip' );
Если вы хотите переименовать файл, используйте функцию Rename.

Комментарии

Nenene
Атомарна ли функция copy? Выполняет ли эта функция эксклюзивную блокировку (файла, в который пишет), относительно нескольких пользователей одного и того же php скрипта?

Иными словами, если один пользователь выполняет команду copy и начинает в этот файл писать (здесь мысленно замедлим время), и так сложилось, что как раз во время записи второй пользователь выполнил её же (copy), а третий пользователь решил проверить наличие файла (file_exists), а четвертый пользователь решил открыть и прочитать этот файл (используя shared lock) - что в этот момент получит второй, третий и четвертый пользователь?
Дмитрий
Можно читать много литературы, но самым надежным способом найти подводные камни является исключительно метод тестирования.

Если начать процесс копирования файла и в данный момент изменять исходный файл, то оба процесса закончатся успешно. То есть, произойдет правильное копирование исходного файла и правильное его редактирование.

Если начать копировать файл, в процессе копирования изменить данный файл и снова выполнить процесс копирования, то все операции также закончатся успешно. А именно: первое копирование произойдет в точности к первому содержанию файла, а второе копирование - отредактированному файлу.

Операция проверки существования файла всегда работает правильно и не зависит от копирования.

Использование общего запирания (LOCK_SH), также работает правильно.

В результате можно сделать следующие выводи. Интерпретатор PHP правильно выполняет функцию копирования и нет причин беспокоится об ошибках. В данное время с очень большими скоростями записи на запоминающие устройства операции копирования происходят практически незаметно.

Добавить комментарий

Имя:
Текст комментария: