首页 > PHP教程 > php开发知识文章

php使用fsockopen函数实现GET/POST提交表单及上传文件

这篇文章主要为大家详细介绍了php使用fsockopen函数实现GET/POST提交表单及上传文件,具有一定的参考价值,感兴趣的小伙伴们参考一下

fsockopen — 打开一个网络连接或者一个Unix套接字连接,

fsockopen()将返回一个文件句柄,之后能被其他文件类函数调用(例如:fgets(),fgetss(),fwrite(),fclose()还有feof())。如果调用失败,将返回FALSE。

1.GET请求

$host = 'www.aa.com';
$port = 80;
$errno = '';
$errstr = '';
$timeout = 30;
$url = '/socket/getapi.php';
$param = array('name' => 'aa', 'gender' => '1');
$url = $url . '?' . http_build_query($param); // create connect
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
return false;
}
// send request
$out = "GET ${url} HTTP/1.1/r/n";
$out .= "Host: ${host}/r/n";
$out .= "Connection:close/r/n/r/n";
fputs($fp, $out);
// get response
$response = '';
while ($row = fread($fp, 4096)) {
$response .= $row;
}
fclose($fp);
$pos = strpos($response, "/r/n/r/n");
$response = substr($response, $pos + 4);
echo $response;

getapi.php

$name = $_GET['name'];
$gender = $_GET['gender'];
echo 'name=' . $name . '<br>';
echo 'gender=' . $gender;

2.POST请求

$host = 'www.aa.com';
$port = 80;
$errno = '';
$errstr = '';
$timeout = 30;
$url = '/socket/postapi.php';
$param = array('name' => 'aa', 'gender' => '1', 'photo' => file_get_contents('photo.jpg'));
$data = http_build_query($param); // create connect
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
return false;
}
// send request
$out = "POST ${url} HTTP/1.1/r/n";
$out .= "Host:${host}/r/n";
$out .= "Content-type:application/x-www-form-urlencoded/r/n";
$out .= "Content-length:" . strlen($data) . "/r/n";
$out .= "Connection:close/r/n/r/n";
$out .= "${data}";
fputs($fp, $out);
// get response
$response = '';
while ($row = fread($fp, 4096)) {
$response .= $row;
}
fclose($fp);
$pos = strpos($response, "/r/n/r/n");
$response = substr($response, $pos + 4);
echo $response;

postapi.php

define('UPLOAD_PATH', dirname(__FILE__) . '/upload');
$name = $_POST['name'];
$gender = $_POST['gender'];
$photo = $_POST['photo'];
$filename = time() . '.jpg';
file_put_contents(UPLOAD_PATH . '/' . $filename, $photo, true);
echo 'name=' . $name . '<br>';
echo 'gender=' . $gender . '<br>';
echo '<img src="upload/' . $filename . '">';

3.上传文件

$host = 'www.aa.com';
$port = 80;
$errno = '';
$errstr = '';
$timeout = 30;
$url = '/socket/fileapi.php';
$form_data = array('name' => 'aa', 'gender' => '1',);
$file_data = array(array('name' => 'photo', 'filename' => 'photo.jpg', 'path' => 'photo.jpg'));
// create connect
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
return false;
}
// send request
srand((double)microtime() * 1000000);
$boundary = "---------------------------" . substr(md5(rand(0, 32000)), 0, 10);
$data = "--$boundary/r/n";
// form data
foreach ($form_data as $key => $val) {
$data .= "Content-Disposition: form-data; name=\"".$key." \"/r/n"; $data .= "Content-type:text/plain/r/n/r/n"; $data .= rawurlencode($val) . "/r/n"; $data .= "--$boundary/r/n"; }
// file data
foreach ($file_data as $file) {
$data .= "Content-Disposition: form-data; name=\"" . $file['name'] . "\"; filename=\"" . $file['filename'] . "\"/r/n";
$data .= "Content-Type: " . mime_content_type($file['path']) . "/r/n/r/n";
$data .= implode("", file($file['path'])) . "/r/n";
$data .= "--$boundary/r/n";
}
$data .= "--/r/n/r/n";
$out = "POST ${url} HTTP/1.1/r/n";
$out .= "Host:${host}/r/n";
$out .= "Content-type:multipart/form-data; boundary=$boundary/r/n";
// multipart/form-data
$out .= "Content-length:" . strlen($data) . "/r/n";
$out .= "Connection:close/r/n/r/n";
$out .= "${data}";
fputs($fp, $out);
// get response
$response = '';
while ($row = fread($fp, 4096)) {
$response .= $row;
}
fclose($fp);
$pos = strpos($response, "/r/n/r/n");
$response = substr($response, $pos + 4);
echo $response;

fileapi.php

define('UPLOAD_PATH', dirname(__FILE__) . '/upload');
$name = $_POST['name'];
$gender = $_POST['gender'];
$filename = time() . '.jpg';
echo 'name=' . $name . '<br>';
echo 'gender=' . $gender . '<br>';
if (move_uploaded_file($_FILES['photo']['tmp_name'], UPLOAD_PATH . '/' . $filename)) {
echo '<img src="upload/' . $filename . '">';

fsockopen—打开一个网络连接或者一个Unix套接字连接

以上就是本文php使用fsockopen函数实现GET/POST提交表单及上传文件的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。