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

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



Некоторые функции файловой системы

Функции файловой системы: php.net


copy - копирует файл

file_exists - проверяет существование указанного файла или каталога

file_get_contents - читает содержимое файла в строку

file_put_contents - записывает данные в файл

file - читает содержимое файла и помещает его в массив

is_dir - проверяет, является ли имя файла директорией

is_file - проверяет, является ли файл обычным файлом

move_uploaded_file - перемещает загруженный файл в новое место

rename - переименовывает файл или директорию

mkdir - пытается создать папку по указанному пути.

rmdir - удаляет папку по указанному пути.

unlink - удаляет файл по указанному в параметре пути.




copy




copy - эта функция берет уже существующий файл и копирует его по новому адресу.

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

Она принимает два обязательных параметра:
- путь к исходному файлу
- путь, куда мы хотим сохранить этот файл.


Создадим в нашей папке с уроком файл index.php и текстовый файл test.txt и создадим папку, которую назовем folder.


Файл test.txt:


-- файл test.txt --

Это файл test.text



С помощью функции copy скопируем файл test.txt в папку folder.
где:
'test.txt' - путь к файлу, который мы хотим копировать (первый параметр)- в нашем случае он находится в этой же папке, где находится индексный файл index.php.
folder/ - куда будем копировать
file.txt - под каким именем будем копировать (можно задавать любое имя).


Файл index.php:


-- файл index.php --

<?php
copy(test.txt', 'folder/file.txt' );
?>



Запустим браузер и обновим страницу - в папке folder появился текстовый документ file.txt с тем же содержимым, что и в test.txt.


Файл file.txt:


-- файл file.txt --

Это файл test.text




file_exists




file_exists - проверяет наличие папки или файла. Возвращает TRUE, если файл или папка существует, иначе возвращает FALSE.
Параметром принимает путь к файлу или каталогу , в нашем случае - folder/file.txt
- если файл folder/file.txt существует, то выведем: 'Файл существует' ,
- иначе выведем: 'Такого файла нет' .


Файл index.php


-- файл index.php --

<?php
if (file_exists('folder/file.txt' )) echo 'Файл существует' ;
else echo 'Такого файла нет' ;
?>
- после обновления страницы увидим: Файл существует



Если поменяем значение, например folder/file2.txt , то выведет: Такого файла нет.
Если укажем folder , то выведет: Файл существует.



file_get_contents




file_get_contents - позволяет прочитать содержимое файла

В переменную $file считываем с помощью функции file_get_contents содержимое файла test.txt
В качестве параметра передаем путь к файлу ('test.txt' ). Переменную $file сразу выведем на экран.


Допишем файл test.txt:


-- файл test.txt --

Это файл test.txt
строка 2
строка 3
строка 4
строка 5



Файл index.php:


-- файл index.php --

<?php
echo $file = file_get_contents('test.txt' );

// для многострочного текста: заменяем переносы строк на тэги
echo nl2br( $file = file_get_contents('test.txt' ));

?>
выведет:
Это файл test.txt строка 2 строка 3 строка 4 строка 5
// для многострочного текста
Это файл test.txt
строка 2
строка 3
строка 4
строка 5



Кроме чтения файлов данная функция может еще читать содержимое сайтов . Здесь в качестве параметра передаем путь к сайту


Файл index.php:


-- файл index.php --

<?php
$file = file_get_contents('https://php.net/'); // считываем контент в файл
echo $file; // увидим страничку http://php.net/
echo htmlspecialchars ($file); // увидим код странички
?>




file_put_contents




file_put_contents - позволяет записать что-то в файл (php.net)

Функция возвращает integer - количество записанных байт в файл, или FALSE в случае ошибки.
Первый обязательный параметр - это путь к файлу , который мы будем записывать.
Второй обязательный параметр - это данные , которые мы будем записывать.
Запишем считанный контент в файл.
'folder/file.txt' - путь к файлу, в который запишем данные, хранящиеся в переменной $file.


Файл index.php:


-- файл index.php --

<?php
// читаем содержимое страницы в сети
$file = file_get_contents('https://php.net/');
// записываем считанные данные в файл file.txt
file_put_contents('folder/file.txt' , $file );
?>
- выведет весь HTML-код данной страницы.



Прочитаем еще одну страницу в переменную $file2 и запишем также еще и ее.


Файл index.php:


-- файл index.php --

<?php
// читаем содержимое страницы в сети
$file = file_get_contents('https://php.net/');

// читаем содержимое второй страницы
$file2 = file_get_contents('https://www.php.net/manual/ru/function.file-put-contents.php');

// записываем считанные данные в файл file.txt
file_put_contents ('folder/file.txt' ,$file );

// запишем в этот же файл содержимое переменной $file2
file_put_contents ('folder/file.txt' ,$file2 );
?>
- выведет весь HTML-код второй страницы ($file2).



То есть, мы сначала записали в текстовый документ содержимое переменной $file, а затем мы перезаписали этот документ, записав в него содержимое переменной $file2.


Чтобы дописать что-то в файл, не затирая при этом то, что там было до того, нужно воспользоваться третьим опциональным параметром flags.
Выбираем одну из трех констант - FILE_APPEND - эта константа позволяет записать данные в конец файла, вместо того, чтобы его перезаписать.
Дополнительно можно еще использовать константу - LOCK_EX - она устанавливает эксклюзивную блокировку на файл на время записи.


Файл index.php:


-- файл index.php --

<?php
// читаем содержимое страницы в сети
$file = file_get_contents('https://php.net/');

// читаем содержимое второй страницы
$file2 = file_get_contents('https://www.php.net/manual/ru/function.file-put-contents.php');

// записываем считанные данные в файл file.txt
file_put_contents ('folder/file.txt' , $file , FILE_APPEND);

// запишем в этот же файл содержимое переменной $file2
file_put_contents ('folder/file.txt' , $file2 , FILE_APPEND);

?>
- выведет весь HTML-код первой и второй страниц.




file




file - читает содержимое файла и помещает его в массив, то есть каждая строка будет элементом массива. Применяется для файлов, где есть форматированные данные, где в каждой строке содержится свой набор данных

Обязательный параметр - это путь к файлу , который мы будем записывать.


Запишем в текстовый файл test.txt следующее:


-- файл test.txt --

Это файл test.txt|email
строка 2|email
строка 3|email
строка 4|email
строка 5|email



В индексном файле запишем:


-- файл index.php --

<?php
$file = file('test.txt' );
echo '<pre>' ;
print_r( $file );
echo '</pre>' ;
?>
- выведет:
Array
(
[0] => Это файл test.txt|email

[1] => строка 2|email

[2] => строка 3|email

[3] => строка 4|email

[4] => строка 5|email
)



Чтобы убрать пустые строки между элементами массива, можно воспользоваться необязательным параметром - flags .

В этом параметре нас интересуют две константы:
FILE_IGNORE_NEW_LINES - не добавляет новую строку в конце каждого элемента массива
FILE_SKIP_EMPTY_LINES - пропускает пустые строки


Файл index.php:


-- файл index.php --

<?php
$file = file('test.txt' , FILE_IGNORE_NEW_LINES);
echo '< pre>';
print_r ( $file );
echo '< /pre>';
?>
- выведет:
Array
(
[0] => Это файл test.txt|email
[1] => строка 2|email
[2] => строка 3|email
[3] => строка 4|email
[4] => строка 5|email
)



В файл test.txt добавим пустую строку:


-- файл test.txt --

Это файл test.txt|email
строка 2|email
.................... // Здесь пустая строка
строка 3|email
строка 4|email
строка 5|email

Наверх


В индексном файле запишем:


-- файл index.php --

<?php
$file = file('test.txt' , FILE_IGNORE_NEW_LINES);
echo '< pre>';
print_r ( $file );
echo '< /pre>';
?>
- выведет:
Array
(
[0] => Это файл test.txt|email
[1] => строка 2|email
[2] =>
[3] => строка 3|email
[4] => строка 4|email
[5] => строка 5|email
)



Используем еще одну константу FILE_SKIP_EMPTY_LINES , константа добавляется через разделитель (|).


Файл index.php:


-- файл index.php --

<?php
$file = file( 'test.txt' , FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
echo '< pre>';
print_r ( $file );
echo '< /pre>';
?>
- выведет:
Array
(
[0] => Это файл test.txt|email
[1] => строка 2|email
[2] => строка 3|email
[3] => строка 4|email
[4] => строка 5|email
)



- пустых элементов массива теперь нет.



is_dir




is_dir - эта функция проверяет, является ли имя файла директорией.

Параметром принимает путь к файлу . Возвращает TRUE, если файл существует и является папкой, иначе возвращается FALSE.

Если is_dir('folder') вернет TRUE, то это - каталог (папка), иначе - это что-то другое.


Файл index.php:


-- файл index.php --

<?php
if (is_dir('folder' )) echo 'Это каталог' ;
else echo 'Это не каталог' ;
?>
- выведет: Это каталог



Как в Windows, так и в Unix пути можно указывать в полном и относительном виде. В относительном виде путь может содержать специальные управляющие символы "." (точка) и ".." (две точки). Точка указывает на текущую папку относительно файла index.php (В данном случае - папка с уроком), а две точки - указатель на папку уровнем выше (phplessons).


Файл index.php:


-- файл index.php --

<?php
if (is_dir( '..' )) echo 'Это каталог' ;
else echo 'Это не каталог' ;
?>
- выведет: Это каталог




is_file




is_file - проверяет, является ли файл обычным файлом и существует ли он вообще по указанному пути.

Параметром принимает путь к файлу . Возвращает TRUE , если файл существует и является обычным файлом, иначе возвращает FALSE .


Файл index.php:


-- файл index.php --

<?php
if (is_file( 'test.txt' )) echo 'Это файл' ;
else echo 'Это не файл' ;
?>
- выведет: Это файл




move_uploaded_file




move_uploaded_file - эта функция перемещает загруженный по указанному пути файл, по новому пути.

Первый параметр - путь к загруженному файлу ($filename).
Второй параметр - путь, по которому необходимо переместить файл ($destination).


move_uploaded_file ( $filename , $destination );




rename




rename - переименовывает файл или директорию, в понимании операционной системы - перенести его куда нибудь.

Первый параметр - старое имя ($oldname).
Второй параметр - новое имя ($newname).


rename ( $oldname , $newname );



В индексном файле запишем: rename('test.txt', 'folder/file2.txt'); где
- 'test.txt' - старое имя (путь) файла,
- 'folder/file2.txt' - новое имя (путь) файла


Файл index.php:


-- файл index.php --

<?php
rename ('test.txt' , 'folder/file2.txt' );
?>
В папке folder появится файл file2.txt - (файл переименован и перемещен)



Структура файлов урока


php21.png




mkdir




mkdir - пытается создать папку по указанному пути.

Первый параметр - указанный путь для создания папки ($pathname).

Второй параметр - по умолчанию для папки устанавливаются все права - ($mode = 0777).

Третий параметр - разрешает создание вложенных директорий , указанных в pathname ($recursive).


mkdir ( $pathname , $mode = 0777 , $recursive = FALSE );



Создадим вложенную структуру: папка 1, в ней папка 2 и в папке 2 - папка 3.

Для этого указываем параметр с правами - 0777, и выставим третий параметр в true.


Файл index.php:


-- файл index.php --

<?php
mkdir ('1/2/3' , 0777 , true );
?>
После обновления страницы получим желаемую структуру.




rmdir




rmdir - удаляет папку по указанному пути.


Файл index.php:


-- файл index.php--

<?php
rmdir ('1/2/3'); // удалит папку 3
rmdir ('1/2'); // удалит папку 2
rmdir ('1'); // удалит папку 1
?>




unlink




unlink - удаляет файл по указанному в параметре пути.


Файл index.php:


-- файл index.php --

<?php
unlink ( 'folder/file.txt' ); // удалит файл file.txt из папки folder
?>






Наверх Наверх