文档章节

fsockopen上传文件三法

史帝文
 史帝文
发布于 2016/11/04 10:03
字数 1815
阅读 13
收藏 0

搜索字:fsockopen上传文件 

/*不通过$_FILES提交图片的方法*/

$data = file_get_contents("php://input");

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。 1, php://input 可以读取http entity body中指定长度的值,由Content-Length指定长度,不管是POST方式或者GET方法提交过来的数据。但是,一般GET方法提交数据 时,http request entity body部分都为空。 2,php://input 与$HTTP_RAW_POST_DATA读取的数据是一样的,都只读取Content-Type不为multipart/form-data的数据。
学习笔记
 1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST2,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA3, 只有Coentent-Type为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。 4,只有Content-Type为application/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。 5,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini 6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。
 
例子
 1.php用file_get_contents("php://input")或者$HTTP_RAW_POST_DATA可以接收xml数据
 比如:
  getXML.php;//接收XML地址
  
<?php
$xmldata = file_get_contents("php://input"); 
     $data = (array)simplexml_load_string($xmldata); 
?> 
 
  这里的$data就是包含xml数据的数组,具体php解析xml数据更新详细的方法
  sendXML.php
 
<?php
$xml = '<xml>xmldata</xml>';//要发送的xml 
$url = 'http://localhost/test/getXML.php';//接收XML地址 
$header = 'Content-type: text/xml';//定义content-type为xml 
$ch = curl_init(); //初始化curl 
curl_setopt($ch, CURLOPT_URL, $url);//设置链接 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头 
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//POST数据 
$response = curl_exec($ch);//接收返回信息 
if(curl_errno($ch)){//出错则显示错误信息 
        printcurl_error($ch); 
     }
curl_close($ch); //关闭curl链接 
echo $response;//显示返回信息 ?>
 
2.一个手机上传图片到服务器的小程序
  a. 上传文件  
<?php
//@file phpinput_post.php 
$data=file_get_contents('btn.png'); 
     $http_entity_body = $data; 
     $http_entity_type = 'application/x-www-form-urlencoded'; 
     $http_entity_length = strlen($http_entity_body); 
     $host = '127.0.0.1'; 
     $port = 80; 
     $path = '/image.php'; 
     $fp = fsockopen($host, $port, $error_no, $error_desc, 30); 
     if($fp){fputs($fp, "POST {$path} HTTP/1.1\r\n"); 
        fputs($fp, "Host: {$host}\r\n"); 
        fputs($fp, "Content-Type: {$http_entity_type}\r\n"); 
        fputs($fp, "Content-Length: {$http_entity_length}\r\n"); 
        fputs($fp, "Connection: close\r\n\r\n"); 
        fputs($fp, $http_entity_body . "\r\n\r\n"); 
 
        while(!feof($fp)){$d .= fgets($fp, 4096); 
        }fclose($fp); 
        echo$d; 
     }?> 
 
  b. 接收文件
  
<?php
        /** 
         *Recieve image data 
        **/
error_reporting(E_ALL); 
 
     function get_contents(){
        $xmlstr= file_get_contents("php://input"); 
        $filename=time().'.png'; 
        if(file_put_contents($filename,$xmlstr)){
                echo'success'; 
            }else{
                echo'failed'; 
        }
    }
    get_contents(); 
?>
3.获取HTTP请求原文
  
/** 
     * 获取HTTP请求原文 
     * @return string 
     */function get_http_raw(){
        $raw = ''; 
 
     // (1) 请求行 
$raw .= $_SERVER['REQUEST_METHOD'].''.$_SERVER['REQUEST_URI'].''.$_SERVER['SERVER_PROTOCOL']."\r\n"; 
 
     // (2) 请求Headers 
        foreach($_SERVERas$key => $value){if(substr($key, 0, 5) === 'HTTP_'){$key = substr($key, 5); 
         $key = str_replace('_', '-', $key); 
 
         $raw .= $key.': '.$value."\r\n"; 
        }}// (3) 空行 $raw .= "\r\n"; 
 
     // (4) 请求Body $raw .= file_get_contents('php://input'); 
 
     return$raw; 
}

 

 

******************************************************************************

对应file_get_contents的json类文件:

 

<?php

 

 

class JSON

{

    var $at   = 0;

    var $ch   = '';

    var $text = '';

 

    function encode($arg, $force = true)

    {

        static $_force;

        if (is_null($_force))

        {

            $_force = $force;

        }

 

        if ($_force  && function_exists('json_encode'))

        {

            return json_encode($arg);

        }

 

        $returnValue = '';

        $c           = '';

        $i           = '';

        $l           = '';

        $s           = '';

        $v           = '';

        $numeric     = true;

 

        switch (gettype($arg))

        {

            case 'array':

                foreach ($arg AS $i => $v)

                {

                    if (!is_numeric($i))

                    {

                        $numeric = false;

                        break;

                    }

                }

 

                if ($numeric)

                {

                    foreach ($arg AS $i => $v)

                    {

                        if (strlen($s) > 0)

                        {

                            $s .= ',';

                        }

                        $s .= $this->encode($arg[$i]);

                    }

 

                    $returnValue = '[' . $s . ']';

                }

                else

                {

                    foreach ($arg AS $i => $v)

                    {

                        if (strlen($s) > 0)

                        {

                            $s .= ',';

                        }

                        $s .= $this->encode($i) . ':' . $this->encode($arg[$i]);

                    }

 

                    $returnValue = '{' . $s . '}';

                }

                break;

 

            case 'object':

                foreach (get_object_vars($arg) AS $i => $v)

                {

                    $v = $this->encode($v);

 

                    if (strlen($s) > 0)

                    {

                        $s .= ',';

                    }

                    $s .= $this->encode($i) . ':' . $v;

                }

 

                $returnValue = '{' . $s . '}';

                break;

 

            case 'integer':

            case 'double':

                $returnValue = is_numeric($arg) ? (string) $arg : 'null';

                break;

 

            case 'string':

                $returnValue = '"' . strtr($arg, array(

                    "\r"   => '\\r',    "\n"   => '\\n',    "\t"   => '\\t',     "\b"   => '\\b',

                    "\f"   => '\\f',    '\\'   => '\\\\',   '"'    => '\"',

                    "\x00" => '\u0000', "\x01" => '\u0001', "\x02" => '\u0002', "\x03" => '\u0003',

                    "\x04" => '\u0004', "\x05" => '\u0005', "\x06" => '\u0006', "\x07" => '\u0007',

                    "\x08" => '\b',     "\x0b" => '\u000b', "\x0c" => '\f',     "\x0e" => '\u000e',

                    "\x0f" => '\u000f', "\x10" => '\u0010', "\x11" => '\u0011', "\x12" => '\u0012',

                    "\x13" => '\u0013', "\x14" => '\u0014', "\x15" => '\u0015', "\x16" => '\u0016',

                    "\x17" => '\u0017', "\x18" => '\u0018', "\x19" => '\u0019', "\x1a" => '\u001a',

                    "\x1b" => '\u001b', "\x1c" => '\u001c', "\x1d" => '\u001d', "\x1e" => '\u001e',

                    "\x1f" => '\u001f'

                )) . '"';

                break;

 

            case 'boolean':

                $returnValue = $arg?'true':'false';

                break;

 

            default:

                $returnValue = 'null';

        }

 

        return $returnValue;

    }

 

    function decode($text,$type=0)

    {

        if (empty($text))

        {

            return '';

        }

        elseif (!is_string($text))

        {

            return false;

        }

 

        if ( function_exists('json_decode'))

        {

            return $this->addslashes_deep_obj(json_decode(stripslashes($text),$type));

        }

 

        $this->at   = 0;

        $this->ch   = '';

        $this->text = strtr(stripslashes($text), array(

                "\r"   => '', "\n"   => '', "\t"   => '', "\b"   => '',

                "\x00" => '', "\x01" => '', "\x02" => '', "\x03" => '',

                "\x04" => '', "\x05" => '', "\x06" => '', "\x07" => '',

                "\x08" => '', "\x0b" => '', "\x0c" => '', "\x0e" => '',

                "\x0f" => '', "\x10" => '', "\x11" => '', "\x12" => '',

                "\x13" => '', "\x14" => '', "\x15" => '', "\x16" => '',

                "\x17" => '', "\x18" => '', "\x19" => '', "\x1a" => '',

                "\x1b" => '', "\x1c" => '', "\x1d" => '', "\x1e" => '',

                "\x1f" => ''

        ));

 

        $this->next();

        $return = $this->val();

 

        $result = empty($type) ? $return : $this->object_to_array($return);

 

        return $this->addslashes_deep_obj($result);

    }

 

    /**

     * triggers a PHP_ERROR

     *

     * @access   private

     * @param    string    $m    error message

     *

     * @return   void

     */

    function error($m)

    {

        echo($m . ' at offset ' . $this->at . ': ' . $this->text);

    }

 

    /**

     * returns the next character of a JSON string

     *

     * @access  private

     *

     * @return  string

     */

    function next()

    {

        $this->ch = !isset($this->text{$this->at}) ? '' : $this->text{$this->at};

        $this->at++;

 

        return $this->ch;

    }

 

    /**

     * handles strings

     *

     * @access  private

     *

     * @return  void

     */

    function str()

    {

        $i = '';

        $s = '';

        $t = '';

        $u = '';

 

        if ($this->ch == '"')

        {

            while ($this->next() !== null)

            {

                if ($this->ch == '"')

                {

                    $this->next();

 

                    return $s;

                }

                elseif ($this->ch == '\\')

                {

                    switch ($this->next())

                    {

                        case 'b':

                            $s .= '\b';

                            break;

 

                        case 'f':

                            $s .= '\f';

                            break;

 

                        case 'n':

                            $s .= '\n';

                            break;

 

                        case 'r':

                            $s .= '\r';

                            break;

 

                        case 't':

                            $s .= '\t';

                            break;

 

                        case 'u':

                            $u = 0;

 

                            for ($i = 0; $i < 4; $i++)

                            {

                                $t = (integer) sprintf('%01c', hexdec($this->next()));

 

                                if (!is_numeric($t))

                                {

                                    break 2;

                                }

                                $u = $u * 16 + $t;

                            }

 

                            $s .= chr($u);

                            break;

                        case '\'':

                            $s .= '\'';

                            break;

                        default:

                            $s .= $this->ch;

                    }

                }

                else

                {

                    $s .= $this->ch;

                }

            }

        }

 

        $this->error('Bad string');

    }

 

    /**

     * handless arrays

     *

     * @access  private

     *

     * @return  void

     */

    function arr()

    {

        $a = array();

 

        if ($this->ch == '[')

        {

            $this->next();

 

            if ($this->ch == ']')

            {

                $this->next();

 

                return $a;

            }

 

            while (isset($this->ch))

            {

                array_push($a, $this->val());

 

                if ($this->ch == ']')

                {

                    $this->next();

 

                    return $a;

 

                }

                elseif ($this->ch != ',')

                {

                    break;

                }

 

                $this->next();

 

            }

 

            $this->error('Bad array');

        }

    }

 

    /**

     * handles objects

     *

     * @access  public

     *

     * @return  void

     */

    function obj()

    {

        $k = '';

        $o = new StdClass();

 

        if ($this->ch == '{')

        {

            $this->next();

 

            if ($this->ch == '}')

            {

                $this->next();

 

                return $o;

            }

 

            while ($this->ch)

            {

                $k = $this->str();

 

                if ($this->ch != ':')

                {

                    break;

                }

 

                $this->next();

                $o->$k = $this->val();

 

                if ($this->ch == '}')

                {

                    $this->next();

 

                    return $o;

                }

                elseif ($this->ch != ',')

                {

                    break;

                }

 

                $this->next();

            }

        }

 

        $this->error('Bad object');

    }

 

    /**

     * handles objects

     *

     * @access  public

     *

     * @return  void

     */

    function assoc()

    {

        $k = '';

        $a = array();

 

        if ($this->ch == '<')

        {

            $this->next();

 

            if ($this->ch == '>')

            {

                $this->next();

 

                return $a;

            }

 

            while ($this->ch)

            {

                $k = $this->str();

 

                if ($this->ch != ':')

                {

                    break;

                }

 

                $this->next();

                $a[$k] = $this->val();

 

                if ($this->ch == '>')

                {

                    $this->next();

 

                    return $a;

                }

                elseif ($this->ch != ',')

                {

                    break;

                }

 

                $this->next();

            }

        }

 

        $this->error('Bad associative array');

    }

 

    /**

     * handles numbers

     *

     * @access  private

     *

     * @return  void

     */

    function num()

    {

        $n = '';

        $v = '';

 

        if ($this->ch == '-')

        {

            $n = '-';

            $this->next();

        }

 

        while ($this->ch >= '0' && $this->ch <= '9')

        {

            $n .= $this->ch;

            $this->next();

        }

 

        if ($this->ch == '.')

        {

            $n .= '.';

 

            while ($this->next() && $this->ch >= '0' && $this->ch <= '9')

            {

                $n .= $this->ch;

            }

        }

 

        if ($this->ch == 'e' || $this->ch == 'E')

        {

            $n .= 'e';

            $this->next();

 

            if ($this->ch == '-' || $this->ch == '+')

            {

                $n .= $this->ch;

                $this->next();

            }

 

            while ($this->ch >= '0' && $this->ch <= '9')

            {

                $n .= $this->ch;

                $this->next();

            }

        }

 

        $v += $n;

 

        if (!is_numeric($v))

        {

            $this->error('Bad number');

        }

        else

        {

            return $v;

        }

    }

 

    /**

     * handles words

     *

     * @access  private

     *

     * @return  mixed

     */

    function word()

    {

        switch ($this->ch)

        {

            case 't':

 

                if ($this->next() == 'r' && $this->next() == 'u' && $this->next() == 'e')

                {

                    $this->next();

 

                    return true;

                }

                break;

 

            case 'f':

                if ($this->next() == 'a' && $this->next() == 'l' && $this->next() == 's' && $this->next() == 'e')

                {

                    $this->next();

 

                    return false;

                }

                break;

 

            case 'n':

                if ($this->next() == 'u' && $this->next() == 'l' && $this->next() == 'l')

                {

                    $this->next();

 

                    return null;

                }

                break;

        }

 

        $this->error('Syntax error');

    }

 

    /**

     * generic value handler

     *

     * @access  private

     *

     * @return  mixed

     */

    function val()

    {

        switch ($this->ch)

        {

            case '{':

                return $this->obj();

 

            case '[':

                return $this->arr();

 

            case '<':

                return $this->assoc();

 

            case '"':

                return $this->str();

 

            case '-':

                return $this->num();

 

            default:

                return ($this->ch >= '0' && $this->ch <= '9') ? $this->num() : $this->word();

        }

    }

 

    /**

     * Gets the properties of the given object recursion

     *

     * @access private

     *

     * @return array

     */

    function object_to_array($obj)

    {

        $_arr = is_object($obj) ? get_object_vars($obj) : $obj;

        foreach ($_arr as $key => $val)

        {

            $val = (is_array($val) || is_object($val)) ? $this->object_to_array($val) : $val;

            $arr[$key] = $val;

        }

        return $arr;

    }

 

    function addslashes_deep_obj($obj){

        if (is_object($obj) == true)

        {

            foreach ($obj AS $key => $val)

            {

                $obj->$key = $this->addslashes_deep($val);

            }

        }

        else

        {

            $obj = $this->addslashes_deep($obj);

        }

 

        return $obj;

    }

/**

 * 递归方式的对变量中的特殊字符进行转义

 *

 * @access  public

 * @param   mix     $value

 *

 * @return  mix

 */

function addslashes_deep($value)

{

    if (empty($value))

    {

        return $value;

    }

    else

    {

        return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);

    }

}

 

 

}

 

?>

 

使用方法:

include_once ('lib/llpay_cls_json.php');

$json = new JSON;

$str = file_get_contents("php://input");

$val = $json->decode($str);

file_put_contents("./logs/notify_log_".date("Y-m-d").".txt", "\r\n ".date("Y-m-d H:i:s")." notify_result=".json_encode($str), FILE_APPEND);

 

$oid_partner = trim($val-> {'oid_partner'});

$dt_order = trim($val-> {'dt_order'});

$no_order = trim($val-> {'no_order'});

$oid_paybill = trim($val->{'oid_paybill'});

$money_order = trim($val->{'money_order'});

$result_pay = trim($val->{'result_pay'});

$settle_date = trim($val->{'settle_date'});

$info_order = trim($val->{'info_order'});

$pay_type = trim($val->{'pay_type'});

$bank_code = trim($val->{'bank_code'});

$sign_type = trim($val->{'sign_type'});

$sign = trim($val->{'sign'});

© 著作权归作者所有

史帝文
粉丝 6
博文 68
码字总数 27347
作品 0
武汉
后端工程师
私信 提问
php中curl、fsockopen的应用

最近要用到通过post上传文件,网上盛传的有curl的post提交和fsockopen,其中curl最简单,于是从最简单的说起。 这是简单的将一个变量post到另外一个页面 $url = ''; $data = array('a'=> 'b'......

zyt_1978
2016/03/16
11
0
PHP 如何发起异步请求

有人说,限制激发创造力。如果真这样,PHP就是成熟的创造性解决方案。我刚上周构建了调用Segment.io的API的PHP库,发现了各种不同的方法可以提高服务端请求性能。 设计客户端类向API发送数据...

oschina
2013/02/06
15.2K
21
PHP函数:fsockopen

fsockopen:打开网络的 Socket 链接    语法: resuce fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]); 返回值: 资源; 函数种类: 网络系统; 内容说...

Junn
2012/10/16
623
1
关于集成支付宝在线支付返回信息验证不通过的问题

关于集成支付宝在线支付返回信息验证不通过的问题,其实所有的流程都是正确的,没有什么问题,也没有什么安全隐患,那问题的原因在哪里呢?在支付宝的文档没有说明是什么原因就给出error(简要...

wape-yang
2013/03/25
231
1
提交数据的各种方式form,curl ,sockt,file_get_contents

1、手动构造http数据包实现http数据提交 这种方式一般不建议使用,除非是特别要求或必须应用时再使用,手动构造的http头数据的方式比较麻烦,而且实现起来代码也比较多.我只有在利用其他方式 实...

morebetter1
2015/08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
7分钟前
1
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
8分钟前
1
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
10分钟前
1
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
14分钟前
1
0
使用nodeJS实现前端项目自动化之项目构建和文件合并

本文转载于:专业的前端网站➜使用nodeJS实现前端项目自动化之项目构建和文件合并 前面的话   一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项...

前端老手
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部