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 相关文章推荐
在JavaScript中调用php程序
Mar 09 PHP
PHP 数组入门教程小结
May 20 PHP
apache mysql php 源码编译使用方法
May 03 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
PHP中的traits简单使用实例
May 13 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 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
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python列表返回重复数据的下标
2020/02/10 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
电厂职工自我鉴定
2014/02/20 职场文书
2014年财政工作总结
2014/12/10 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
闪闪的红星观后感
2015/06/08 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
SQL基础的查询语句
2021/11/11 MySQL