php利用fsockopen GET/POST提交表单及上传文件


Posted in PHP onMay 22, 2017

php利用fsockopen GET/POST提交表单及上传文件,具体内容如下

1.GET

get.php

<?php 
$host = 'demo.fdipzone.com'; 
$port = 80; 
$errno = ''; 
$errstr = ''; 
$timeout = 30; 
$url = '/socket/getapi.php'; 
 
$param = array( 
  'name' => 'fdipzone', 
  'gender' => 'man' 
); 
 
$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

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

2.POST

post.php

<?php 
$host = 'demo.fdipzone.com'; 
$port = 80; 
$errno = ''; 
$errstr = ''; 
$timeout = 30; 
$url = '/socket/postapi.php'; 
 
$param = array( 
  'name' => 'fdipzone', 
  'gender' => 'man', 
  '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

<?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.上传文件

file.php

<?php 
$host = 'demo.fdipzone.com'; 
$port = 80; 
$errno = ''; 
$errstr = ''; 
$timeout = 30; 
$url = '/socket/fileapi.php'; 
 
$form_data = array( 
  'name' => 'fdipzone', 
  'gender' => 'man', 
); 
 
$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

<?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.'">'; 
} 
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
怎么使 Mysql 数据同步
Oct 09 PHP
关于php mvc开发模式的感想
Jun 28 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 #PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 #PHP
Yii2框架中日志的使用方法分析
May 22 #PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 #PHP
php readfile下载大文件失败的解决方法
May 22 #PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 #PHP
PHP中trait使用方法详细介绍
May 21 #PHP
You might like
图解上海144收音机
2021/03/02 无线电
php xml-rpc远程调用
2008/12/19 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
python thread 并发且顺序运行示例
2009/04/09 Python
python九九乘法表的实例
2017/09/26 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
django缓存配置的几种方法详解
2018/07/16 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
导游的职业规划书范文
2013/12/27 职场文书
七年级音乐教学反思
2014/01/26 职场文书
六查六看剖析材料
2014/02/15 职场文书
欢迎领导检查标语
2014/06/27 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python