喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
     
标题: [原创] fsock发送表单类  
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4921
帖子 1684
金钱 4911 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
fsock发送表单类

支持Input、Textarea、Select、File、Radio、Checkbox、Select-multiple、File[],一般表单能发送了。
当元素值为文件路径的时候,视为文件上传,如路径错误则普通方式发送,文件要php可读到的文件,不支持远程文件,需要的可以自己写下远程读取文件。

<?php
/***************************************************************************
*                        FSock_Class.php
*                ------------------------------
*        Date                : Jun 21, 2007
*        Copyright        : (C) 2007 - DreamSoft Co.,Ltd.
*        Mail                : Dream@Dreamsoft.Ca
*        Desc.                : Socktes
*        History                :
*                Date    :
*                Author  :
*                Modif.  :
***************************************************************************/

Class Fsock
{
        var $_Vars=array();
        var $_Boundary;

        function __construct()
        {
                defined('DEBUG') or define('DEBUG', 'LOG');
                $this->_Error();
        }

        /***
        * 发送数据
        * @param  string  $_Url   网址,http://...../test.php?ac=a
        * @param  string  $_Ip    来源ip
        * @param  string  $_Ref   来源
        * @return string
        */
        function Send($_Url, $_Ip='127.0.0.1', $_Ref='localhost')
        {
                $_PUrl = parse_url($_Url);
                if(!is_array($_PUrl)) return 901;
                $_PUrl['port']  = $_PUrl['port']  ? $_PUrl['port']  : 80;
                $_PUrl['query'] = $_PUrl['query'] ? $_PUrl['query'] : '';

                $_Fp = @fsockopen($_PUrl['host'], $_PUrl['port'], $_ErrNo, $_ErrStr);
                if(!$_Fp) { $this->_Error[902] .= "{$_ErrNo} {$_ErrStr}"; return 902; }

                srand((double)microtime()*1000000);
                $this->_Boundary = '---------------------------'.substr(md5(rand(0,32000)),0,10);

                $_Data = $this->_Post();

                fputs($_Fp, sprintf("POST %s%s%s HTTP/1.0\n", $_PUrl['path'], $_PUrl['query'] ? "?" : "", $_PUrl['query']));
                fputs($_Fp, "Host: {$_PUrl[host]}\n");
                fputs($_Fp, "X-Forwarded-For: $_Ip\r\n");
                fputs($_Fp, "Referer: $_Ref\n");
                fputs($_Fp, "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\n");
                fputs($_Fp, "Content-type: multipart/form-data; boundary={$this->_Boundary}\n");
                fputs($_Fp, "Content-length: ".strlen($_Data)."\n");
                fputs($_Fp, "Connection: close\n\n");
                fputs($_Fp, "$_Data\n");

                $_Status = fgets($_Fp, 100);
                if(!eregi("^HTTP/1\.. 200", $_Status)) return 903;

                $_Res = "";
                $_Header = 1;

                while(!feof($_Fp))
                {
                        $_Line = fgets($_Fp, 1024);
                        if($_Header && ($_Line == "\n" || $_Line == "\r\n")) { $_Header = 0; }
                        elseif(!$_Header) { $_Res .= $_Line; }
                }
                fclose($_Fp);
                return $_Res;
        }

        /***
        * 添加元素
        * @param  string  $_Name   元素名
        * @param  string  $_Value  值
        */
        function Add($_Name, $_Value)
        {
                if(is_array($_Name))
                {
                        $_Args = func_get_args();
                        foreach($_Args as $_Arr){ $this->_Vars = array_merge($_Arr, $this->_Vars); }
                } else { $this->_Vars[$_Name] = $_Value; }
        }

        function _Post()
        {
                $_Res = "";
                foreach($this->_Vars as $_k=>$_v)
                {
                        if(is_array($_v)) { for($i=0;$i<count($_v);$i++) $_Res .= $this->_Get($_k.'[]',$_v[$i]); }
                        else $_Res .= $this->_Get($_k,$_v);
                }
                return $_Res;
        }

        function _Get($_Name, $_Value)
        {
                $_Res = "--{$this->_Boundary}";
                $_Res.="\nContent-Disposition: form-data; name=\"{$_Name}\"";
                if(@is_file($_Value) and @is_readable($_Value))
                {
                        $_Data = join('', file($_Value));
                        $_Res .= "; filename=\"{$_Value}\"\nContent-Type: ".$this->_Mime($_Value);
                        $_Value= $_Data;
                }
                $_Res.= "\n\n{$_Value}\n";
                $_Res.= "--{$this->_Boundary}\n";
                return $_Res;
        }

        function _Mime($_File)
        {
                $_T = pathinfo($_File);
                $_E = $_T[extension];
                return empty($this->_Mime[$_E]) ? 'text/plain' : $this->_Mime[$_E];
        }

        function Error($_Error_Code)
        {
                if    (DEBUG == 'RETURN') { return $_Error_Code; }
                elseif(DEBUG == 'DIE')    { die($this->_Error[$_Error_Code]); }
                else {
                        global $__ERROR;
                        $__ERROR .= date('[m-d-Y  H:i:s]')." [{$_Error_Code}] {$this->_Error[$_Error_Code]} IN {$_SERVER['PHP_SELF']} - Class(Fsock)\r\n";
                        return false;
                }
        }

        function _Error()
        {
                $this->_Error[901] = 'Dream 901 - URL地址错误';
                $this->_Error[902] = 'Dream 902 - 无法打开URL,错误信息:';
                $this->_Error[903] = 'Dream 903 - 发送失败';
                $this->_Mime  = array(
                        'swf' => 'application/x-shockwave-flash',
                        'tar' => 'application/x-tar',
                        'zip' => 'application/zip',
                        'mid' => 'audio/midi',
                        'mp3' => 'audio/mpeg',
                        'ram' => 'audio/x-pn-realaudio',
                        'ra'  => 'audio/x-realaudio',
                        'wav' => 'audio/x-wav',
                        'bmp' => 'image/bmp',
                        'gif' => 'image/gif',
                        'jpg' => 'image/jpeg',
                        'png' => 'image/png',
                        'tif' => 'image/tiff',
                        'css' => 'text/css',
                        'txt' => 'text/plain',
                        'rtx' => 'text/richtext',
                        'rtf' => 'text/rtf',
                        'xml' => 'text/xml',
                        'mpeg'=> 'video/mpeg',
                        'mov' => 'video/quicktime',
                        'avi' => 'video/x-msvideo',
                        'movie'=> 'video/x-sgi-movie',
                        'wml' => 'text/vnd.wap.wml');
        }

        function __destruct()
        {
                $this->_Error = NULL;
                $this->_Vars  = NULL;
                $this->_Mime  = NULL;
                $this->_Boundary = NULL;
        }
}


 附件: 您所在的用户组无法下载或查看附件



在场外支持奥运.....
2007-11-9 11:30 PM#1
查看资料  访问主页  发短消息  QQ  顶部
 
psdshow
金牌会员
Rank: 6Rank: 6
论坛元老



UID 30908
精华 0
积分 1758
帖子 1363
金钱 1758 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2004-9-6
来自 永州-廣州
状态 离线
[推荐阅读] 求职PHP开发工程师--北京
收下了
什么情况下用




以下AD由PHPX赞助:
广州梦莎五金饰品厂 东莞恒隆五金饰品厂 承接php私活
2007-11-12 08:33 AM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
scf2
注册会员
Rank: 2
中级会员



UID 19294
精华 0
积分 195
帖子 210
金钱 195 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-4-1
来自 重庆人在深圳
状态 离线
[推荐阅读] 天龙八部中的扫地僧是谁?
挺不错的这个东东



傲客网,找你想要的......
http://oklrc.com
2007-11-13 02:44 PM#3
查看资料  访问主页  发短消息  QQ  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4921
帖子 1684
金钱 4911 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 怎样通过cookie里的windowname判断一个窗口是否已经关闭?


QUOTE:
原帖由 psdshow 于 2007-11-12 08:33 AM 发表
收下了
什么情况下用
远程提交表单




在场外支持奥运.....
2007-11-13 09:58 PM#4
查看资料  访问主页  发短消息  QQ  顶部
 
ccxxcc
金牌会员
Rank: 6Rank: 6
有钱啦 有钱啦



UID 63944
精华 0
积分 2247
帖子 334
金钱 2247 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-4-2
状态 离线
[推荐阅读] 从中国赢网主机上抠下来的webftp
_Get方法是在拼接POST方法提交的参数吧?
感觉容易引起误解
叫_getData吧




在线查词http://www.iciba.com/
web编程站http://www.eb163.com
2007-12-6 02:31 PM#5
查看资料  访问主页  发短消息  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4921
帖子 1684
金钱 4911 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 怎么样培养自己独立开发程序模块和设计数据库的能力?


QUOTE:
原帖由 ccxxcc 于 2007-12-6 02:31 PM 发表
_Get方法是在拼接POST方法提交的参数吧?
感觉容易引起误解
叫_getData吧
确实, 误解以为是get方式.

木法编辑了,大家自己改下吧




在场外支持奥运.....
2007-12-6 05:05 PM#6
查看资料  访问主页  发短消息  QQ  顶部
 
zw870307
中级会员
Rank: 3Rank: 3


UID 92902
精华 0
积分 348
帖子 338
金钱 348 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2007-5-12
状态 离线
[推荐阅读] apache RewriteRule 怎么写 防止下载.swf文件?
做坏事的?
2008-3-19 10:08 PM#7
查看资料  Blog  发短消息  顶部
 
uuq
高级会员
Rank: 4
中级会员


UID 28149
精华 1
积分 821
帖子 859
金钱 811 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2004-4-27
来自 广州
状态 离线
[推荐阅读] 规模大一点的网站,用户登陆后记录的信息,都是记录在哪里了?
应该有点用吧
2008-3-20 09:18 PM#8
查看资料  发短消息  顶部
 
mdy_jun
注册会员
Rank: 2



UID 72596
精华 0
积分 178
帖子 159
金钱 178 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-30
状态 离线
[推荐阅读] 聘请网站通行证整合问题(ECSHOP,论坛,交友,书吧)
没用过,先看看再说。估计是好东西



http://movie.mamabian.com
免费看最新最全的电影
2008-4-3 08:45 AM#9
查看资料  访问主页  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.027254 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP