КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

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

Проверка существования файла

if (file_exists("testfile.txt")) echo "Файл существует";

Создание и чтение файла

Создать файл очень просто функцией touch()
touch("img.jpg");
Функция принимает 3 параметра: имя файла, время последней модификации, время последнего обращения. Если такой файл уже существует, время его последней модификации будет изменено либо на текущее время либо на время, заданное необязательным вторым параметром без перезаписи файла. Время должно быть задано в формате метки времени Unix.
Для создания и открытия файлов используется функция fopen(). Функции fopen() нужно передать всего два параметра — имя файла и режим доступа к файлу:
$handle = fopen("/home/den/file.txt", "r");

Режимы доступа:

Открытие двоичного файла, к примеру, рисунка происходит таким же образом, только с флагом b:
$fl=fopen("img/1.jpg", "rb"); //возвращает дескриптор Resource id #3
if(!$fl){ 
  echo "Ошибка открытия файла"; 
} 
echo $fl;

Чтение файла

Существуют три способа чтения файла:
♠ открываем файл функцией fopen() и читаем файл функцией fread();
♥ построчное чтение файла с помощью функции file();
♦ чтение всего файла сразу функцией file_get_contents().
Функции fread() нужно передать два параметра— дескриптор файла и количество байтов, которое должно быть прочитано из файла:
$handle = fopen("/home/den/file.txt", "r");
// читаем из файла 100 байтов и помещаем в строку 
$s = fread($handle, 100);
Если в файле будет всего 50 байтов, то функция fread() прочитает только эти 50 байтов. При чтении файла нужно контролировать, достигнут ли конец файла. Функция feof() возвращает true, если достигнут конец файла.
$handle = fopen("file.txt", "r");
$s = "";
while (!feof($handle)){
  $s = $s . fread($handle, 100);
}
echo $s;
По окончании обработки файл нужно закрыть с помощью функции fclose():
fclose($handle);
Вообще, РНР при завершении сценария автоматически закрывает все открытые файлы, но самостоятельное закрытие файла считается хорошим тоном.
Для чтения строки из файла используются следующие функции:
□ fgets($handle, длина строки) — читает строку из файла;
□ fgetss($handle, длина строки) — читает строку из файла и удаляет HTML-теги.
Использовать file() намного проще. file() читает файл в массив. Каждый элемент массива — это прочитанная строка из файла. Вот как можно организовать построчное чтение файла:
$f = file('file.txt');
Все, что осталось, — это вывести файл. Вот пример построчного чтения и вывода HTML-страницы:
$lines = file('http://www.example.com/file.html');
foreach ($lines as $line_num => $line) {
  echo "Строка #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}
Функция file_get_contents() возвращает сразу все содержимое файла:
echo file_get_contents('file.txt');

Перемещение по файлу

Для установки курсора в файле на нужную позицию используется функция fseek().
fseek ($handle , смещение, флаг);
fseek($fh, 0, SEEK_END);
Флаги:
SEEK_SET - Устанавливает смещение в offset байт. SEEK_CUR - Устанавливает смещение в текущее положение плюс offset. SEEK_END - Устанавливает смещение в конец файла плюс offset. Для смещения позиции перед концом файла необходимо передать отрицательное значение offset и установить флаг SEEK_END.

Запись файла

Для этого можно испольювать следующие функции:
file_put_contents() — записывает строку в файл; ,
fwrite () (или fputs ()) — используется как для записи строки, так и для записи бинарных данных.
Используя file_put_contents(), вам не нужно получать дескриптор файла, проверять этот дескриптор, вызывать fwrite(). Вам нужно просто указать имя файла, данные и флаги. Самый полезный флаг FILE_APPEND, если вы будете его использовать, данные будут записаны в конец файла. Если файла не существует, он будет создан.
Функции fwrite() нужно передать дескриптор файла, данные и необязательный параметр length — максимальную длину записываемых данных (если строка string длиннее, чем length, ТО будет записано length байтов). Если вы используете fwrite() и хотите убедиться, что данные записаны в файл, а не остались где-то в буфере записи, используйте функцию fflush():
fflush($handle);

Копирование файлов

copy('file1.txt', 'file2.txt') or die( "Копирование невозможно");
echo "Файл успешно скопирован в 'file2.txt'";

Переименование и перемещение файла

Для перемещения файла его следует переименовать:
if (!rename('file1.txt', 'file2.txt')) echo "Переименование невозможно";
else echo "Файл успешно переименован в 'file2.txt'";

Создание временных файлов

Иногда для хранения промежуточных данных нам нужен временный файл. Созда­ вать его с помощью fopen() не хочется. Во-первых, тогда нам нужно контролировать имя файла — чтобы ненароком не перезаписать существующий файл. Во- вторых, нам нужно удалить временный файл после обработки. Намного проще использовать функцию tmpfiie(), создающую временный файл в каталоге /tmp. Временный файл открывается в режиме чтения/записи.
Вот пример использования:
$temp = tmpfiie();
fwrite($temp, "данные");
fseek($temp, 0); // переходим на начало файла
echo fread($temp, 1024);
fclose($temp); // при закрытии временный файл удаляется

Блокирование файлов при коллективном доступе

Когда одновременно предпринимается попытка записи в файл более чем одним пользователем, файл может быть поврежден. А когда один пользователь ведет в него запись, а другой считывает из него данные, с файлом ничего не случится, но читающий может получить весьма странные результаты. Чтобы обслужить сразу несколько одновременно обращающихся к файлу пользователей, нужно воспользоваться функцией блокировки файла flock(). Эта функция ставит в очередь все другие запросы на доступ к файлу до тех пор, пока ваша программа не снимет блокировку.
$fh = fopen("testfile.txt". 'r+') or die("Сбой открытия файла");
$text = fgets($fh);
if (flock($fh, LOCK_EX)){
  fseek($fh, 0,  SEEK_END);
  fwrite ($fh, "$text") or die("Сбой записи в файл");
  flock($fh, LOCK_UN);// снимаем блокировку
}
fclose($fh):
echo "Файл 'testfile.txt' успешно обновлен":

Удаление файла

Для удаления файла из файловой системы достаточно воспользоваться функцией unlink():
if (!unlink('file1.txt')) echo "Удаление невозможно ";
else echo "Файл 'file1.txt' удален успешно";
Рекурсивная функция для удаления всех файлов папок в указанном каталоге:
function deleteAllFiles($dir){
  $list = glob($dir."/*");
  for ($i=0; $i < count($list); $i++){      
    if (is_dir($list[$i])) deleteAllFiles ($list[$i]);
    else unlink($list[$i]);
  }
}
Функция glob() - Находит файловые пути, совпадающие с шаблоном, в данном случае все ("/*") файлы в каталоге $dir
Пример использования:
deleteAllFiles('/images');
2015.06.07 125

Нажимаю "Мой компьютер"... не моет, сука.
Войдите или Зарегистрируйтесь чтобы оставить комментарий

Комментарии


    Яндекс.Метрика Яндекс.Метрика