WeBinstruments

Инструментарий для веб-мастеров

 
 Меню
  PHP скрипты   
  Программы  
  Документация  
  Новости  
  Статьи  

 Услуги
  Регистрация доменов   


 Контакты
  icq: 158325531
  email:
  все контакты: здесь





Atom все поступления
Раздел Статьи
Раздел Файлы
Раздел Новости
комментарии
Главная / Статьи / PHP / Передача данных из скрипта методом POST


Передача данных из скрипта методом POST

08.05.2007
сайт автора: http://webi.ru
публикация данной статьи разрешена только со ссылкой на сайт автора статьи

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

Сначала нужно сформировать переменные и их значения, которые будем отправлять. Для этого составляем обычную строку, в которой прописываем переменные по тому же принципу, что и при передаче переменных в ссылке. Например:
$data="var=test&var2=privet";
В данном примере используются две переменные(var и var2), первая имеет значение "test" вторая "privet". Можете продолжать список переменных, разделяя их символом `&`.

Теперь нужно сформировать данные для отправки на сервер. Создаем еще одну текстовую переменную $out.

$out = "POST /file.php HTTP/1.1\n"; // здесь указываем какой файл запрашиваем и какой метод передачи данных будет использован. В данном примере вызывается файл file.php. Здесь нужно указывать путь до файла от корневой директории сайта (/path/file.php)

$out .= "Host: test.ru\n"; // тут указывается хост с которым будем соединяться (адрес вашего сайта)
$out .= "Referer: test.ru/\n"; // откуда идет отправка данных
$out .= "User-Agent: Opera\n"; // каким браузером притвориться
$out .= "Content-Type: application/x-www-form-urlencoded\n"; // это тип отправляемых данных из формы. Такой тип данных стоит у форм по умолчанию.

$out .= "Content-Length: ".strlen($data)."\n\n"; // здесь указывается размер передаваемых данных....
$out .= $data."\n\n"; // создаем полный набор данных для отправки.

Строка $out готова для отправки данных на сайт.
Остается только открыть соединение с сервером и кинуть ему эти данные.

Делается это так:
$fp = fsockopen("test.ru", 80, $errno, $errstr, 10);
В качестве параметров этой функции указываем хост для соединения(test.ru).
Затем порт (80), как правило другой номер порта используется редко.
$errno и $errstr получают установки, указывающие фактический уровень системной ошибки, в случае ошибки соединения, особой необходимости в них нет.
И последняя цифра (10) - это таймаут соединения, то есть сколько секунд будет ждать скрипт установки соединения.

Итак, соединение с хостом открыто.
Передаем открытому соединению созданные данные:
fputs($fp, $out);
Вот и все... Осталось закрыть соединение:
fclose($fp);
Переменные
var=test
и
var2=privet
улетели по адресу http://test.ru/file.php методом POST, так же, как это сделала бы html форма.

А вот и полный листинг:

<?
$data
="var=test&var2=privet";
$fp = fsockopen("test.ru", 80, $errno, $errstr, 10);
$out = "POST /file.php HTTP/1.1\n";
$out .= "Host: test.ru\n";
$out .= "Referer: test.ru/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";
fputs($fp, $out);
fclose($fp);
?>

Это был самый простой пример, в нем я показал только принцип отправки данных.
Сейчас расширю данный пример, для демонстрации отправки данных методом POST и GET одновременно и получения ответа от сервера.

<?
$url
= "http://test.ru/patch/file.php?var=23&var2=54"; // это адрес, по которому скрипт передаст данные методом POST. Как видно, здесь указаны переменные, которые будут переданы через GET
$parse_url = parse_url($url); // при помощи этой функции разбиваем адрес на массив, который будет содержать хост, путь и список переменных.
$path = $parse_url["path"]; // путь до файла(/patch/file.php)
if($parse_url["query"]) // если есть список параметров
$path .= "?" . $parse_url["query"]; // добавляем к пути до файла список переменных(?var=23&var2=54)
$host= $parse_url["host"]; // тут получаем хост (test.ru)
$data = "var3=test&var4=".urlencode("еще тест"); // а вот тут создаем список переменных с параметрами. Эти данные будут переданы через POST. Все значения переменных обязательно нужно кодировать urlencode ("еще тест")

$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (
$fp)
{

$out = "POST ".$path." HTTP/1.1\n";
$out .= "Host: ".$host."\n";
$out .= "Referer: ".$url."/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";

fputs($fp, $out); // отправляем данные

// после отправки данных можно получить ответ сервера и прочитать информацию выданную файлом, в который отправили данные...
// читаем данные построчно и выводим их. Конечно, эти данные можно использовать по своему усмотрению.
while($gets=fgets($fp,2048))
{
print
$gets;
}
fclose($fp);
}
?>

В этом примере файл file.php получил переменные:
GET var="23" и var2="54"
POST var3="test" и var4="еще тест"


Хочу обратить ваше внимание, данные передаваемые через POST или GET всегда передаются строкой(string), независимо от того, через форму они передаются или через скрипт.
Поэтому передавая число, помните, что в скрипт оно попадет как string.



Комментарии

RSS комментарии


06.06.2007 Андрей
Благодарю. какраз нужно было.



09.06.2007 Виктор
Отличная статья



21.08.2007 Димон
То что нужно!!! Полезная штука. Огромное спасибо.



08.09.2007 Александр
Огромное спасибо за статью.Давно искал подобную информацию.webi Вы лучшии !!!



27.09.2007 barber
спасибо :)



24.10.2007 Антон
Огромное спасибо. Инфа полезная, но долго не мог найти в инете ничего с примерами.



22.11.2007 Андрей
Большое спасибо, только что искал нечто подобное )))



23.11.2007 Ярослав
Спасибо) То что нужно.



26.11.2007 Javad
Спасибо,давно такое искал!!!



07.12.2007 JonniK
А как таким способом передать массив? Как должна выглядеть строка $data?



07.12.2007 Рвота
Ура, теперь зафлужу одних идиотов нахрен! Спасибо за статью!



16.12.2007 Серж
А как таким способом передать массив? Как должна выглядеть строка $data?
-----------
А разве так не получается?
$data = "var3=test&var4=".urlencode("еще тест")."&massiv[q]=".urlencode("текст")."&massiv[ds]=".urlencode("еще текст");



29.12.2007 Vik
отлично большое спасибо
то что искал



03.03.2008 NEon
Пасиба :)



10.05.2008 ScREW
Порезались символы переноса строки "
". Куда-то потерялся слэш.



11.07.2008 GDP
слэш по-моему тут нашли все ))))
Огромное спасибо за мануал. В отличии от того, что представлено на PHP.net данный ман сработал



11.07.2008 Lewik
Спасибо огромное, особенно за массив через GET POST!



23.07.2008 clgs
не чего интересно не увидел. не понимаю восхищения.



07.08.2008 Сергей
Спасибо, с удовольствием подпишусь на вашу рассылку)



28.09.2008 TROLL
ТО ЧТО НУЖНО!!!!!!!!!!!!!!!!


1 2 3 4

Добавить свой комментарий


Ваше имя(* обязательно)


Текст сообщения(* обязательно)





 Партнеры
Профессиональная реклама интернет магазина, поисковая оптимизация!



 
 
  запомнить

 
Copyright © 2003-2010 WeBi Constructor
Rambler's Top100