В этой статье я расскажу как отправлять данные из 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 форма.
Это был самый простой пример, в нем я показал только принцип отправки данных.
Сейчас расширю данный пример, для демонстрации отправки данных методом 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)
{
// после отправки данных можно получить ответ сервера и прочитать информацию выданную файлом, в который отправили данные... // читаем данные построчно и выводим их. Конечно, эти данные можно использовать по своему усмотрению.
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! – это Система Управления Содержимым (CMS), созданная той же самой командой, которая принесла сегодняшнюю известность системе Mambo CMS.
Главное отличие Joomla! от других систем – это стремление разработчиков сохранить управление настолько простым, насколько это возможно, в то же время обеспечивая максимальную функциональность. В итоге, не имея специального образования, можно полностью контроллировать свои сайты, вместо того чтобы платить чрезмерно большие суммы денег за закрытое, являющееся чьей-то собственностью программное обеспечение.