😎 » PHP - FAQ » Основы PHP8 » Работа с файлами в PHP
287 0  

Работа с файлами в 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;

winked Результат вывода:
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");



Залишити свій коментар:

Досвід у веброзробці:

2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2009
2023