• fsockopen以Socket方式模拟HTTP下载文件

    fsockopen下载东西
    服务器君一共花费 7.630 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的
    1. Chapter:

    fsockopen 的功能很强大,比如前面模拟 HTTP 访问,模拟 POST/GET 请求,什么的,这里再举一个例子,那就是下载东西。比如下载 http://www.nowamagic.net//librarys/webapp/Snow.zip 这个文件,用下面的程序就能实现:

    # Socket 模拟HTTP协议传输文件
    # Http是应用层协议使用端口80
    #
    $hostname = 'www.nowamagic.net';
    $port = '80';
    # 建立连接
    $fp = fsockopen($hostname,$port,$errno,$errstr);
    //set_socket_blocking($fp,false);
    //stream_set_blocking($fp,0);
    stream_set_blocking($fp, true); 
    if(!$fp)
    {
        echo "$errno : $errstr<br/>";
    }
    else
    {
    	# 发送一个HTTP请求信息头
        $request_header="GET /librarys/webapp/Snow.zip HTTP/1.1\n";
    	# 起始行
    	# 头域
        $request_header.="Host: $hostname\n";
    	# 再一个回车换行表示头信息结束
        $request_header.="\n";
    
    	# 发送请求到服务器
        fputs($fp,$request_header);
    	# 接受响应
        $fp2=fopen('Snow.zip','w');
        while (!feof($fp))
        {
            $line = fputs($fp2,fgets($fp,128));
    		//echo $line;
        }
    	# 关闭
        fclose($fp2);
        fclose($fp);
    }
    

    执行程序,你会发现在这个程序文件的同级目录就会出现那个你需要下载的文件了。

    这实质上是 Socket 模拟 HTTP 协议传输文件。同时还要注意一下 PHP 的超时限制,这里设置我 PHP 服务器超时为无限才能正确下载,否则可能下载不全 PHP 程序就停止了。

    同时,set_socket_blocking 和 stream_set_blocking 的用法也要稍微注意下,Google一下就能了解,这里不再赘述。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [PHP程序设计] PHP数组的遍历 7 个条目
  2. [Python程序设计] Python Web部署的背景知识 9 个条目
  3. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  4. [Python程序设计] Tornado源码解析 23 个条目
  5. [移动开发] 从代码角度去认识 Handler 4 个条目
  6. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  7. [移动开发] Android Studio的使用技巧 4 个条目
  8. [软件工程与项目管理] 开始了解Git 5 个条目
  9. [Python程序设计] Django架构流程分析 7 个条目
  10. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  11. [软件工程与项目管理] 浏览器初步介绍 8 个条目
  12. [智力开发与知识管理] 学习编程为什么没会这么难? 7 个条目
窗口