Работа с файлами в PHP
PHP предоставляет множество функций для использования при создании, чтении, загрузке и редактировании файлов.
Функция fopen() создает, или открывает файл. Если вы используете fopen() с файлом, который не существует, то файл будет создан и открыт с параметром записи (w) или добавления (a).
--
Все файловые функции - смотреть
--
Используйте один из следующих модификаций для открытия файла.
- r: Открывает файл только для чтения.
- w: Открывает файл только для записи. Удаляет содержимое файла, или создает новый файл, если он до этого не существовал.
- a: Открывает файл только для записи.
- x: Создает новый файл только для записи.
- r+: Открывает файл для чтения/записи.
- w+: Открывает файл для чтения/записи. Удаляет содержимое файла, или создает новый файл, если он до этого не существовал.
- a+: Открывает файл для чтения/записи. Создает новый файл, если он до этого не существовал
- x+: Создает новый файл для чтения/записи.
В примере ниже создается новый файл "file.txt", который будет создан в той же директории, где хранится PHP код.
$myfile = fopen("file.txt", "w");
Для записи в файл, используйте функцию fwrite().
Первым параметром функции fwrite() является файл для записи; вторым - строка, которую необходимо записать.
Нижеуказанный пример записывает пару имен в новый файл, который называется "names.txt".
<?php
$myfile = fopen("names.txt", "w");
$txt = "John\n";
fwrite($myfile, $txt);
$txt = "David\n";
fwrite($myfile, $txt);
fclose($myfile);
/* File contains:
John
David
*/
?>
Обратите внимание, что мы записали в файл "names.txt" дважды, а затем мы использовали функцию fclose(), чтобы закрыть файл.
Символ \n используется для записи новых строк.
Функция fclose() закрывает открытый файл и возвращает TRUE (верно) при успехе, или FALSE (ложь) при ошибке.
Если вы хотите добавить содержимое к файлу, вам необходимо открыть файл в режиме добавления.
<?php
$myFile = "test.txt";
$fh = fopen($myFile, 'a');
fwrite($fh, "Some text");
fclose($fh);
?>
При добавлении в файл с помощью режима 'a', указатель файла установлен в конец файла, что гарантирует, что вся новая информация будет добавлена в конец файла.
Пример формы, которая добавляет заполненную информацию в файл.
<?php
if(isset($_POST['text'])) {
$name = $_POST['text'];
$handle = fopen('names.txt', 'a');
fwrite($handle, $name."\n");
fclose($handle);
}
?>
<form method="post">
Name: <input type="text" name="text" />
<input type="submit" name="submit" />
</form>
Теперь, при каждом вводе имени и его отправке оно добавляется в файл "names.txt" с новой строки.
Функция isset() определяет, была ли отправлена форма, а также, содержит ли текст значение.
Атрибут action, не определен, для формы - так что она будет отправлена сама себе.
Чтение файла:
Функция file() считывает весь файл в массив. Каждый элемент массива соответствует строке файла:
<?php
$myfile = fopen("names.txt", "w");
$txt = "John\n";
fwrite($myfile, $txt);
$txt = "David\n";
fwrite($myfile, $txt);
fclose($myfile);
$read = file('names.txt');
foreach ($read as $line) {
echo $line .", ";
}
?>
Таким образом выводятся все строки в файл и разделяются запятыми.
Мы использовали цикл foreach, потому что переменная $read является массивом.
В конце вывода в примере выше будет запятая, потому что мы напечатали ее после каждого элемента массива.
Следующий код позволяет нам избежать вывода этой последней запятой.
<?php
$myfile = fopen("names.txt", "w");
$txt = "John\n";
fwrite($myfile, $txt);
$txt = "David\n";
fwrite($myfile, $txt);
fclose($myfile);
$read = file('names.txt');
$count = count($read);
$i = 1;
foreach ($read as $line) {
echo $line;
if($i < $count) {
echo ', ';
}
$i++;
}
?>
Переменная $count использует функцию count для получения количества элементов массива $read.
Затем, в цикле foreach, после вывода каждой строки, мы определяем меньше ли текущая строка, чем общее количество строк, и выводим запятую, если это так.
Функция открытия в файла?
$fp = fopen('myfile.txt', 'r');
r – открыть файла только на чтение
r+ - открытие файла и на чтение и на запись
w – создание нового пустого файла для записи и если на момент вызова уже существует файл - он уничтожается
w+ - аналогичен r+, только если на момент вызова этот файл существует - его содержимое удаляется.
a – открывает существующий файл в режиме записи и указатель сдвигается на последний байт (в конец файла)
a+ - открывает файл в режиме чтения и записи одновременно и указатель сдвигается на последний байт файла (в конец файла)
Запись в файл?
$f = fopen("myfile.txt", "a"); // Открываем файл в режиме записи при этом указатель сдвигается на последний байт файла
fwrite($f, "Привет!!!"); // Запись в файл
//или
fputs($f, "Привет!!!"); // Запись в файл
fclose($f); //Закрываем файл
Построчное считывание файла?
$f = fopen("myfile.txt", "a"); // Открываем файл в режиме записи при этом указатель сдвигается на последний байт файла
if($f) {
while (!feof($f)) {
$ftext = fgets($f, 999);
echo $ftext."";
}
//или
while(!feof($f))
{
$ftext = fread($f, 600);
echo $ftext;
}
}
fclose($f); //Закрываем файл
Прочитать файл полностью?
echo readfile("myfile.txt");
//или
echo file_get_contents("myfile.txt")
Считывание файла в массив?
$file_array = file("myfile.txt");
print_r($file_array);
Работа с указателем файла?
$f = fopen("myfile.txt", 'w+') or die("не удалось открыть файл");
$str = "Привет!"; // строка для записи
fwrite($f, $str); // запишем строку в начало
fseek($f, 0); // поместим указатель файла в начало
fwrite($f, "Начтекст"); // запишем в начало строку
fseek($f, 0, SEEK_END); // поместим указатель в конец
fwrite($f, $str); // запишем в конце еще одну строку
fclose($f);
Проверка на наличие файла и размер файла?
if (file_exists("myfile.txt")) echo "Размер файла: ".filesize("myfile.txt").' байт';
else echo "Файл не существует";
Создание временного файла?
$f = tmpfile();
fwrite($f, "Текст который записывается во временный файл.");
fseek($f, 0); // Устанавливаем указатель файла
echo fread($f, 1024); // выводим содержимое файла
Определение количество строк в файле?
$f = file("myfile.txt");
echo 'Количество строк в файле: '.count($f);
Блокировка файла?
$f = fopen("myfile.txt", 'a');
flock($f, LOCK_EX); // Блокирование файла для записи
fwrite($f, "Текст для записи");
flock($f, LOCK_UN); // Снятие блокировки
fclose($f);
Определение типа файла?
$f = filetype("myfile.txt");
echo "Тип файла: ".$f;
Результат вывода:
file – обычный файл
dir – каталог
ink – символическая ссылка
fifo – fifo-канал
block – блочно - ориентированное устройство
char – символьно - ориентированное устройство
unknown – неизвестный тип файла
Просмотр всех параметров файла?
$f = stat("myfile.txt");
print_r($f);
Очистка файла?
$f = fopen("myfile.txt", 'a') or die("не удалось открыть файл");
ftruncate($fp, 0) // очищаем файл
Дата последнего изменения файла?
echo filectime("myfile.txt");