mirror of
https://github.com/php/web-pecl.git
synced 2026-03-24 07:12:15 +01:00
60 lines
1.8 KiB
PHP
60 lines
1.8 KiB
PHP
<?php
|
|
|
|
// $Id: posttohost.php 317195 2011-09-23 12:34:47Z pajoye $
|
|
|
|
/*
|
|
This code is used to post data to the central server which
|
|
can store the data in database and/or mail notices or requests
|
|
to PHP.net stuff and servers
|
|
*/
|
|
|
|
function posttohost($url, $data)
|
|
{
|
|
// Get parts of URL
|
|
$url = parse_url($url);
|
|
if (!$url) { return "couldn't parse url"; }
|
|
|
|
// Provide defaults for port and query string
|
|
if (!isset($url['port'])) { $url['port'] = ""; }
|
|
if (!isset($url['query'])) { $url['query'] = ""; }
|
|
|
|
// Build POST string
|
|
$encoded = "";
|
|
foreach ($data as $k => $v) {
|
|
$encoded .= ($encoded ? "&" : "");
|
|
$encoded .= rawurlencode($k) . "=" . rawurlencode($v);
|
|
}
|
|
|
|
// Open socket on host
|
|
$fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
|
|
if (!$fp) { return "failed to open socket to {$url['host']}"; }
|
|
|
|
// Send HTTP 1.0 POST request to host
|
|
fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query']));
|
|
fputs($fp, "Host: {$url['host']}\n");
|
|
fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
|
|
fputs($fp, "Content-length: " . strlen($encoded) . "\n");
|
|
fputs($fp, "Connection: close\n\n");
|
|
fputs($fp, "$encoded\n");
|
|
|
|
// Read the first line of data, only accept if 200 OK is sent
|
|
$line = fgets($fp, 1024);
|
|
if (!eregi("^HTTP/1\\.. 200", $line)) { return NULL; }
|
|
|
|
// Put everything, except the headers to $results
|
|
$results = ""; $inheader = TRUE;
|
|
while(!feof($fp)) {
|
|
$line = fgets($fp, 1024);
|
|
if ($inheader && ($line == "\n" || $line == "\r\n")) {
|
|
$inheader = FALSE;
|
|
}
|
|
elseif (!$inheader) {
|
|
$results .= $line;
|
|
}
|
|
}
|
|
fclose($fp);
|
|
|
|
// Return with data received
|
|
return $results;
|
|
}
|