- Как проверить существование файла на PHP?
- Проверка существования файла по URL-ссылке
- Проверка существования локального файла
- Php функция проверка существования файла
- Синтаксис функции file_exists
- Давайте попробуем разобрать синтаксис функции file_exists
- Как проще написать функцию file_exists
- Как переводится file_exists.
- File already exists перевод
- Что возвращает file_exists
- Как получить возвращаемые значения относительно файла в file_exists
- Результат возврата функции file_exists к существующему файлу
- Результат возврата функции file_exists к не существующему файлу
- Всего три варианта проверки file_exists
- Существует ли файл в папке проверка локально file_exists
- Проверка существования файла по абсолютному пути file_exists
- Проверка существования файла по пути на сервере file_exists
- Вывод о существовании файла и функции file_exists
- Работа с файлами в PHP
- Чтение файла: file()
- Создание файла и запись в файл: file_put_contents()
- Создание папки или структуры папок
- Проверка существования файла или папки
- Проверка прав доступа
- Копирование, перенос и удаление файла
- Работа с файлами с помощью fopen()
Как проверить существование файла на PHP?
Бывают случаи, когда вам необходимо проверить, существует ли указанный файл или нет, например, для того чтобы в последующем совершить с файлом какие-то действия.
Я тоже при разработке модуля столкнулся с этим вопросом. И нашел два варианта решения поставленной задачи.
Проверка существования файла по URL-ссылке
В PHP существует функция «fopen», с помощью которой можно открыть указанный URL.
Что мы делаем? Пытаемся открыть файл, и если нам это удается, значит, файл существует, а противном же случае – файла нет.
else { echo "Файл отсутствует!"; > ?>
А что, если мы имеем не один файл, а несколько, так сказать, массив ссылок? Эта задача как раз и стояла изначально передо мной. И решение уже такой задачи следующее:
В этом случае мы получаем список только тех файлов, которые существуют.
Проверка существования локального файла
Под словом «локальный» подразумевается, что скрипт и файлы для проверки находятся на одном сервере. Если у вас довольно большой массив ссылок – этот вариант самый лучший для решения задачи, так как мы делаем не запрос на сторонний сервер, а сканирование указанных директорий.
В этом способе используется функция «file_exists», и по аналогии с предыдущим вариантом просто заменяется часть скрипта:
else { echo "Файл отсутствует!"; > ?>
И то же самое для массива ссылок:
На что стоит обратить внимание? На то, что этот способ удобен для прогонки файлов, находящихся в пределах нашей файловой системы. Поэтому все ссылки желательно указывать относительные.
Кстати говоря, делая один из заказов, именно этим способом мне удалось просканировать порядка 135 000 файлов всего за пару секунд.
Php функция проверка существования файла
File_exists — это функция в php, которая определяет есть ли — существует ли файл по тому пути, который вы указали:
Синтаксис функции file_exists
Давайте попробуем разобрать синтаксис функции file_exists
file_exists — название функции.
string — тип принимаемых данных функцией file_exists — строка.
$filename — название файла разрешением, либо путь до файла.
: bool — тип возвращаемого значения булев.
Как проще написать функцию file_exists
Как переводится file_exists.
File — переводится как файл и
exists — переводится как существует .
Итого, если брать словосочетание file exists, то оно переводится скорее с вопросительным смыслом!
File already exists перевод
Очень часто вместе с file_exists идет словосочетание File already exists и многих интересует, как это переводится!?
File already exists -переводится, как файл уже существует!
Что возвращает file_exists
Для того, чтобы работать с функцией надо понимать, что возвращает функция! Поскольку file_exists предполагает два ответа, да — существует, нет — не существует, то логично, что она должна такие же данные возвращать и в php!
File_exists — возвращает в случае существования файла true, иначе false — подробнее.
Как получить возвращаемые значения относительно файла в file_exists
Для иллюстрации работы функции file_exists нам потребуется два файла, один из которых не будет существовать!
Для получения того, что возвращает функция file_exists — нам потребуется другая функция -> var_dump
Применим её к file_exists таким образом:
$home = $_SERVER[«DOCUMENT_ROOT»];//путь до корневой папки
$file = «/index.html»; //главная страница сайта
Результат возврата функции file_exists к существующему файлу
Как видим, file_exists возвращает значение «true», а тип булев — как мы и говорили в синтаксисе(см.выше):
Тоже самое проделаем с файлом, который не существует! Внутри неважно что мы напишем, должно быть единственное условие, что файла не существует:
Результат возврата функции file_exists к не существующему файлу
Всего три варианта проверки file_exists
Если вы прочитаете аннотацию к функции file_exists, то могу с точностью сказать, что у вас возникнут как минимум 3 вопроса(просто . там этого не будет написано..):
Вообще существует, как минимум 3 варианта написания пути к файлу, это:
Локально(поскольку данным вариантом пути я никогда не пользуюсь, то и смыслы писать о нём нет). Абсолютный путь. Путь на сервере.
Существует ли файл в папке проверка локально file_exists
Предположим, что файл со скриптом и проверяемый файл лежат в одной папке, тогда можно проверить существует ли файл локально таким образом:
Если у вас на сайте единая точка входа, и оба файла подчинены этому, то file_exists вернет «true» хотя должен вернуть «false»(при отсутствующем файле. ) смайлы
Если мы сейчас посмотрим в адресную строку, то мы увидим вот это:
Напишем адрес для файла, который » НЕ СУЩЕСТВУЕТ! «, который якобы лежит в этой же папке, что и данная страница. Вы можете нажать на ссылку, проверить существует ли файл на самом деле! Сайт вам вернет 404 — т.е. подтвердит, что файла по данному адресу в данной папке нет.
Другими словами, проверка существования локально «file_exists» — должна вернуть «false»!
Давайте выведем этот код прямо здесь:
— Парадокс!? Нет! Объясняется просто!
Все файлы и в том числе обрабатывающие, стекаются в одну точку -> на главную в нашем случае -> index.html(при соответствующих настройках htaccess, файл можно менять), при единой точке входа. И для скрипта проверять существование файла index.html — это проверка самого себя, как бы странно это не звучало. смайлы
Чтобы вы понимали, именно проверять таким образом локально, в приведенном примере, корневая папка, будет той локальной папкой для этой проверки существования файла!
Все файлы, например sitemap.xml, которые будут физически находиться в корневой папке сайта, file_exists будет возвращать true!
Проделаем тоже относительно нашего файла, на котором данный текст
Далее . еще более интересный эксперимент. расположим одну и ту же запись на файле. который подчиняется единой точке входа, а второй нет.
Первый файл — это данный файл и мы расположим здесь вот такую запись.
И второй файл. на котором расположим точно такую же запись, кроме названия самого файла.
Два идентичных кода с использованием функции file_exists.
Расположенных на файлах отличающихся правилом обработки единая точка входа
Будут давать противоположные ответы.
Проверка существования файла по абсолютному пути file_exists
Нам потребуется получить абсолютный путь до файла, из адресной строки и чтобы данный файл существовал! Сделаем такой специальный файл ->file_exists_ok.dat, на котором и будем испытывать функцию file_exists
Как вы думаете, что вернет функция file_exists , если применить к файлу по абсолютному пути, который существует, таким образом:
var_dump (file_exists( ‘https://dwweb.ru/__a-data/__all_for_scripts/__examples/php/file_exists/file_exists_ok.dat’));
Как видим, казалось бы, файл существует, но функция file_exists возвращает false. И вывод единственный, что получить реальное положение дел относительно существования файла по абсолютному пути — не представляется возможным!
Проверка существования файла по пути на сервере file_exists
Теперь возьмем тоже самый существующий файл и применим уже не абсолютный путь, а путь на сервере до файла и вставим его в в функцию file_exists
var_dump (file_exists( $home.’/__a-data/__all_for_scripts/__examples/php/file_exists/file_exists_ok.dat’));
И получим результат работы функции file_exists :
Вывод о существовании файла и функции file_exists
Какой вывод можно сделать по тем проверкам существования или отсутствия файла на сервере!?
Работа с файлами в PHP
С помощью функции file_get_contents() можно получить содержимое файла:
Также мы можем получить html-код какой-либо страницы в интернете:
'; echo file_get_contents('https://ya.ru'); echo '';
Но работает это далеко не для всех сайтов, у многих есть защита от такого примитивного парсинга.
Чтение файла: file()
Функция file() позволяет получить содержимое файла в виде массива. Разделителем элементов является символ переноса строки.
Создадим в корне сайта файл data.txt со следующим содержимым:
Теперь запустим скрипт index.php со следующим кодом:
При запуске этого скрипта мы получим в браузере:
array(3) < [0]=>string(7) "Vasya " [1]=> string(7) "Petya " [2]=> string(5) "Gosha" >
Заметили, что у первых двух строк длина 7 символов вместо пяти? Это из-за того, что каждая строка содержит в конце символы переноса строки.
Чаще всего они нам не нужны, поэтому их можно убрать, передав вторым параметром константу FILE_IGNORE_NEW_LINES :
Теперь у всех строк будет по 5 символов.
Если нам необходимо получить только заполненные строки в файле и пропустить пустые, можно передать вторым параметром константу FILE_SKIP_EMPTY_LINES :
Разумеется, мы можем передать сразу две константы:
Создание файла и запись в файл: file_put_contents()
Функция file_put_contents() позволяет создать файл и заполнить его данными.
Первым параметром функция принимает путь к файлу, вторым — строку с данными. Для создания пустого файла нужно передать вторым параметром пустую строку.
Если файла не существует — он будет создан. Если существует — данные в файле будут перезаписаны.
Чтобы не перезаписывать данные, а добавить их в конец файла, нужно передать третьим параметром константу FILE_APPEND :
Также вторым параметром можно передать массив:
Но этот вариант не очень удобен, поскольку все элементы массива запишутся подряд, без каких-либо разделителей. Чтобы их добавить, можно использовать функцию implode:
Создание папки или структуры папок
Создать папку можно с помощью функции mkdir() (make directory):
Вторым параметром указываются права доступа к файлу в виде восьмеричного числа, по-умолчанию это 0777 , что означает самые широкие права. Для Windows этот аргумент игнорируется.
Кроме этого, второй параметр может игнорироваться при заданной umask (пользовательская маска (user mask), которая нужна для определения конечных прав доступа). В этом случае принудительно сменить права можно функцией chmod() :
Также мы можем создать структуру папок рекурсивно, для этого нужно третьим параметром передать true :
Но в этом случае права доступа будут заданы только для конечной папки. Для изменения прав у каждой из папок придётся указывать права вручную:
Права доступа — это отдельная объёмная тема, поэтому сейчас мы её пока рассматривать не будем.
Проверка существования файла или папки
Проверить существование папки или файла можно с помощью функции file_exists() :
Если вы хотите проверить существование только папки или только файла, для этого есть специальные функции is_dir() и is_file() :
Проверка прав доступа
Функции is_readable() и is_writable() проверяют, есть ли у пользователя, от имени которого запущен PHP, права на чтение и запись файла или папки:
Копирование, перенос и удаление файла
Для удаления файлов используется функция unlink() :
Чтобы скопировать файл, используем функцию copy() :
Для переименования и переноса файла в другую папку используется функция rename() :
Работа с файлами с помощью fopen()
Функций file() , file_get_contents() и file_put_contents() достаточно для решения большинства задач, связанных с управлением файлами.
Но иногда возникают ситуации, когда нам необходимы более продвинутые инструменты. Например, если у нас есть большой текстовый файл и мы хотим читать его построчно, а не весь сразу, для экономии оперативной памяти.
Итак, открыть (или создать и открыть) файл можно с помощью функции fopen() :
Функция fopen() возвращает так называемый лескриптор. Это ссылка, указатель на файл, его мы будем передавать в другие функции. Кстати, тип данных этого дескриптора — resource .
Первым параметром мы передаём путь к файлу, вторым — модификатор доступа к файлу. Ниже перечислены наиболее популярные модификаторы:
- r — открытие для чтения, указатель переходит в начало файла.
- r+ — открытие для чтения и записи, указатель переходит в начало файла.
- w — открытие для записи, указатель переходит в начало файла. Если файла нет — создаётся, если есть — очищается от данных.
- w+ — открытие для чтения и записи, в остальном аналогичен w .
- a — открытие для записи, указатель переходит в конец файла. Если файла нет — создаётся.
- a+ — открытие для чтения и записи, в остальном аналогичен a .
- x — создание и открытие для записи, указатель переходит в начало файла. Если файл существует — PHP покажет ошибку.
- x+ — создание и открытие для чтения и записи, в остальном аналогичен x .
Указатель — это нечто вроде курсора. Вы можете переместить его в любое место файла, чтобы добавить или отредактировать определённые данные.
Для записи данных в файл существует функция fwrite() . Давайте попробуем создать файл и записать в него какие-нибудь данные:
Заметьте, из-за модификатора w при каждом запуске скрипта данные в файле стираются и добавляются заново. Если модификатор заменить на a , данные будут не перезаписываться, а добавляться в конец файла.
Для построчного чтения файла используется функция fgets() :
При каждом запуске fgets получает следующую строку и возвращает её в $line . Вторым параметром передаётся максимальная длина строки. Это означает, что если строка слишком длинная, она будет обрезана.
Также в PHP существует множество других полезных функций, работающих с дескриптором файла. Почитать о них можно в документации.