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 相关文章推荐
PHP 模板高级篇总结
Dec 21 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP常用的缓存技术汇总
May 05 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
跟我学Laravel之路由
Oct 15 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
PHP join()函数用法与实例讲解
Mar 11 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
跟我学Laravel之路由
2014/10/15 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP自定义多进制的方法
2016/11/03 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
JavaScript this 深入理解
2009/07/30 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
javascript实现动态标签云
2015/10/16 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
python批量修改文件名的实现代码
2014/09/01 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
python查询mysql,返回json的实例
2018/03/26 Python
Python入门学习指南分享
2018/04/11 Python
python文件操作的简单方法总结
2019/11/07 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
python/golang 删除链表中的元素
2020/09/14 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
幼儿园义卖活动方案
2014/01/17 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android