Домены от REG.RU

Работа с файлами в CakePHP

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

И так, начнем...

Работа с данными

Выполнение практически всех действий с файлами подразумевает первоначальное создание объекта File.

if (!class_exists('File')) {
require LIBS . 'file.php';
}
$my_file = new File($filename, true);

После чего мы можем работать с файлом $filename через переменную $my_file.

Первое что нам может понадобится, это записать данные в файл. Для этого есть как минимум две функции: append и write. Первая из них позволяет дописать данные в файл, а вторая позволяет как дописать, так и переписать файл, все зависит от переданных параметров.

append ( $data, $force = false )
где,
$data - это данные которые вы хотите добавить в файл;
$force - если файл открыт, то заставляет его открыться заново, иначе, используется уже существующий дескриптор.

$my_file = new File('test.text', true);
$my_file->append('Hello world!');

write( $data, $mode = 'w', $force = false )
где,
$data - это данные которые вы хотите добавить в файл;
$mode - параметры которые используются при открытие файла в PHP функции fopen;
$force - если файл открыт, то заставляет его открыться заново, иначе, используется уже существующий дескриптор.

Причем, если не существует директории для файла, то она автоматически создается.

$my_file = new File('test.text', true);
$my_file->write('В этом файле только одна строка');

Хорошо, а как прочитать нам записанные данные? Для этого есть функция read.

read( $bytes = false, $mode = 'rb', $force = false )
где,
$bytes - количество байт которые необходимо считать, если false, то файл считается целиком;
$mode - параметры которые используются при открытие файла в PHP функции fopen;
$force - если файл открыт, то заставляет его открыться заново, иначе, используется уже существующий дескриптор.

//Вывести содержимое файла
$my_file = new File('test.text', true);
echo $my_file->read();
//Вывести первые 50 символов
$my_file = new File('test.text', true);
echo $my_file->read(50);

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

$my_file = new File('test.text', true);
$my_file->delete();

Так же, хотелось бы отметить, что после работы с файлами, желательно закрывать их дискрипторы с помощью функции close.

$my_file = new File('test.text', true);
echo $my_file->read();
$my_file->close();

Информация о файле

Проверка существования файла осуществляется с помощью функции exists.

$my_file = new File('test.text', true);
if ($my_file->exists()) echo 'Файл существует';
else echo 'Такого файла нет';

Далее я просто перечислю все функции которые возвращают логическое значение:
executable() - выполняемый ли файл;
readable() - можно ли читать этот файл;
writable() - можно ли писать в файл.

С помощью функции info можно получить информацию о расположение, имени и типе файла. Функция возвращает массив со следующими ключами:

  • dirname - каталог, в котором размещается файл;
  • basename - полное имя файла;
  • extension - расширение файла;
  • filename - имя файла (без расширения).

$my_file = new File('/var/www/app/webroot/css/style.css', true);
pr( $my_file->info());
/*
Array
(
    [dirname] => /var/www/app/webroot/css
    [basename] => style.css
    [extension] => css
    [filename] => style
)
*/

Для проверки времени последнего обращения или изменения файла, используются функции lastAccess и lastChange соответственно.

$my_file = new File('/var/www/app/webroot/css/style.css', true);
echo 'Последний раз файл просматривали: ' . date('Y-m-d H-i-s', $my_file->lastAccess());
echo 'Последний раз файл изменяли: ' . date('Y-m-d H-i-s', $my_file->lastChange());

И на последок, функция расчета контрольной суммы файла md5.

$my_file = new File('/var/www/app/webroot/css/style.css', true);
echo 'Крнтрольная сумма: ' . $my_file->md5();
Поделиться @

Пока нет коментариев. Будьте первым!