Как записать имя файла в переменную php

Обновлено: 06.07.2024

В этом уроке вы узнаете несколько важных функций на PHP, которые достаточны для всех ваших основных потребностей чтения и записи файлов. Вы узнаете, как читать файл, записывать в файл, записывать в текстовый файл и проверять, существует ли файл.

К счастью, PHP предоставляет множество функций для чтения и записи данных в файлы. В этом уроке я покажу вам самые простые способы чтения данных из локального или удаленного файла и способы использования флагов для записи в файлы именно так, как мы хотим.

Проверка наличия файла

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

Самый простой способ проверить, существует ли файл, - использовать функцию PHP file_exists($filename) . Он вернет true , если файл или каталог с заданным $filename существует и false в противном случае. Это может быть очевидно, но я хотел бы указать, что $filename не обязательно должно быть именем файла. Это также может быть абсолютный или относительный путь. Например, мы могли бы использовать prime_numbers.txt или science/project/period_table.txt.

Также важно помнить, что эта функция также вернет false для файлов, которые недоступны из-за ограничений безопасного режима.

Другой функцией, которую вы можете использовать для проверки существования файла, является is_file() . В отличие от file_exists() , эта функция возвращает только true , если указанный путь указывает на файл, а не на каталог.

Убедимся, что файл фактически существует

Если код, который вы пишете, выполняет множество операций с файлами в определенном файле, вы можете получить неверные результаты, используя вышеуказанные функции. Это связано с тем, что результаты выполнения файлов file_exists() и is_file() кэшируются для повышения производительности. PHP также кэширует значения, возвращаемые другими функциями файловой системы, такими как filesize() , filemtime() и т. д.

Вы можете вызвать clearstatcache() , чтобы убедиться, что любая информация, которую вы просматриваете для файла, обновлена.

Обычно это проблема только в том случае, если к одному и тому же файлу обращаются несколько раз в одном скрипте, чтобы узнать его статус. Кроме того, кэшированные данные очищаются, если вы удаляете файл внутри скрипта с помощью функции unlink() . Это в основном означает, что вы, вероятно, не столкнетесь с какими-либо проблемами, связанными с кешированием, но по-прежнему хорошо знать, что вы можете очистить кеш, если информация устареет или вы получаете неожиданные результаты при попытке получить доступ к информации о файле.

Чтение данных из файла в PHP

Один из самых простых способов чтения данных из файла в PHP - с помощью функции file_get_contents($filename, $use_include_path, $context, $offset, $maxlen) . Он просто прочитает весь файл и передаст его вам в виде строки. Все параметры, кроме первого, являются необязательными.

Второй параметр принимает логическое значение, чтобы определить, должен ли он искать файл в местоположении, указанном путем include, который может быть задан с помощью функции set_include_path() .

Параметр $offset определяет точку начала чтения исходного файла. Отрицательное значение начнет отсчет с конца. Поддержка отрицательных смещений была добавлена только в PHP 7.1.0. Стоит отметить, что смещение работает только с локальными файлами и не поддерживается для удаленных файлов.

Функция file_get_contents() считывает весь файл сразу по умолчанию. Вы можете изменить это поведение, указав значение параметра $maxlen . Длина символов, подлежащих чтению, подсчитывается из значения смещения.

Эта функция вернет false , если не удалось прочитать данные из указанного файла. Тем не менее, она также может возвращать значения, которые вычисляются как false , поэтому убедитесь, что вы проверяете, действительно ли он вернул false с помощью оператора === .

Вы можете использовать эту функцию для открытия удаленных файлов, но это было бы возможно, только если значение параметра allow-url-fopen в php.ini true или 1 .

Запись данных в файл в PHP

Один из самых простых способов записи данных в файл в PHP - с помощью функции file_put_contents($filename, $data, $flags, $context) .

Параметр $filename определяет файл, в котором будут записываться данные. Второй параметр - это данные, которые вы хотите записать в файл. В большинстве случаев это будет строка, но она также может быть массивом или ресурсом потока.

Помните, что PHP автоматически создаст файл с заданным именем, если он еще не существует. Однако он не создаст для вас каких-либо каталогов. Это означает, что вы можете сохранить файл с именем On the Origin of Species [Charles Darwin].txt без каких-либо ошибок. Однако установка $filename в Biology/Evolution/On Origin of Species [Charles Darwin] .txt, если Biology/Evolution/ еще не существует, приведет к ошибке.

Параметр $flags определяет, как содержимое будет записано в файл. Он может иметь любое или все из следующих трех значений:

  • FILE_USE_INCLUDE_PATH - Это указывает PHP на поиск имени файла в каталоге include.
  • FILE_APPEND - Это скажет PHP, чтобы добавить данные, которые вы передали функции, к существующим данным в файле. Это может быть полезно, если вы храните данные в файле, таком как журнал или личный дневник. Запись новых данных, таких как температура или события, которые произошли с вами сегодня, не будет перезаписывать то, что вы записали вчера.
  • LOCK_EX - Это скажет PHP, чтобы получить блокировку файла, прежде чем начинать писать в него содержимое. Это может предотвратить непредвиденные события, когда два разных сценария читают или записывают данные в один и тот же файл. С этим конкретным значением вы получите эксклюзивную блокировку файла. Вы можете узнать больше об этих блокировках в документации PHP о функции flock() .

Эта функция возвращает количество байтов, которые были записаны в файл с успехом, и false при ошибке. Тем не менее, вы все равно должны использовать строгий оператор равенства, чтобы проверить, было ли успешным запись содержимого в файл. Это потому, что код, который записывает 0 байтов в файл, будет по-прежнему оцениваться как false.

Чтение и запись данных в файлы

Вы можете перейти на сайт Project Gutenberg и попытаться загрузить файлы с помощью функции file_get_contents() . После того, как у вас есть данные в строке, вы также можете просто сохранить их в локальном файле с помощью функции file_put_contents() . В следующем примере это будет ясно:

Вы также можете сохранить веб-страницы или контент с таких сайтов, как Википедия. Если вам нужно понять HTML или проанализировать содержимое HTML, которое вы только что сохранили локально, вы можете следовать руководству, например, Парсинг HTML на PHP с помощью DiDOM, что поможет вам автоматически получать ссылки, файлы изображений или любую другую такую информацию с веб-страницы.

Вернемся к локальным файлам. Подумайте о ситуации, когда у вас есть куча текстовых файлов, и вы хотите проанализировать их содержимое, чтобы увидеть такие вещи, как самые распространенные слова в них. Этого можно добиться легко, используя кучу встроенных функций PHP.

Мы преобразовали весь текст в нижний регистр и сделали предположение, что каждое слово разбивается на пробелы. Затем текст преобразуется в массив с помощью метода explode() , чтобы упростить анализ отдельных слов. Удивительно, но слово «эволюция» не используется ни разу во всей книге, которая дала теорию эволюции ее происхождения.

Это был просто пример автоматического анализа большого количества текста. Вы можете сделать что-то подобное с любым типом текста, хранящегося в файле.

Логирование данных с помощью FILE_APPEND

Еще одним полезным примером может быть логирование информации в течение небольших периодов времени. Это может быть ваша тренировка, метеорологические данные или колония пчел, которую вы наблюдаете. После того, как у вас есть данные в строке, вы можете легко сохранить его в файле и добавить его к существующим данным, используя флаг FILE_APPEND с file_put_contents() .

Подобный код можно использовать для чего-то вроде хранения ежедневной статьи в Википедии в файле каждый день или отслеживания новостных статей и заголовков в течение недель или месяцев. Все, что вам нужно сделать, это написать код, чтобы очистить данные, а затем сохранить их, используя что-то похожее на приведенный выше фрагмент кода. Учебник, подобный Парсингу HTML на PHP при помощи DiDOM может помочь вам.

Вместо того, чтобы писать текст в обычном формате, вы можете обернуть его в некоторый HTML, чтобы упростить чтение в браузерах. Возможности безграничны.

Заключительные мысли

Существует много других способов чтения и записи данных в файлы на PHP. Однако file_get_contents() и file_put_contents() будут решать почти все ваши основные потребности, не добавляя ненужных осложнений.

Единственный раз, когда вы можете столкнуться с проблемой с file_get_contents() , является то, что файл, который вы читаете, очень большой - размером 2ГБ или более. Это связано с тем, что file_get_contents() загружает весь файл в память сразу, и есть хорошие шансы исчерпать память с такими большими файлами. В этом случае вам нужно будет полагаться на такие функции, как fgets() и fread() , чтобы сразу прочитать небольшую часть файла.

С помощью функции file_get_contents() можно получить содержимое файла:

Также мы можем получить html-код какой-либо страницы в интернете:

Но работает это далеко не для всех сайтов, у многих есть защита от такого примитивного парсинга.

Чтение файла: file()

Функция file() позволяет получить содержимое файла в виде массива. Разделителем элементов является символ переноса строки.

Создадим в корне сайта файл data.txt со следующим содержимым:

Теперь запустим скрипт index.php со следующим кодом:

При запуске этого скрипта мы получим в браузере:

Заметили, что у первых двух строк длина 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 существует множество других полезных функций, работающих с дескриптором файла. Почитать о них можно в документации.

Я полагаю, вы хотите получить контент, созданный PHP , если да, используйте:

В противном случае, если вы хотите получить исходный код файла PHP , он такой же, как файл .txt:

реализация парсера php только для этого кажется огромным излишеством Я не понимаю, как это пройдет POST или GET. Я думаю, что ответ neobie будет более правильным и уместным, поскольку внешний файл PHP будет обрабатываться в контексте текущего. Используя приведенный выше пример, вы можете использовать get_template_directory_uri () и присоединиться к пути к вашему файлу. Это решит проблему использования прямого пути. $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text'); Это работает! Но всякий раз, когда я пытаюсь включить: yourfile.php? это не сработает. Какие-либо предложения? Совет: Начиная с PHP 4.3.0, вы можете сократить последние две строки до простого $myvar = ob_get_clean(); (см. Документацию ob_get_clean ) привет, это только статический HTML. см. этот пример. если это файл, который мы собираемся загрузить; ///////////////// <? php echo ("text1"); ?> Text2 /////////////// это результат, который я получил; //////////////////// Text2 /////////////////// @Kombuwa, не могли бы вы пояснить свой ответ в отредактированном виде на исходный вопрос, где у вас есть больше места для четких объяснений? Спасибо =)

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

Это загрузит, а затем оценит содержимое файла. Файл PHP необходимо будет полностью сформирован с <?php и ?> теги для eval оценки его.

Мне нравится этот метод. Просто мой файл не полностью сформирован с помощью тегов <? Php и?>, Чтобы eval мог его оценить. Есть ли другой путь? Это не сработает, если вы напишете php-код в этот файл .php

Теоретически вы можете просто использовать fopen, а затем использовать stream_get_contents.

Это должно прочитать весь файл в $ string для вас, а не оценивать его. Хотя я удивлен, что file_get_contents не работал, когда вы указали локальный путь .

В качестве альтернативы вы можете запустить буферизацию вывода, выполнить include / require и затем остановить буферизацию. С помощью ob_get_contents () вы можете просто получить то, что было выведено другим файлом PHP, в переменную.

Если в вашем файле есть такой оператор возврата:

Вы можете получить это в такой переменной:

file_get_contents () не будет работать, если на вашем сервере отключен allow_url_fopen . На большинстве общих веб-хостов он отключен по умолчанию из-за угроз безопасности. Кроме того, в PHP6 параметр allow_url_fopen больше не будет существовать, и все функции будут действовать так, как если бы он был постоянно отключен. Так что это очень плохой метод для использования.

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

Чтобы создать файл на php в исполняемом скрипте надо всего лишь указать несколько функций:

Рассмотрим сразу пример:

<?php
$text = "Какой-то тут текст для записи в файл";
$fp = fopen("file.txt", "w" );
fwrite($fp, $text);
fclose($fp);
?>

Тут вы должны знать :

fopen() - функция открывает файл чтения или для записи и уточнениями;

Это уточнения (параметр mode функции fopen) очень важно:

  • "r" - открыть файл в php ТОЛЬКО для чтения . Курсор помещается в начало.
  • "r+" - открыть файл в php для чтения и для записи . Курсор помещается в начало. . - при этих двух режимах r и r+ файлы уже должны быть созданы(иначе вылезет ошибка Warning: fopen(file.txt) [function.fopen]: failed to open stream: No such file or directory in . ), а мы лишь читаем или у нас есть возможность дописывать.
  • "w" - открывается файл ТОЛЬКО для записи. Файл урезается до нулевой длины - то есть затирается. Записывается, что нужно и Курсор ставится в начало.
  • "w+" - открывается файл для записи И ЧТЕНИЯ! Остальное то же самое что и в режиме "w". . - при этих двух режимах - если файл не был создан - ПРЕДПРИМЕТСЯ ПОПЫТКА ЕГО СОЗДАТЬ!
  • "a" - открыть файл ТОЛЬКО для записи. В отличие от "w" этот параметр не затирает содержимое файла, а ставит курсор в конец строки и добавляет в конец содержимое, которое мы хотели добавить.
  • "a+" - открыть файл для записи и чтения.

fwrite($fp, $text) - функция записи в файл на php - то есть то что находится в переменной $text записывается в файл, который находится в переменной $fp;

fclose($fp) - функция закрытия файла, который мы записали в переменную $fp;

Все теперь вы спокойно можете создавать правильно файлы на php, открывать их для чтения и редактирования.

Полезные дополнения и функции PHP для работы с открытым файлом:

while(!feof($fp)) $mytext = fgets($fp, 99);
echo $mytext."<br>";
>

здесь выполняется условие - "пока не достигнут конец файла то делай то то" while(!feof($fp))

1. Функция fgets ($fp, 99) - позволяет разделить все содержимое на участки в 99 байт и далее, чтобы это отчетливее увидеть мы помещаем тег <br>


Эта функция string fgets ( resource handle [, int length] ) по умолчанию принимает в параметр length 1024 байта(1 килобайт), если не указать так и будет. Этот параметр необязателен с PHP 4.2.0 (В случае ошибки возвращает FALSE)

Доп функции для открытия, записи и создания файла

Функция - int readfile ( string filename [, bool use_include_path [, resource context]] ) - считываем файл как единое целое.

Читает файл и записывает содержимое в буфер вывода. И возвращает количество выведенных байт. В случае ошибки вернет, если не использована собачка - @readfile.

Что-то подобное получится:


В конце слова тег стоят <br>.

б. Функция - array file ( string filename [, int use_include_path [, resource context]] ), делает то же самое, что и функция readfile, за одним исключением она добавляет содержимое файла в массив:


3а. Функция string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] ) - позволяет получить содержимое в виде одной строки.

Это более универсальная функция PHP для считывания файла, похожа на функцию file, только содержимое возвращается в строку, а не в массив и можно задавать условия - с какого байта начинать - offset и с какого заканчивать - maxlen. При неудаче вернет FALSE.

Важно. - в этом случае функция заменяет сразу 3: fopen(), fread() и fclose() и таким образом избавляет от мароки.

3б. Функция int file_put_contents ( string filename, mixed data [, int flags [, resource context]] ) - идентична последовательному вызову функций fopen(), fwrite() и fclose() - возвращает количество записанных байт.

Читайте также: