PHP знакомимся с функцией file_get_contents() PHP


Оглавление (нажмите, чтобы открыть):

PHP: знакомимся с функцией file_get_contents() PHP

(PHP 4 >= 4.3.0, PHP 5)

file_get_contents — Получить содержимое файла в виде одной строки

Описание string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует алгоритм ‘memory mapping’ (если поддерживается операционной системой).

Замечание: Если вы открываете URI содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .

Список изменений


Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Подсказка: Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция «fopen wrappers». Смотрите более подробную информацию об определении имени файла в описании функции fopen() , а также список поддерживаемых протоколов URL в Прил. M .

При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как о «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.

Чтение файла. PHP функция file_get_contents

Чтение файла. PHP функция file_get_contents

file_get_contents

(PHP 4 >= 4.3.0, PHP 5)

file_get_contents — Читает все содержимое файла и выдает результат в виде строки

Прим. переводчика. На базе этой функции часто строятся простейшие HTML-парсеры. Т.е. указывается URL нужной HTML страницы.
Функция возвращает страницу в виде строки, которую по HTML-тегам обрабатывает парсер.

Описание

Эта функция аналогична функции file(). Отличие заключается в том, что функция file_get_contents() возвращает файл в виде строки, которая начинается с заданного смещения (offset) и ограничивается максимальной длиной maxlen, задаваемой в байтах. В случае ошибки функция file_get_contents() возвращает FALSE.

file_get_contents() это лучший способ получать содержимое файла в виде строки. Для повышения быстродействия функция, если это позволяет делать операционная система, использует технологию memory mapping techniques.

Примечание: Если Вы открываете URI, содержащий специальные символы (например пробелы), Вам надо кодировать URI с помощью функции urlencode().


Примечание: Значение по умолчанию параметра maxlen не равно -1. По умолчанию значение этого параметра равно внутренней константе PHP, которая означает копировать все содержимое файла пока не встретится символ «конец файла». Если Вы хотите получить все содержимое файла, просто не используйте этот параметр.

Параметры

Имя файла, который надо прочитать.

Примечание: До версии PHP 6, этот параметр называется use_include_path, тип данных bool. Как и в PHP 5 параметр FILE_USE_INCLUDE_PATH может использоваться для указания, надо ли выполнять поиск в каталогах include path.

Значение параметра flags может быть представлено как комбинация следующих флагов (с некоторыми ограничениями), объединенных бинарной операцией И (|)

Внимание
Возможные значения параметра flags

значение описание
FILE_USE_INCLUDE_PATH Искать filename в каталогах, описанных в параметре include_path.
FILE_TEXT В PHP 6 кодировка файла по умолчанию установлена в UTF-8. Вы можете задать другую кодировку, создав пользовательский контекст (custom context) или используя stream_default_encoding(). Этот флаг не может использоваться с флагом (FILE_BINARY).
FILE_BINARY Если этот флаг установлен, то файл будет прочитан в бинарном режиме. Это значение установлено по умолчанию и не может использоваться совместно с флагом FILE_TEXT.

Ресурс контекста (context resource) создается при помощи функции stream_context_create(). Если Вам не нужен пользовательский контекст (custom context), просто пропустите этот параметр, установив NULL.

Это смещение, с которого должно начаться чтение файла.

Максимальная длина данных, которые надо прочитать. Если значение не задано, файл будет прочитан до конца.

Возвращаемое значение

Функция возвращает прочитанные данные или FALSE в случае ошибки.

Примеры использования file_get_contents

Пример #1 Получение и вывод исходного текста домашней страницы web-сайта

= file_get_contents ( ‘http://www.example.com/’ );
echo $homepage ;
?>

Пример #2 Поиск в каталогах include_path

// $file = file_get_contents ( ‘./people.txt’ , true );
// > PHP 5
$file = file_get_contents ( ‘./people.txt’ , FILE_USE_INCLUDE_PATH );
?>

Пример #3 Чтение части файла

//Будет прочитано 14 символов, начиная с 21го
$section = file_get_contents ( ‘./people.txt’ , NULL , NULL , 20 , 14 );
var_dump ( $section );
?>

В этом примере результат будет примерно такой:

Пример #4 Использование потокового контекста

// Подготовка контекста
$opts = array(
‘http’ =>array(
‘method’ => «GET» ,
‘header’ => «Accept-language: en\r\n» .
«Cookie: foo=bar\r\n»
)
);


$context = stream_context_create ( $opts );

//Открытие файла с использованием HTTP — залоговка, заданного выше
$file = file_get_contents ( ‘http://www.example.com/’ , false , $context );
?>

История изменения

Версия Описание
6.0.0 Параметр use_include_path заменен на flags.
5.1.0 Добавлены параметры offset и maxlen.
5.0.0 Добавлена поддержка контекста (context).

Примечания

Примечание: Эта функция может безопасно обрабатывать бинарные данные.

Имя файла может быть задано в виде URL только в том случае, если была включена настройка PHP fopen wrappers. Смотрите документацию к функции fopen(), чтобы узнать как задать имя файла. Для получения подробной информации об обертках (wrapper) смотрите List of Supported Protocols/Wrappers.

При использовании SSL, web-сервер Microsoft IIS нарушает протокол, закрывая соединение без отправки уведомления close_notify. Когда Вы дойдете до конца файла, PHP сообщит об этом как о ошибке «SSL: Fatal Protocol Error». Чтобы справиться с этой ошибкой, надо понизить значение параметра error_reporting до такого уровня, при котором не выводятся предупреждения. Если Вы открываете поток, используя https://, начиная с версии 4.3.7 PHP определит, что на сервере используется проблемный web-сервер IIS и не выведет предупреждение. Если для создания ssl:// сокета Вы используете функцию fsockopen(), то Вы сами должны примять меры для обработки этой ошибки.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: , , ,
.

Чтение файла функцией file get content PHP

Чтение файла или URI — обычная практика, и, как правило, это выгодно делать сразу и в полном объеме. Построчное или посимвольное чтение имеет существенное значение, но причин для этого не так много, и этим пользуются в особых случаях.

Функция file get content PHP выполняет чтение в строку от начала и до конца файла. Особенно интересно её использование, когда в качестве файла выступает адрес ресурса в Сети (URI).

Описание функции

Функция file get content PHP получает в качестве параметра имя файла или URI и выдает строку. В данном примере приведен код использования. Обращение к функции происходит четыре раза. Первый раз читается файл, который содержит просто текст, второй раз читается другой файл, который, кроме текста, имеет HTML-теги.

Следующая пара вызовов осуществляется через преобразование кодировки. Это не всегда необходимо, но в случаях, когда на выходе образуются странные символы, следует применить преобразование полученной после чтения строки, и русские буквы будут видны. Пример file get contents PHP в браузере будет отображен так, как показано ниже.

Первые два вызова функции не занимаются переводом кодировки в нужный формат, поэтому русские буквы не отображаются. Содержимое обоих файлов (local-1.txt и local-2.txt) одинаковое. Естественно, в обоих файлах есть переводы строки, но браузер их не разбирает. Функция file get content PHP читает всё как есть, но во втором файле есть нужные теги, и строчки отображаются как нужно, а не в одну строку. Данное обстоятельство не существенно, потому как по общему правилу файл читается как есть, и наличие в нем тегов актуально, когда читается HTML-страница, а там есть все необходимое. Однако данное обстоятельство, особенно факт возможного несоответствия кодировки, важно знать.

Другие параметры функции

Если нужно по-особенному что-то прочитать, например, только часть файла, или начинать с какой-то конкретной позиции в нем, можно использовать параметр смещения и количества. Однако функция file get content PHP в некоторых случаях может допустить ошибку, прочитав не то, не в том количестве или не с той позиции. Если читается не локальный файл, то заданное смещение и количество читаемых байт будут действительны. Во всех остальных случаях лучше проконтролировать результат, выдаваемый функцией. Можно задать параметр поиска файла в папке include path и параметр ресурса для чтения потоковых контекстов.

Последовательность параметров такова:

  • имя файла;
  • параметр поиска;
  • параметр ресурса;
  • смещение;
  • количество.

Не желательно использовать параметр поиска, хотя в некоторых случаях это целесообразно. При чтении как локальных, так и удаленных файлов или URI лучше всегда знать, что читается и откуда. Если в URI есть специальные символы, например пробел, URI следует кодировать функцией urlencode.


Чтение файла удаленно

Здесь функция использует аналогично. Нет никаких существенных отличий, за исключением только одного обстоятельства: при первых двух вызовов PHP file get contents ошибка отсутствует.

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

Но это обстоятельство следует иметь в виду. Чтение URI — это далеко не содержание сайта, а только конкретный адрес.

Функция чтения и парсинг

При неправильном имени читаемого файла или URI возможна ошибка. Это легко отследить по отсутствию результата чтения. При неправильных других параметрах функция генерирует булево значение FALSE. Обычное использование функции чтения целиком связывается с оптовым заданием параметров сайта. Например, чтение файла конфигурации, данных о пользователях или файла настроек. Во всех таких случаях:

  • результат точно определён;
  • структура читаемых данных тоже.

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

Чтение файла: функция file get content (PHP)

Формально конструкция file get content PHP похожа на file, но помещает прочитанное содержимое в строку, а не в массив строк и позволяет указать смещение в файле, с которого следует начинать чтение.

Обычное чтение посредством fopen/fgets/fclose становится менее востребованным. Удобнее прочитать содержимое файла или страницы сайта целиком и потом делать с ним нужные операции. Конструкция file get content PHP позволяет создать более эффективные производительные алгоритмы обработки информации.

Синтаксис и пример использования

Здесь $filename — имя файла или URL страницы, $use_include_path — позволяет искать файл в include path, $context — ресурс, созданный конструкцией stream_context_create(), $offset — смещение с которого начинается чтение, $maxlen — максимальное количество данных, которое нужно прочитать.

Обычно используется более простой вариант file get content PHP:

Как видно, результат представляет собой полноценную страницу, в то время как конструкция PHP file get contents по адресу (http . ) прочитала и записала внутреннее содержание этой страницы в переменную $cLine.

Опции и параметры контекста

Следует иметь ввиду, что применение параметра $context открывает большие возможности.

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

Различные файловые системы, обработчики потоков (wrappers) требуют различных параметров и опций для описания контекста. Его можно создать посредством конструкций stream_context_create (stream_context_set_option, stream_context_set_params).

Массовая обработка страниц


Вместо конкретного адреса URL параметр $filename может быть представлен именем переменной. Это дает возможность анализировать содержимое сайтов в автоматическом программируемом режиме, узнавать имена страниц, определять ссылки, извлекать нужную информацию.

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

Чтение текстовых файлов

Проблем нет, какой именно файл читать. В следующем, сложном варианте конструкция file get contents php — пример того, что «вордовский» файл можно прочитать без проблем:

Здесь представлен сложный документ, который используется для тестирования библиотеки PHPOffice/PHPWord. Файл MS Word (*.docx), как известно, представляет собой zip-архив, внутри которого находится информация по стандарту Open XML.

Как правило, файлы документов достаточно большие, сложные, но конструкция file get content PHP справляется с их чтением без затруднений. Специфика именно этого примера состоит в том, что обработка документа чисто средствами библиотеки PHPOffice/PHPWord не позволяет получить необходимые возможности, а последовательное чтение файла попросту невозможно.

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

Если взять пример документа (*.docx) с таблицами, ситуация вовсе не решаема при последовательной обработке файла. Требуется как минимум два прохода по телу документа, если не вдаваться в частности, например, при вложенности таблиц друг в друга.

Проблемы кодировки и спецсимволов

Если чтение сложных файлов не вызывает проблем, то проблемы вызывает работа с простыми файлами. Изначально следует принять за аксиому: конструкция file get content PHP читает правильно. Даже если не использовать те или иные параметры, самый простой вариант ее применения всегда сработает как надо.

Сложности вызывают угловые скобки и кодировка файла. Следует отличать работу внутри алгоритма от отображения результата в окне браузера. На рисунке с примером вордовского файла строка (1) — $cLine = scChangeLTGT($cLine) — вызывает функцию преобразования пары угловых скобок в спецсимволы « » иначе просто прочитанный файл не всегда можно отобразить в окне браузера. Как писать эту функцию — не суть важно, но существенно не забывать от том, что прочитанная информация может содержать теги XML и HTML, и это требует особого внимания.

Следующий момент: кодировка файла. Далеко не всегда простой текстовый файл не создает проблем. Если читается текстовая информация, то наличие русских букв может создать определенные трудности (2).

$cLine = iconv(‘UTF-8’, ‘CP1251’, $cLine). В этом контексте использование функции iconv() с правильным направлением преобразования актуально не только в отношении PHP «file get contents http://» для чтения страницы сайта, но и когда читается обыкновенный локальный файл.

Если результат чтения «не виден», первое дело — проверить кодировку символов.

Расскажите подробно про php://input, как пользоваться?

php://input возвращает все необработанные данные после HTTP-заголовков запроса, независимо от типа контента.

Данные, могут быть:

  • application/x-www-form-urlencoded ( application/x-www-form-urlencoded тип application/x-www-form-urlencoded для простых форм- application/x-www-form-urlencoded ) или
  • multipart/form-data-encoded (в основном multipart/form-data-encoded для загрузки файлов)

Это связано с тем, что это единственные типы контента, которые должны поддерживаться браузерами. Поэтому сервер и PHP традиционно не ожидают получения какого-либо другого типа контента (что не означает, что они не могли бы).

Если вы просто отправляете POST-ом обычную HTML-форму, запрос выглядит примерно так:

Но если вы много работаете с Ajax, может понадобиться обмен более сложными данными с типами (строка, int, bool) и структурами (массивы, объекты), поэтому в большинстве случаев JSON является лучшим выбором. Но запрос с JSON-полезной нагрузкой выглядел бы примерно так:

Теперь содержимое будет application/json (или, по крайней мере, ни один из вышеперечисленных), так что $_POST -wrapper из PHP не знает, как с этим справиться (пока).


Данные всё еще там, вы просто не можете получить к нему доступ через $_POST. Поэтому вам нужно получить его с «сыром» виде помощью file_get_contents(‘php://input’) (если он не закодирован в формате multipart/form-data).

Это также способ доступа к XML-данным или любому другому нестандартному типу контента.

PHP file_get_contents очень медленный при использовании полного URL-адреса

Я работаю со сценарием (который я не создавал изначально), который создает файл PDF с HTML-страницы. Проблема в том, что сейчас требуется очень много времени, например, 1-2 минуты. Предположительно, это работало нормально, но замедлилось в течение последних нескольких недель.

Скрипт вызывает file_get_contents на php-скрипте, который затем выводит результат в HTML-файл на сервере и запускает приложение-генератор pdf в этом файле.

Кажется, я сузил проблему до вызова file_get_contents на полный URL, а не на локальный путь.

Когда я использую

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

для обработки требуется от 30 до 90 секунд.

Он не ограничивается нашим сервером, он медленен при доступе к любому внешнему URL-адресу, например http://www.google.com . Я считаю, что сценарий вызывает полный URL-адрес, потому что есть необходимые строковые переменные запроса, которые не работают, если вы вызываете файл локально.

Я также пробовал fopen , readfile и curl , и все они были так же медленны. Любые идеи о том, где искать, чтобы исправить это?

Примечание. Это было исправлено в PHP 5.6.14. Connection: close заголовок теперь будет автоматически отправляться даже для запросов HTTP / 1.0. См. 4b1dff6 .

Мне было трудно понять причину медленности скриптов file_get_contents.

Анализируя это с помощью Wireshark, проблема (в моем случае и, вероятно, ваша тоже) заключалась в том, что удаленный веб-сервер НЕ ЗАКРЫВАЕТ СОЕДИНЕНИЕ TCP до 15 SECONDS (т.е. «keep-alive»).

В самом деле, file_get_contents не отправляет HTTP-заголовок «соединение», поэтому по умолчанию удаленный веб-сервер считает, что это соединение keep-alive и не закрывает поток TCP до 15 секунд (это может быть не стандартное значение – зависит на сервере conf).

Обычный браузер считает, что страница полностью загружена, если длина полезной нагрузки HTTP достигает длины, указанной в ответе HTTP-заголовка Content-Length. File_get_contents не делает этого, и это позор.

РЕШЕНИЕ

Итак, если вы хотите знать решение, вот оно:

Дело только в том, чтобы сообщить удаленному веб-серверу закрыть соединение при завершении загрузки , так как file_get_contents недостаточно интеллектуальны, чтобы сделать это самостоятельно, используя ответ HTTP-заголовка Content-Length.

Я бы использовал curl () для извлечения внешнего контента, так как это намного быстрее, чем метод file_get_contents . Не уверен, что это решит проблему, но стоит того.

Также обратите внимание, что скорость ваших серверов будет влиять на время, необходимое для получения файла.


Вот пример использования:

Иногда это происходит потому, что DNS слишком медленный на вашем сервере, попробуйте следующее:

У меня была такая же проблема,

Единственное, что сработало для меня, – это установить тайм-аут в массиве $options .

Можете ли вы попробовать получить этот URL-адрес на сервере из командной строки? завиток или wget приходят на ум. Если они получают URL с нормальной скоростью, то это не сетевая проблема и, скорее всего, что-то в настройке apache / php.

Время: 50976 мс (время avaerage всего 5 попыток)

Время: 46679 мс (время avaerage всего 5 попыток)

Примечание. Request.php используется для извлечения некоторых данных из базы данных mysql.

У меня огромные данные, переданные API, я использую file_get_contents для чтения данных, но это заняло около 60 секунд . Однако, используя решение KrisWebDev, потребовалось около 25 секунд .

То, что я также рассмотрел бы с Curl, это то, что вы можете «направить» запросы. Это очень помогло мне, так как у меня нет доступа к версии PHP, которая позволяет нарезать резьбу на данный момент.

Например, я получал 7 изображений с удаленного сервера с помощью file_get_contents и занимал 2-5 секунд за запрос. Только этот процесс включал 30 секунд или что-то в этом процессе, в то время как пользователь ждал создания PDF-файла.

Это буквально сократило время до примерно 1 изображения. Другой пример: я проверяю 36 URL-адресов за время, которое потребовалось ранее, чтобы сделать это. Я думаю, вы понимаете. ��

Затем проверьте результаты:

затем закройте файл:

Я знаю, что это старый вопрос, но я нашел его сегодня, и ответы не помогли мне. Я не видел, чтобы кто-то говорил, что максимальное количество соединений на IP может быть установлено равным 1. Таким образом, вы выполняете API-запрос, а API выполняет другой запрос, потому что вы используете полный URL-адрес. Вот почему загрузка непосредственно с диска работает. Для меня это устранило проблему:

Php. Отправка file_get_contents через POST. РЕШЕНО!

Главная >> Backend >> Php. Отправка file_get_contents через POST. РЕШЕНО!

Php. Отправка file_get_contents через POST. РЕШЕНО!

На просторах интернета часто можно встретить мнения о том, что file_get_contents не подходит для запроса методом POST. Мол, для этого только нужно CURL городить — но это не совсем так. Сейчас я покажу, как очень просто оправить данные POST-ом при помощи file_get_contents.

На самом деле у file_get_contents есть третий параметр, о котором как раз мы часто и забываем. Именно при его помощи мы можем указать контекст отправки. Итак, пример:

Как видите в примере, в массиве $opts мы задаем параметры для будущего запроса, где и указываем метод отправки — POST. Более того мы можем не просто отправить запрос POST-ом, но и передать данные этим методом — для этого в $opts указано значение ключа ‘content’ . В нем находится простой массив, который и будет доступен через $_POST . Пример был взят с stackoverflow.

Ну вот и всё — пример очень прост и зачастую более уместен, нежели использование громоздкого CURL, в случае простых задач.


PHP чтение из файла и как его реализовать полегче

Дата публикации: 2020-06-26

От автора: сегодня разберемся, как происходит в PHP чтение из файла. Начнем с легких скриптов и закончим реализацией более сложных. Стартуем!

Полегче

Начнем с рассмотрения функции file_get_contents(). Она «запихивает» содержимое файла в один ряд. Вот так:

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Теперь постараемся реализовать построчное извлечение информации, а не «гурьбой». Для этого применим file(). Данная функция возвращает array строк. Ну, а с массивами (я надеюсь) мы разберемся:

Что-то построчно «вынуть» контент пока не получается. А мы сейчас «ударим» по массиву циклом foreach и array разобьется на нужные «осколки».

Так смотрится намного изящнее.

Посложнее

Начинаем потихоньку «окунаться». Тут главное не начать «зарываться», а то можно застрять надолго. В предыдущих примерах мы только то и делали, что извлекали, извлекали и еще раз извлекали. А если работать с записью нужно? Вооружаемся примером:

Обратите внимание, что мы не только впихнули текст, но и вывели его из файла 1.txt.Также для того, чтобы строка нормально выводилась, я использовал дополнительные флаги. Но они работают только при чтении одной строки. Дальше все опять начнет лепиться в один ряд. Для решения этой проблемы нужно применять функции из семейства fopen(), переставлять курсор и т.д. Все мы уже проходили. Так что сами .

Что касается извлечения данных из exel форматов, то тут придется воспользоваться сторонней библиотекой. Но это уже из другого фильма!

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Отправить POST через file_get_contents()

Чтобы получить содержимое веб-страницы все с удовольствием используют file_get_contents(), например file_get_contents(‘http://www.habrahabr.ru/’). Но я уже давно наблюдаю, что, как дело доходит до того, чтобы отправить POST, разработчики используют либо CURL, либо открывают сокеты. Я не считаю, что это плохо или что не надо так делать, просто для решения простых задач можно использовать простые решения.

Я и сам так раньше делал, пока на наткнулся на понятие контекстов потоковых операций в PHP. Контекст позволяет передать дополнительные параметры потоковому обработчику. Для http например, можно сконфигурировать POST-запрос или передать дополнительные заголовки.


file_get_contents() принимает 3 параметром «контекст», который собственно и конфигурирует сам запрос.
Ниже пример такого запроса или RTFM

‘simpletest/unit_tester.php’ ;
require_once ‘simpletest/default_reporter.php’ ;

define( ‘PARAM_NAME’ , ‘var’ );
define( ‘PARAM_VALUE’ , ‘testData’ );
define( ‘QUERY’ , ‘var=testData’ );

/**
* Набор тестов
*/
class FileGetContentsTest extends UnitTestCase <

/**
* Проверить, что пришел POST
*/
public function testIsPost() <
$ this ->assertEqual( ‘POST’ , $_SERVER[ ‘REQUEST_METHOD’ ],
‘Expected POST request’ );
$ this ->assertTrue(isset($_POST[PARAM_NAME]) && $_POST[PARAM_NAME] == PARAM_VALUE,
‘Expected POST contains ‘ . QUERY);
>
>

/**
* Отправить POST
*/
if (!$_SERVER[ ‘QUERY_STRING’ ]) <

// Создать контекст и инициализировать POST запрос
$context = stream_context_create(array(
‘http’ => array(
‘method’ => ‘POST’ ,
‘header’ => ‘Content-Type: application/x-www-form-urlencoded’ . PHP_EOL,
‘content’ => QUERY,
),
));

// Отправить запрос на себя, чтобы запустить тесты
// и показать результат выполнения тестов
echo file_get_contents(
$file = «http://<$_SERVER['HTTP_HOST']><$_SERVER['PHP_SELF']>?runTests» ,
$use_include_path = false ,
$context);

/**
* Запустить тесты
*/
> else <
$suite = new FileGetContentsTest;
$suite->run( new DefaultReporter());
>

* This source code was highlighted with Source Code Highlighter .

Следуюшие файловые функции принимают контексты:

  • file
  • fopen
  • readfile
  • file_get_contents
  • file_put_contents

PHP отправки переменных в файл_get_contents()

Я хочу иметь возможность отправлять несколько переменных в файл через file_get_contents() .

Я хочу, чтобы переменная $mystr была равна ‘The value of myvar is: This is a variable’

Есть ли какая-нибудь другая функция, которая позволит вам сделать это в PHP?

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

Существует большая разница между получением содержимого файла и , выполняющим script:

include — эта директива PHP запускает указанный файл как script, а область та же, что и область, в которой выполняется вызов include . Поэтому, чтобы передать ему переменные, вам просто нужно определить их перед вызовом include . include может использоваться только локально (может включать только файлы в той же файловой системе, что и сервер PHP).

file_get_contents — При получении файла локально это просто извлекает текст, содержащийся в файле. Обработки PHP не выполняются, поэтому нет возможности «пропускать» переменные. Если вы проверите $myvar в приведенном выше примере, вы увидите, что он содержит точную строку » » — он не был выполнен.

Однако PHP немного путал некоторые вещи, позволяя file_get_contents извлекать содержимое файла «remote» — интернет-адрес. В этом случае понятие одно и то же; PHP просто втягивает исходный результат того, что содержится в этом адресе — но PHP, Java, Ruby или что-то еще работает на этом удаленном сервере может выполнить что-то для получения этого результата.

В этом случае вы можете «передавать» переменные в URL-адресе (называемом GET параметрами запроса) в соответствии с спецификациями URL-адреса (если это API или что-то подобное). Невозможно передать переменные по вашему выбору, которые не были указаны для обработки в script, которые будут обрабатываться этим удаленным сервером.

Примечание. «Удаленный сервер», упомянутый МОЖЕТ быть вашим собственным сервером, хотя будьте осторожны, потому что это может еще больше запутать вещи, если вы действительно не знаете, как все это работает (он становится вторым, полностью отдельный запрос). Обычно нет оснований для этого, вместо использования include , даже если они могут выполнять аналогичные результаты.

Мастер Йода рекомендует:  Изучаем WP_Query Свойства и методы
Добавить комментарий