Я знаю, что этот вопрос уже задавался на форуме несколько раз, но ни один из ответов мне не помог. Я по-прежнему получаю пустую строку каждый раз, когда пытаюсь отправить данные через параметр URL.
Пример передачи переменной с использованием параметра url
Я уже установил allow_url_fopen = On , установить post_max_size = 8M и до сих пор нет надежды. Однако, когда я пытаюсь отправить данные, нажав кнопку отправки, он отправляет необработанные данные в php ( string(21) «name=ok&submit=submit» ).
Кто-нибудь хочет помочь? Спасибо!
Содержание
- Решение
- Возвращаемое значение
- Дополнительная информация
- Версии и история изменений в PHP
- Связанные функции
- Параметры
- Наглядные примеры
- Дополнительные советы
Решение
php: // input — поток только для чтения, который позволяет вам читать необработанные данные из тела запроса. В случае запросов POST предпочтительно использовать php: // input вместо $ HTTP_RAW_POST_DATA, так как это не зависит от специальных директив php.ini.
Важной частью является « POST reqest».
Это значит, когда вы говорите http://www.example.com/tests/testtest.php?name=what Вы отправляете GET запрос, а не POST запрос. Следовательно, нет тела запроса, и вы не можете ничего прочитать php://input ,
Для чтения ввода формы, переданного как параметры URL, вы можете использовать глобальный $_GET переменная.
Когда вы используете запрос POST, вы обычно используете глобальный $_POST массив, вместо чтения тела запроса вручную через php://input ,
Вы также можете рассмотреть $_REQUEST , если вам все равно, если это запрос POST или GET. Хотя, будьте в курсе Что не так с использованием $ _REQUEST []?
Функция PHP file get ontents() используется для считывания файла в строку. Если применять ее для дистанционного считывания, не забудьте, что любой URL-адрес со специальными символами должен быть правильно закодирован при помощи urlencode() .
Пример использования file_get_contents() :
Возвращаемое значение
Функция возвращает считанные данные или вернет FALSE при ошибке.
Дополнительная информация
file_get_contents() должна стать приоритетной функцией для считывания содержимого файла в строку. Она задействует метод отображения файла в память .
Одно из основных отличий между функциями file() и file_get_contents() заключается в том, что последняя считывает содержимое в строку, начиная с указанного параметра offset , и до maxlen . А file() считывает содержимое в массив.
Версии и история изменений в PHP
Функция file get contents PHP работает с PHP 4 >= 4.3.0, PHP 5, PHP 7 .
Параметр offset появился в PHP 5.1 .
Параметр maxlen также появился в PHP 5.1 .
Связанные функции
Вам также следует знать о следующих PHP-функциях :
file() — считывает весь файл в массив;
fgets() — считывает строку из указанного файла;
fread() — производит бинарно-безопасное чтение файла;
readfile() — выводит файл;
file_put_contents() — записывает строку в файл;
stream_get_contents() — считывает остаток потока в строку;
stream_context_create() — создаёт контекст потока.
Параметры
Параметр filename функции PHP file get contents используется для указания имени файла. Это обязательный параметр.
Параметр use_include_path используется для указания, может ли константа FILE_USE_INCLUDE_PATH ( из файла php.ini ) использоваться для запуска поиска include path . Это необязательный параметр.
Параметр context используется для указания контекста, созданного функцией stream_context_create() . Если не нужен произвольный контекст, можно опустить этот параметр при помощи NULL . Это необязательный параметр.
Параметр offset используется для указания смещения, с которого в исходном потоке начинается считывание. Отрицательное значение offset позволяет начинать смещение с конца потока. Это необязательный параметр.
Не забудьте, что поиск ( offset ) не поддерживается при дистанционной работе с файлами. В редких случаях при работе с нелокальными файлами могут сработать небольшие смещения, но в этом случае результат работы непредсказуем, так как работа производится в потоке в буфере.
Параметр maxlen используется для указания максимальной длины данных, которые необходимо считать. По умолчанию считывание производится до конца файла. Это необязательный параметр.
Наглядные примеры
file get contents PHP пример использования :
Приведённый выше код позволяет получить и вывести исходный код страницы указанного сайта. В следующем примере показано, как считать фрагмент данных файла:
В следующем примере показано, как использовать контекст потока для дистанционного открытия файла:
Дополнительные советы
- В функции file get contents используется POST . Для этого сначала нужно создать контекст:
- Можно использовать поточный контекст для установки правильного тайм-аута, не связываясь со значениями php.ini :
- В некоторых случаях использования функции PHP file get contents http возникает проблема с кодировкой UTF-8 при считывании URL-адреса с кодировкой отличной от UTF-8 . Это происходит потому, что по умолчанию используется UTF-8 . Приведенная ниже функция решает эту проблему:
- Кажется, file ищет файл внутри текущей директории, перед тем как обратиться к include path , даже если установлен флаг FILE_USE_INCLUDE_PATH .
Вроде бы сказано, что include_path – первая локация, в которой должен осуществляться поиск. Но я несколько раз бывал в ситуации, когда директория, содержащая включение файла, оказывалась первой в порядке поиска.
Данная публикация представляет собой перевод статьи « PHP file_get_contents() Function » , подготовленной дружной командой проекта Интернет-технологии.ру
file_get_contents («php: // input») или $ HTTP_RAW_POST_DATA, какой из них лучше получить тело запроса JSON?
И какой тип запроса ( GET или POST ) следует использовать для отправки данных JSON при использовании клиентской стороны XmlHTTPRequest ?
Мой вопрос был вдохновлен этим ответом: как разместить JSON на PHP с завитом
С точки зрения протокола file_get_contents(«php://input») на самом деле более корректно, так как вы все равно не обрабатываете данные мультиплексора http.
Фактически, php://input позволяет вам считывать необработанные данные POST.
Это менее энергоемкая альтернатива $ HTTP_RAW_POST_DATA и не нуждается в каких-либо специальных директивах php.ini .
php://input не доступен с enctype=»multipart/form-data» .
php: // input – это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса. В случае запросов POST предпочтительнее использовать вход php: // вместо $ HTTP_RAW_POST_DATA, поскольку он не зависит от специальных директив php.ini . Более того, для тех случаев, когда по умолчанию HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации always_populate_raw_post_data.
file_get_contents (php: // input) – получает необработанные данные POST, и вам нужно использовать это при написании API-интерфейсов и необходимости ввода XML / JSON / …, который не может быть декодирован в $ _POST с помощью PHP :
отправить по почте JSON string
1.php
Обычные правила должны применяться для отправки запроса. Если запрос заключается в получении информации (например, результат «поиска» частичного поиска или новая страница для отображения и т. Д.), Вы можете использовать GET. Если отправляемые данные являются частью запроса на изменение (обновление базы данных, удаление записи и т. Д.), Используйте POST.
На стороне сервера нет оснований использовать исходный ввод, если вы не хотите захватить весь блок сообщений / получения данных за один раз. Вы можете получить нужную информацию с помощью массивов _GET / _POST, как обычно. Библиотеки AJAX, такие как MooTools / jQuery, будут обрабатывать сложную часть выполнения фактических вызовов AJAX и данных формы кодирования в соответствующие форматы для вас.
Для данных JSON намного проще ПОСТ-ТАК как «тип приложения / json». Если вы используете GET, вам нужно URL-кодировать JSON в параметре, и это довольно грязно. Кроме того, при POST не существует ограничения по размеру. Размер GET, если он ограничен (максимум 4K).
Ваш второй вопрос прост, GET имеет ограничение по размеру в 1-2 килобайта как на стороне сервера, так и на стороне браузера, поэтому любые большие объемы данных, которые вы должны были бы отправлять через POST.
Источник: