步骤:

1,匹配URL中的主机名和文件部分

2,创建socket并连接到目标服务器

3,构造HTTP请求并发送

4,读取HTTP响应并解析

5,保存内容到文件并关闭socket连接

代码实现如下:

/*

* 使用socket获取远程资源(网页,图片等)

* url 资源URL

* savepath 资源的保存路径

* return true/false

*/

function get_remote_picture($url,$savepath="./"){

set_time_limit(0);

$pattern = '/(http:\/\/)?([^\/]+)(.+)/';

$res = preg_match($pattern, $url, $matches);

if($res == 0){

return false;

}

$host = "";//主机名

$file = "";//请求的文件

if(count($matches) == 3){

$host = $matches[1];

$file = $matches[2];

}else if(count($matches) == 4){

$host = $matches[2];

$file = $matches[3];

}else{

return false;

}

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);

$res = socket_connect($socket,gethostbyname($host),80);

if(!$res){

//echo socket_strerror(socket_last_error($socket));

socket_close($socket);

return false;

}

$request = "";

$request .= "GET $file HTTP/1.1\r\n";

$request .= "Host: $host\r\n";

$request .= "Connection: close\r\n\r\n";

$len = socket_write($socket,$request);

$response = "";

while($buf=socket_read($socket,512)){

if(strlen($buf) == 0){

break;

}

$response .= $buf;

}

if(strpos($response,"\r\n\r\n")){

$arr = explode("\r\n\r\n",$response);

if(!file_exists($savepath)){

@mkdir($savepath);

}

$savepath = rtrim($savepath,'/').'/';

file_put_contents($savepath.basename($file),$arr[1]);

}else{

socket_close($socket);

return false;

}

socket_close($socket);

return true;

}

/* 获取百度logo */

$url = "http://su.bdimg.com/static/superplus/img/logo_white.png";

$result = get_remote_picture($url);

if($result){

echo 'get remote picture success';

}else{

echo 'get remote picture failed';

}

php链接远程socket,php使用socket获取远程图片相关推荐

  1. java 读取 远程文件_利用JAVA获取远程文件及使用断点续传 供学习者使用

    闲来没事,就做做,程序还是要多写才好@ 原理不说,文件方面及I/O方面,去BAIDU一下就知道,断点续传的原理也很简单,就是在原来已经下载的基础之上继续下载就可以了,用到了这么关键的一句:urlc.s ...

  2. scp命令获取远程文件

    一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的,可能会稍微影响 ...

  3. 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )

    文章目录 前言 一.SOCKET 网络套接字初始化 二.SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息 三.SOCKET 网络套接 向远程端 ( Android 模拟器 ) ...

  4. java socket 远程调用_使用Socket反射Java流操作进行方法的远程调用(模拟RPC远程调用)...

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  5. java实现socket连接,向指定主机指定端口发送socket数据,并获取响应数据

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现socket连接,向指定主机指定端口发送socket数据,并获取响应数据 测试代码 public static void main(S ...

  6. 基于java+Socket+sqlserver的油液远程监控系统软件设计

    基于java+Socket+sqlserver的油液远程监控系统软件设计 1.启动被监控端,打开指定的UDP端口号.用于读取命令. 2.被监控端读取命令(命令格式为ordername:port)ord ...

  7. PHP高效获取远程图片尺寸和大小(转)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  8. php 获取远程图片尺寸,PHP高效获取远程图片尺寸和大小的实现方法

    原标题:PHP高效获取远程图片尺寸和大小的实现方法 PHP高效获取远程图片尺寸和大小的实现方法 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大 ...

  9. PHP高效获取远程图片尺寸和大小

    /*** 获取远程图片的宽高和体积大小** @param string $url 远程图片的链接* @param string $type 获取远程图片资源的方式, 默认为 curl 可选 fread ...

最新文章

  1. Android API 中文 (51) —— ZoomButtonsController
  2. 口语学习Day1:天气
  3. PHP学习记录之会话处理(二)
  4. 系统安全运维 Server 2008 R2 事件查看器实现日志分析
  5. 计算机网络与网页制作教程,计算机网络与网页制作:Dreamweaver CS5案例教程/高等学校通识教育系列教材简介,目录书摘...
  6. BZOJ 1411Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
  7. sqoop、datax几种导入导出
  8. Spring mvc @ RequestMapping
  9. leetcode 之Rotate List(18)
  10. 用友t+畅捷通使用方法_【财务人员必看干货】用友财务软件使用方法和快捷键大全!...
  11. php 时间转换时间戳_php时间戳与date格式转换
  12. IROS 2021最新开源!深度学习三维激光雷达动态物体分割
  13. 西门子840d高级编程手册_840D NC 高级编程简单介绍
  14. Python多继承及MRO顺序
  15. Automated SQL Injection Detection
  16. 规格模式 Specification Pattern
  17. web 开发最新技术
  18. 数字电路学习——三极管的使用
  19. 云端(Cloud)多租户网络技术
  20. 4.6 曲线拟合的最小二乘法

热门文章

  1. 使用JUnit 5进行更清洁的参数化测试
  2. guava 并发_Google Guava并发– ListenableFuture
  3. Intellij IDEA社区版中的SpringBoot入门
  4. eclipse juno_放弃Eclipse Juno
  5. jboss drools_JBoss Drools –入门
  6. Java注释教程– ULTIMATE指南(PDF下载)
  7. OptaPlanner –具有真实道路距离的车辆路线
  8. JAX-RS 2.0的新功能– @BeanParam批注
  9. 懒惰的JSF Primefaces数据表分页–第2部分
  10. JBoss AS 7.1.0.Final“ Thunder”发布-Java EE 6 Full Profile认证!