Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


WeBinstruments

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

 
 Меню
  PHP скрипты  
  Программы  
  Документация  
  Новости  
  Статьи  
 
 Контакты
  icq: 158325531
  email: adm.webi.ru
 
 
   Передача данных из скрипта методом POST

Комментарии к статье и вопросы http://webi.ru/webi_articles/6_7_f.html
Автор статьи webi.ru

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

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

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

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

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

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

Строка $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.1n";
$out .= "Host: test.run";
$out .= "Referer: test.ru/n";
$out .= "User-Agent: Operan";
$out .= "Content-Type: application/x-www-form-urlencodedn";
$out .= "Content-Length: ".strlen($data)."nn";
$out .= $data."nn";
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.1n";
$out .= "Host: ".$host."n";
$out .= "Referer: ".$url."/n";
$out .= "User-Agent: Operan";
$out .= "Content-Type: application/x-www-form-urlencodedn";
$out .= "Content-Length: ".strlen($data)."nn";
$out .= $data."nn";

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.

   Скрипты

Joomla 1.0.12
Русский сайт joom.ru
Обсуждаем и скачиваем тут http://webi.ru/webi_files/24_10_f.html

Joomla! – это Система Управления Содержимым (CMS), созданная той же самой командой, которая принесла сегодняшнюю известность системе Mambo CMS.

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


Copyright © 2003-2007 WeBi

В избранное