首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
100
篇与
的结果
2023-08-07
PHP学习大纲
PHP学习大纲知识面最广,讲解最深的经典PHP教程,韩顺平等多位名师联合创作!!!视频下载地址: http://php.itcast.cn第一阶段: PHP前端网页开发基础(1)HTML基础与加强HTML语言,HTML语言背景知识,HTML全局标签,HTML格式标签,HTML文件标签,HTML超链接标签,HTML图像标签,HTML框架标签,HTML客户端图像地图,HTML表格标签,HTML帧标签,HTML表单标签,HTML头元素,HTML分区标签(2)XHTML基础与加强XHTML与 HTML的差异,XHTML语法,XHTML DTD,XHTML验证,XHTML模块,XHTML属性,XHTML事件,XTHML结构化(3)HTML5设计与应用HTML5介绍,HTML5多媒体处理,HTML5画布,HTML5 Web存储技术,HTML5表单,HTML5 属性和事件HTML5的常用标签(比如:applet标签、article标签、aside标签、audio标签、canvas标签、datalist标签、details标签等)(4)CSS基础与加强CSS 简介,CSS基础语法,CSS 派生选择器,id 选择器,CSS类选择器,CSS盒子模型CSS背景 、文本 、字体 、边框 、外边距 、内边距 、列表 、表格CSS 高级: CSS 尺寸、分类 、定位 、伪类 、伪元素 、媒介类型(5)DIV+CSS设计与应用使用知名网站的首页深入剖析DIV+CSS的WEB标准:盒子模型经典案例-优酷首页面、仿sohu首页面布局、可爱屋网站首页面。涉及知识点包括: (CSS定位的四种方式、左浮动、右浮动、清除浮动、标准流和非标准流、设置对象的层叠顺序、块元素和行元素的转换等)(6)Javascript基础语法:Javascript基本介绍、Javascript的发展史、Javascript运行原理剖析、Javascript特点、Javascript的标识符、Javascript基本数据类型(数值类型、布尔类型、字符串类型)、Javascript复合数据类型简介(数组、对象)、Javascript特殊数据类型(NULL、undefine)、定义变量、初始化、赋值、数据类型转换的两种方式(自动转换、强制转换)、Javascript的运算符(算术运算符、关系运算符、逻辑运算符)、Javascript的位运算和移位运算(7)Javascript三大流程控制顺序控制、分支控制(单分支: if语句、双分支: if-else语句、多分支 if-else if-else 语句, switch-case-default语句)、循环控制(for语句、while语句、do-while语句)、在ie和firefox如何调式Javascript(8)Javascript函数函数基本概念、函数的定义、函数的调用方式及调用过程深度剖析、函数使用细节讨论、使用Function类创建函数、函数实际运用(打印金字塔、九九乘法表)、函数的递归调用、Javascript常用系统函数使用(encodeURI、decodeURI、eval、parseInt、parseFloat、isNaN等)(9)Javascript数组数组的基本使用、使用for/while遍历数组、数组实际运用(计算班级平均分)、二维数组的基本使用、使用for遍历二维数组、对二维数组转置处理、数组排序介绍、冒泡排序、顺序查找和二分查询法(10)事件驱动Javascript的Event-Driven机制、事件源、事件处理程序、事件名称、事件对象是什么、事件类型(鼠标事件、键盘事件、HTML事件、其它事件)、Javascript访问CSS技术、事件驱动的浏览器兼容性处理、常用的18个事件(onblur、onchange、onfocus、onkeydown、onmousedown等)综合案例(Javascript版计算器)(11)DOM编程DOM编程介绍(HTML DOM与XML DOM)、DOM编程实例入门、BOM介绍、DOM对象介绍、window对象详解、history对象详解、location对象详解、navigator对象详解、screen对象详解、event对象详解、document对象详解、body对象详解、style对象详解、WEB版坦克大战游戏、forms对象(集合)、from对象、images对象(集合) 、img对象、links对象(集合)、link对象、all对象(集合)、table对象详解、tableRow对象和tableCell对象、基于table对象的用户管理系统(12)WEB网站设计与应用商业级网页制作(企业邮箱网页、旅游网网页或呱呱网网页)这个阶段的视频教程: 参考 传智播客 轻松搞定网页设计(html+css+javascript) ,下载php.itcast.cn第二阶段 PHP核心编程(1)PHP基本语法加强Apache--directory配置段、一个IP和多个域名绑定的两种方式、HTTP协议入门介绍、Apache逻辑组件介绍、Apache生命周期、PHP运行之时序图、PHP数据类型加强、PHP各种运算符加强、PHP三大流程控制加强位运算(按位与、按位或、按位异或、按位非、位左移、位右移)、二进制(原码、反码、补码)、PHP版本在线贷款计算器(2)PHP函数PHP函数的基本介绍、如何自定义函数、PHP页面调用函数、require()、require_once()、include()和include_once()的区别、从内存分析PHP函数调用过程、函数使用需要注意的细节、函数值传递和引用传递的区别(3)数组、排序和查找数组的基本概念、数组的引用方式、数组引用陷阱、与PHP数组相关的函数(count、is_array、print_r、explode等)遍历数组的三种方式、删除数组元素和数组运算符、数组使用细节总结、内部排序法和外部排序法介绍、冒泡排序和快速排序、选择排序和插入排序、顺序查找和二分查找、二维数组介绍和使用(4)面向对象编程面向对象编程基本概念、类和对象的关系、如何定义类、成员属性(变量)、如何创建对象实例及如何访问对象属性对象在内存中存在的形式、栈、堆、全局区、常量区和代码区的关系、成员方法(函数)及使用细节构造方法(函数)、默认构造方法(函数)、this的基本概念和使用、析构方法(函数)、PHP的对象垃圾回收器、静态变量(类变量)的概念和使用、静态方法(类方法)的概念和使用、面向对象编程的三大特征介绍、面向对象编程-封装、面向对象编程-继承、面向对象编程-多态访问控制修饰符(public、protected、private)、方法重载(overload)、方法重写(override)方法重载(overload)和方法重写(override)的比较、PHP魔术函数(__set get __construct __destruct __call等 )和魔术常量(__LINE , FILE ,__FUNCTION__等 )、抽象类(abstract class)的概念和使用接口(interface)的概念和使用、接口编程和继承的区别、关键字final的使用、常量关键字const 的作用和使用注意事项、面向对象编程之强大的反射机制、面向对象编程之动态代理(5)错误处理和异常处理错误处理的基本概念、PHP处理错误的三种方式介绍、使用die()进程错误处理、自定义错误和错误触发器、错误日志、错误级别介绍、PHP异常处理的基本介绍、PHP异常处理(try throw catch)、自定义异常、如何设置顶级异常处理器、异常使用的规则(6)预定义超全局数组预定义超全局数组-基本概念、$_GET、$_POST、$_REQUEST、$_SERVER、$_ENV、$_FILES 、$_COOKIE、$_SESSION、$GLOBALS、$_GET 使用陷阱(sql注入和中文乱码问题)(7)cookie和session什么是会话、cookie的基本概念、cookie的curd操作、cookie重要的api介绍、cookie运行原理图解、cookie的实际运用(显示用户上次访问时间、显示用户上次浏览过的商品、)、cookie使用的注意事项、session数据存放的位置和形式、session的curd操作、session运行原理图解、session实际案例-在线购物车、IE禁用Cookie后的session处理方案、session防止用户非法入侵、session配合验证码使用、php.ini 中关于cookie和session配置说明(重点,难点)、自定义会话处理器、Session和Cookie的区别(8)PHP文件编程文件及文件编程是什么、文件流的基本概念、文件的操作方式、PHP文件编程函数汇总介绍、最常用的13个文件函数、使用文件完成网站计数器、文件上传下载操作-mini版音乐共享网、无限级文件扫描器(9)PHP绘图技术php绘图坐标系、绘图步骤说明、绘图快速入门、绘图最常用的函数、绘图技术的实际运用—人口分布饼状统计图、专业的报表开发--JpGraph、JpGraph的安装和配置、JpGraph实际应用-网民支持情况统计图、JpGraph中文乱码处理这个阶段的视频教程: 参考 传智播客 PHP从入门到精通1-149集 ,下载php.itcast.cn第三阶段:Mysql数据库编程&中级项目阶段(1)MySQL数据库什么是数据库、MySQL数据库的三层结构、MySQL数据库的安装和配置、数据库命令行的常见操作(启动、连接、操作、关闭等)、SQL语句分类(ddl/dml/dcl/dql/dtl)、创建、查看、删除、修改、备份和恢复数据库、如何创建表及MySQL数据类型详解、修改、删除表操作、如何对数据表进行CRUD操作、select语句中使用orderby、合计函数(count/sum/avg/max/min)、select语句中使用group by 和having子句、时间日期常用的10个函数、字符串相关11个函数、数学函数10个、流程控制函数3个、其它函数4个、MySQL中文乱码处理、PHP操作数据库实例、MySQL表类型和存储引擎(BDB/HEAP/ISAM/MERGE/MYISAM/InnoBDB)、如何选择表的存储引擎、事务的基本概念、事务和锁、事务提交和回滚操作、PHP程序中如何使用事务、事务隔离级别、表的主键和外键、多表联合查询和笛卡尔集、自连接、单行子查询和多行子查询、蠕虫复制创建海量表、合并查询(union , union all,intersect , minus)、表的内连接和外连接(左外连接、右外连接和完全外连接)、维护数据的完整性-约束(not null、unique, primary key,foreign key,和check )、商店售货系统表设计案例、索引(主键索引/唯一索引/全文索引/普通索引/复合索引)、索引优缺点分析、触发器和存储过程(2)数据库编程(mysql mysqli pdo)mysql扩展库简介、mysql扩展库操作mysql数据库程序、mysql_query()执行结果、释放资源和连接、对mysql数据库进行CRUD、mysqli扩展库简介、第一个mysqli扩展库程序、$mysqli->query()执行结果、mysqli对数据库进行CRUD操作、mysqli扩展库增强--批量执行sql语句、mysqli扩展库增强--事务控制、事务的acid、预处理 MySQLi_STMT、PDO的介绍和使用(3)中级项目在中级项目阶段,讲师将分组进行项目开发,讲师给出项目的需求和文档,各小组商量后选择,讲师会全程陪同,细致耐心的辅导同学们顺利完成项目.同时,传智播客也会适时的到 其它公司接项目,分组完成,并将学员的网站项目放到公网上展示,增强学员就业竞争力。 目前,可选的项目有: (我们还会根据市场需求增加新项目)BBS系统: 本系统为互联网用户提供互动和交流功能。网上在线支付: 本系统是为互联网客户提供在线支付功能,可立即应用于项目中及时雨供求信息共享网: 及时雨供求信息网主要用来为用户提供信息服务,对于生活和工作中的各类 信息都应尽可能地全部包括在内,例如,公寓、求职、招聘、培训、招商、房屋、车辆、出售、求购等信息。项目 发布后,要实现能够为用户生活、工作带来极大地方便并提高企业知名度、为企业产品宣传节约大量成本的目标。 及时雨供求信息网的主要目标是提供强大的搜索功能,准确的信息定位描红功能,付费信息的管理、免费信息的审 核和删除功能。oa无纸办公系统: oa无纸办公系统是针对中小型企业内部自动化办公管理的要求进行设计的,实现了 文件类信息的强大的管理能力;对员工基础信息(人事消息)的管理功能等;个人办公的信息自动化管理功能;发 布会议信息,并对会议信息进行管理;对系统用户进行管理;为了加强数据保密性,为每个用户组设置权限级别。大网电子商城: 本网站将电子商城给普通用户提供如下功能:购买商品、用户个人资料管理及订单查询 等功能。用户在未进行登录时,只可以查看商品的详细信息及公告信息,登录后可以执行购买商品操作、对商品进 行评论及管理个人资料。管理后台实现: 商品信息、商品类别信息、用户信息、订单信息、公告信息及评论信息进 行管理,用户可通过相应的功能按钮,进入相应的页面,对信息进行管理。这个阶段的视频教程: 参考 传智播客 PHP从入门到精通1-149集 ,下载php.itcast.cn第四阶段: PHP高级阶段(1)PHP的XML编程什么是XML及XML的常见应用、XML基础语法(文档声明、元素、属性、注释、CDATA区、特殊字符、处理指令(processing instruction))、XML约束概述、常用的约束技术(DTD和Schema)、DTD的快速入门、编程校验XML文档正确性、内部DTD和外部DTD介绍、DTD文档声明及引用、DTD各元素详解、DTD的修饰符说明、DTD属性详解、引用实体和参数实体、DTD综合案例(2)Smarty模板技术模板技术是什么和快速入门、模板引擎原理分析、php模板引擎smarty-基本配置、smarty-如何使用变量、smarty基本语法、变量操作符、组合修改器、smarty-数组操作、内建函数 、自定义函数、smarty-配置文件、smarty-常量使用、smarty-变量、smarty-方法、smarty高级特性-对象、smarty高级特性-过滤器(预过滤器 /后过滤器/输出滤镜)、smarty缓存的配置和使用(3)Javascript面向(基于)对象编程js面向对象特征介绍、类(原型对象)与对象、自定义类(原型对象)的五种方式(工厂方法、使用构造函数来定义类、使用prototype、构造函数及原 型混合方式、动态原型方式)、对象的属性、Javascript对象在内存中存在形式深度剖析、this关键字、成员函数、所有Javascript类的基类Object详解、闭包(closure)介绍、面向对象编程小游戏-超级马里奥(或是其它小游戏)、构造函数、遍历对象属性的方法(for..in)、删除对象属性(delete关键字)、js面向对象编程三大特征介绍、封装性介绍、Javascript面向对象访问权限(公开级别和私有级别)、使用原型法(关键字prototype)为所有对象添加公共方法、继承性介绍、Javascript继承实现方法(对象冒充和call及apply)、Javascript多重继承和基类Object、方法重载(overload)及覆盖(overrid)介绍、多态性介绍(4)正则表达式(RegExp)正则表达式(RegExp)是什么、什么是正则表达式对象(RegExp)及如何创建、RegExp对象的常用方法(exec和test)、string对象与正则表达式方法(match/replace/split/search)、RegExp对象的静态属性和实例属性、子表达式、捕获、反向引用详细说明、元字符详解、正则表达式应用案例(电子邮件、身份证、电话、城市、中英文个数、整数小数、url解析和结巴程序)(5)Ajax技术什么是Ajax、Ajax相关的七种技术(javascript、xml、css、xstl、dom 、xhtml和XMLHttpRequest)、Ajax基本原理和优势、Ajax典型的应用场景、Ajax经典案例1-无刷新验证用户名、不同的浏览器创建 XMLHttpRequest 对象的兼容性处理、Ajax模板代码(Get和Post)两种方式、Ajax处理服务器返回HTML格式的数据、Ajax处理服务器返回XML格式的数据、Ajax处理服务器返回Json格式的数据、html、xml和json 比较、Ajax经典案例2—省市联动、Ajax经典案例3—天气实时报告、Ajax经典案例4—多人无刷新聊天室(6)Jquery框架JQuery是什么、流行的JavaScript库、JQuery快速入门、什么是jQuery对象、Dom对象和JQuery对象的相互转换、JQuery选择器介绍、JQuery各种选择器详解、DOM 操作的分类(XML DOM/CSS DOM/HTML DOM)、查找节点、创建节点、内部插入节点、外部插入节点、删除节点、克隆节点、替换节点、对属性进行各种操作、对样式操作、设置和获取 HTML, 文本和值、常用的遍历节点方法、CSS-DOM操作、JQuery 加载并解析 XML、jQuery 中的事件 -- 加载 DOM、JQuery和Ajax整合(load、$.get()、$.post())(7)ThinkPHP框架什么是框架、框架的优缺点分析及为什么要选择框架、主流MVC框架介绍、ThinkPHP3.0特性介绍(单入口/CBD/AOP)、MVC模式、TP执行流程深入分析、URL调度模式、module功能及源码剖析、model详解、ORM与AR方式的区别、实例化模型的执行流程、连贯操作、自动验证及字段映射、模板标签及逻辑控制、模板中的循环结构、变量调节器、模板包含与布局、TP缓存应用、模板常量替换、扩展标签库、自定义标签库、TP应用ajax、多语言处理和面向切面简介、导入机制和配置文件加载流程介绍(8)Linux操作系统(LAMP环境搭建)Linux的初步介绍、安装虚拟机和Linux系统、初步使用Linux(登录/注销/关机/重启)、VI编辑器的使用、Linux目录结构介绍、Linux用户管理、Linux运行级别、Linux常用命令(init/pwd/cd/mkdir/rmdir/rm/man/touch/cp/mv/ln/more/less/grep/管道命令/find/重定向命令ls)、文件所有者、所在组和其它组管理、文件和目录的权限管理、SSH介绍和使用、分区的概念、Linux分区及挂载和卸载(mount/umount)、磁盘管理命令(df/fdisk)、Linux下Shell(chsh)、history命令妙用、tcp/ip基础及原理、Linux网络环境配置三种方法(setup/ifconfig/修改配置文件ifcfg-eth0)、RPM包管理(安装/删除/升级)、samba服务器、设置任务调度命令crontab、监控网络状态信息(netstat/ping/traceroute)、进程的概念和管理(ps/top/kill/killall)、Linux启动过程分析、压缩和解压(zip/unzip/gzip/gunzip)、Linux下搭建LAMP开发环境(9)svn版本控制svn是什么、svn的运行原理、svn软件的下载安装及配置、svn的基本使用、svn的单仓库和多仓库、svn客户端tortoisesvn的基本功能介绍、svn用户权限管理和配置、svn做成一个服务(service)、svn批处理文件、svn与apache的整合、svn与zend studio的整合本章节视频,请从 php.itcast.cn 网站去下载.第五阶段: 大型门户网站核心优化技术(1)页面静态化明确几个重要概念(静态网址/动态网址/伪静态网址)、页面静态化基本概念、benchmarking tool使用、页面静态化的好处(速度快/seo/防sql注入)、php缓存机制完成页面静态化、页面静态化-真静态、数据库和页面静态化(真静态)结合、页面静态化(真静态)的优点和缺点、伪静态的基本概念、PHP程序实现伪静态、rewrite规则介绍、使用.htaccess来控制网站目录访问权限、真静态 VS 伪静态及其如何选择(2)memcached缓存技术memcached基本概念、Memcached的作用、Memcached--运行原理图、Memcached-下载安装和基本操作、Telnet对Memcached进行CRUD操作、PHP程序对Memcached进行CRUD操作、Socket套接字对Memcached进行CRUD操作、Memcached机制深入了解、Memcached的生命周期、Memcached最佳实践、Session数据放入到Memcached、Memcached访问安全性讨论(Windows和 Linux)、什么样的数据适合放Memcached讨论、Memcached vs session的比较、Redis(Key/value型数据库)介绍、基于Memcached的在线词典(或其它小项目)(3)Mysql数据库优化数据库表设计的3NF、什么是反3NF、SQL语句优化的基本概念、show status命令了解各种SQL的执行频率、SQL语句优化-定位慢查询(slow-query-log)、SQL语句优化-explain分析问题、建立适当的索引、哪些列上适合添加索引和索引的优缺点分析、索引的类型介绍、索引使用陷阱、优化group by 语句、使用连接来替代子查询、选择合适的存储引擎(MyISAM和InnoDB)、选择合适的数据类型、对表进行水平划分、对表进行垂直划分、文件、图片等大文件用文件系统存储、数据库参数优化配置、合理的硬件资源和操作系统、MySQL数据库读写分离(4)Mongodb数据库NoSQL是Not Only SQL的缩写,它指的是非关系型的数据库,是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循SQL标准、ACID属性、表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的NoSQL的主要产品是MongoDB(文档型存储) MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似Javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。(5)sphinxSphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL,XML等 做全文搜索。全文检索是大型Web必须提供的功能,但如果数据量非常大,传统的索引方式效率极低,所以需要建立全文索引服务器,并通过Sphinx行高速索引、 高速搜索及高可用性。它们可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。本章节视频,请从 php.itcast.cn 网站去下载.第六阶段: 大型项目实战(提示:在不同的班级分别会讲下面的二个项目,一些老项目可能也会被新项目替换)(1)电子商务系统(基于shopex或基于ecshop)一款基于B2C网店系统,适合各类企业及个人快速构建个性化网上商店。使 用PHP语言及MYSQL数据库开发的程序,该项目在稳定性、安全性、负载能力有突出表现,同时使用到seo(搜索引擎 优化)、页面静态化技术及缓存技术(2)CMS内容管理系统(基于DEDECMS二次开发)织梦内容管理系统(DedeCms) 以简单、实用、开源而闻名,是国内最知名 的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历了二年多的发展,目前的版本无论在功能,还 是是易用性方面,都有了长足的发展,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中 小型门户的构建,当然也不乏有企业用户和学校等在使用本系统。织梦内容管理系统(DedeCms)基于PHP+MySQL的技 术架构,完全开源加上强大稳定的技术架构,使你无论是目前打算做个小型网站,还是想让网站在不断壮大后系仍 能得到随意扩充都有充分的保证。(3)SNS社会化网络系统(校内网)本系统是一个社交系统,可以联络你和你周围的朋友,了解他们的最新动 态;和朋友分享相片、音乐和电影;找到老同学,结识新朋友;用照片和日志记录生活,展示自我视频下载: php.itcast.cn第七阶段: 传智播客特色课程总结以往所学知识,介绍面试、沟通等个人发展所需的知识和技巧。
2023年08月07日
28 阅读
0 评论
0 点赞
2023-08-04
重构代码的技术
重构代码的技术
2023年08月04日
31 阅读
0 评论
0 点赞
2023-08-04
基于PHP的cURL快速入门
基于PHP的cURL快速入门cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。本文将介绍 cURL 的一些高级特性,以及在PHP中如何运用它。为什么要用 cURL?是的,我们可以通过其他办法获取网页内容。大多数时候,我因为想偷懒,都直接用简单的PHP函数:以下为引用的内容:$content = file_get_contents("http://www.nettuts.com");// or$lines = file("http://www.nettuts.com");// orreadfile(http://www.nettuts.com);不过,这种做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理coockies、验证、表单提交、文件上传等等。引用:cURL 是一种功能强大的库,支持很多不同的协议、选项,能提供 URL 请求相关的各种细节信息。基本结构在学习更为复杂的功能之前,先来看一下在PHP中建立cURL请求的基本步骤:初始化设置变量执行并获取结果释放cURL句柄以下为引用的内容:// 1. 初始化$ch = curl_init();// 2. 设置选项,包括URLcurl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);// 3. 执行并获取HTML文档内容$output = curl_exec($ch);// 4. 释放curl句柄curl_close($ch);第二步(也就是 curl_setopt() )最为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。检查错误你可以加一段检查错误的语句(虽然这并不是必需的):以下为引用的内容:// ...$output = curl_exec($ch);if ($output === FALSE) {echo "cURL Error: " . curl_error($ch);}// ...请注意,比较的时候我们用的是“=== FALSE”,而非“== FALSE”。因为我们得区分 空输出 和 布尔值FALSE,后者才是真正的错误.获取信息这是另一个可选的设置项,能够在cURL执行后获取这一请求的有关信息:以下为引用的内容:// ...curl_exec($ch);$info = curl_getinfo($ch);echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒';// ...返回的数组中包括了以下信息:“url” //资源网络地址“content_type” //内容编码“http_code” //HTTP状态码“header_size” //header的大小“request_size” //请求的大小“filetime” //文件创建时间“ssl_verify_result” //SSL验证结果“redirect_count” //跳转技术“total_time” //总耗时“namelookup_time” //DNS查询耗时“connect_time” //等待连接耗时“pretransfer_time” //传输前准备耗时“size_upload” //上传数据的大小“size_download” //下载数据的大小“speed_download” //下载速度“speed_upload” //上传速度“download_content_length”//下载内容的长度“upload_content_length” //上传内容的长度“starttransfer_time” //开始传输的时间“redirect_time”//重定向耗时基于浏览器的重定向在第一个例子中,我们将提供一段用于侦测服务器是否有基于浏览器的重定向的代码。例如,有些网站会根据是否是手机浏览器甚至用户来自哪个国家来重定向网页。我们利用 CURLOPT_HTTPHEADER 选项来设定我们发送出的HTTP请求头信息(http headers),包括user agent信息和默认语言。然后我们来看看这些特定网站是否会把我们重定向到不同的URL。以下为引用的内容:// 测试用的URL$urls = array("http://www.cnn.com","http://www.mozilla.com","http://www.facebook.com");// 测试用的浏览器信息$browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)","language" => "en-us,en;q=0.5"),"iphone" => array ("user_agent" => "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3","language" => "en"),"french" => array ("user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)","language" => "fr,fr-FR;q=0.5"));foreach ($urls as $url) {echo "URL: $url\n";foreach ($browsers as $test_name => $browser) {$ch = curl_init();// 设置 urlcurl_setopt($ch, CURLOPT_URL, $url);// 设置浏览器的特定headercurl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: {$browser['user_agent']}","Accept-Language: {$browser['language']}"));// 页面内容我们并不需要curl_setopt($ch, CURLOPT_NOBODY, 1);// 只需返回HTTP headercurl_setopt($ch, CURLOPT_HEADER, 1);// 返回结果,而不是输出它curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);// 有重定向的HTTP头信息吗?if (preg_match("!Location: (.*)!", $output, $matches)) {echo "$test_name: redirects to $matches[1]\n";} else {echo "$test_name: no redirection\n";}}echo "\n\n";}首先,我们建立一组需要测试的URL,接着指定一组需要测试的浏览器信息。最后通过循环测试各种URL和浏览器匹配可能产生的情况。因为我们指定了cURL选项,所以返回的输出内容则只包括HTTP头信息(被存放于 $output 中)。利用一个简单的正则,我们检查这个头信息中是否包含了“Location:”字样。运行这段代码应该会返回如下结果:URL: http://www.cnn.comstandard: no redirectioniphone: redirects to http://m.cnn.comfrench: no redirectionURL: http://www.mozilla.comstandard: redirects to http://www.mozilla.com/en-US/iphone: redirects to http://www.mozilla.com/en-US/french: redirects to http://www.mozilla.com/fr/URL: http://www.facebook.comstandard: no redirectioniphone: redirects to http://touch.facebook.com/?w2mfrench: no redirection用POST方法发送数据当发起GET请求时,数据可以通过“查询字串”(query string)传递给一个URL。例如,在google中搜索时,搜索关键即为URL的查询字串的一部分:http://www.google.com/search?q=nettuts这种情况下你可能并不需要cURL来模拟。把这个URL丢给“file_get_contents()”就能得到相同结果。不过有一些HTML表单是用POST方法提交的。这种表单提交时,数据是通过 HTTP请求体(request body) 发送,而不是查询字串。例如,当使用CodeIgniter论坛的表单,无论你输入什么关键字,总是被POST到如下页面:http://codeigniter.com/forums/do_search/你可以用PHP脚本来模拟这种URL请求。首先,新建一个可以接受并显示POST数据的文件,我们给它命名为post_output.php:print_r($_POST);接下来,写一段PHP脚本来执行cURL请求:以下为引用的内容:$url = "http://localhost/post_output.php";$post_data = array ("foo" => "bar","query" => "Nettuts","action" => "Submit");$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 我们在POST数据哦!curl_setopt($ch, CURLOPT_POST, 1);// 把post的变量加上curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo $output;执行代码后应该会得到以下结果:Array([foo]=>bar[query]=>Nettuts[action]=>Submit)这段脚本发送一个POST请求给 post_output.php ,这个页面 $_POST 变量并返回,我们利用cURL捕捉了这个输出。文件上传上传文件和前面的POST十分相似。因为所有的文件上传表单都是通过POST方法提交的。首先新建一个接收文件的页面,命名为 upload_output.php:print_r($_FILES);以下是真正执行文件上传任务的脚本:以下为引用的内容:$url = "http://localhost/upload_output.php";$post_data = array ("foo" => "bar",// 要上传的本地文件地址"upload" => "@C:/wamp/www/test.zip");$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo $output;如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加上@符号。执行这段脚本应该会得到如下输出:Array([upload]=>Array([name]=>test.zip[type]=>application/octet-stream[tmp_name]=>C:\wamp\tmp\php4CCB.tmp[error]=>0[size]=>1183642))cURL批处理(multi cURL)cURL还有一个高级特性——批处理句柄(handle)。这一特性允许你同时或异步地打开多个URL连接。下面是来自来自php.net的示例代码:以下为引用的内容:// 创建两个cURL资源$ch1 = curl_init();$ch2 = curl_init();// 指定URL和适当的参数curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");curl_setopt($ch2, CURLOPT_HEADER, 0);// 创建cURL批处理句柄$mh = curl_multi_init();// 加上前面两个资源句柄curl_multi_add_handle($mh,$ch1);curl_multi_add_handle($mh,$ch2);// 预定义一个状态变量$active = null;// 执行批处理do {$mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);while ($active && $mrc == CURLM_OK) {if (curl_multi_select($mh) != -1) {do {$mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);}}// 关闭各个句柄curl_multi_remove_handle($mh, $ch1);curl_multi_remove_handle($mh, $ch2);curl_multi_close($mh);这里要做的就是打开多个cURL句柄并指派给一个批处理句柄。然后你就只需在一个while循环里等它执行完毕。这个示例中有两个主要循环。第一个 do-while 循环重复调用 curl_multi_exec() 。这个函数是无隔断(non-blocking)的,但会尽可能少地执行。它返回一个状态值,只要这个值等于常量 CURLM_CALL_MULTI_PERFORM ,就代表还有一些刻不容缓的工作要做(例如,把对应URL的http头信息发送出去)。也就是说,我们需要不断调用该函数,直到返回值发生改变。而接下来的 while 循环,只在 $active 变量为 true 时继续。这一变量之前作为第二个参数传给了 curl_multi_exec() ,代表只要批处理句柄中是否还有活动连接。接着,我们调用 curl_multi_select() ,在活动连接(例如接受服务器响应)出现之前,它都是被“屏蔽”的。这个函数成功执行后,我们又会进入另一个 do-while 循环,继续下一条URL。还是来看一看怎么把这一功能用到实处吧:WordPress 连接检查器想象一下你有一个文章数目庞大的博客,这些文章中包含了大量外部网站链接。一段时间之后,因为这样那样的原因,这些链接中相当数量都失效了。要么是被和谐了,要么是整个站点都被功夫网了...我们下面建立一个脚本,分析所有这些链接,找出打不开或者404的网站/网页,并生成一个报告。请注意,以下并不是一个真正可用的WordPress插件,仅仅是一段独立功能的脚本而已,仅供演示,谢谢。好,开始吧。首先,从数据库中读取所有这些链接:以下为引用的内容:// CONFIG$db_host = 'localhost';$db_user = 'root';$db_pass = '';$db_name = 'wordpress';$excluded_domains = array('localhost', 'www.mydomain.com');$max_connections = 10;// 初始化一些变量$url_list = array();$working_urls = array();$dead_urls = array();$not_found_urls = array();$active = null;// 连到 MySQLif (!mysql_connect($db_host, $db_user, $db_pass)) {die('Could not connect: ' . mysql_error());}if (!mysql_select_db($db_name)) {die('Could not select db: ' . mysql_error());}// 找出所有含有链接的文章$q = "SELECT post_content FROM wp_postsWHERE post_content LIKE '%href=%'AND post_status = 'publish'AND post_type = 'post'";$r = mysql_query($q) or die(mysql_error());while ($d = mysql_fetch_assoc($r)) {// 用正则匹配链接if (preg_match_all("!href=\"(.*?)\"!", $d['post_content'], $matches)) {foreach ($matches[1] as $url) {// exclude some domains$tmp = parse_url($url);if (in_array($tmp['host'], $excluded_domains)) {continue;}// store the url$url_list []= $url;}}}// 移除重复链接$url_list = array_values(array_unique($url_list));if (!$url_list) {die('No URL to check');}我们首先配置好数据库,一系列要排除的域名($excluded_domains),以及最大并发连接数($max_connections)。然后,连接数据库,获取文章和包含的链接,把它们收集到一个数组中($url_list)。下面的代码有点复杂了,因此我将一小步一小步地详细解释:以下为引用的内容:// 1. 批处理器$mh = curl_multi_init();// 2. 加入需批量处理的URLfor ($i = 0; $i < $max_connections; $i++) {add_url_to_multi_handle($mh, $url_list);}// 3. 初始处理do {$mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);// 4. 主循环while ($active && $mrc == CURLM_OK) {// 5. 有活动连接if (curl_multi_select($mh) != -1) {// 6. 干活do {$mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);// 7. 有信息否?if ($mhinfo = curl_multi_info_read($mh)) {// 意味着该连接正常结束// 8. 从curl句柄获取信息$chinfo = curl_getinfo($mhinfo['handle']);// 9. 死链么?if (!$chinfo['http_code']) {$dead_urls []= $chinfo['url'];// 10. 404了?} else if ($chinfo['http_code'] == 404) {$not_found_urls []= $chinfo['url'];// 11. 还能用} else {$working_urls []= $chinfo['url'];}// 12. 移除句柄curl_multi_remove_handle($mh, $mhinfo['handle']);curl_close($mhinfo['handle']);// 13. 加入新URL,干活if (add_url_to_multi_handle($mh, $url_list)) {do {$mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);}}}}// 14. 完了curl_multi_close($mh);echo "==Dead URLs==\n";echo implode("\n",$dead_urls) . "\n\n";echo "==404 URLs==\n";echo implode("\n",$not_found_urls) . "\n\n";echo "==Working URLs==\n";echo implode("\n",$working_urls);// 15. 向批处理器添加urlfunction add_url_to_multi_handle($mh, $url_list) {static $index = 0;// 如果还剩url没用if ($url_list[$index]) {// 新建curl句柄$ch = curl_init();// 配置urlcurl_setopt($ch, CURLOPT_URL, $url_list[$index]);// 不想输出返回的内容curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 重定向到哪儿我们就去哪儿curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// 不需要内容体,能够节约带宽和时间curl_setopt($ch, CURLOPT_NOBODY, 1);// 加入到批处理器中curl_multi_add_handle($mh, $ch);// 拨一下计数器,下次调用该函数就能添加下一个url了$index++;return true;} else {// 没有新的URL需要处理了return false;}}下面解释一下以上代码。列表的序号对应着代码注释中的顺序数字。新建一个批处理器。Created a multi handle.稍后我们将创建一个把URL加入批处理器的函数 add_url_to_multi_handle() 。每当这个函数被调用,就有一个新url被加入批处理器。一开始,我们给批处理器添加了10个URL(这一数字由 $max_connections 所决定)。 运行 curl_multi_exec() 进行初始化工作是必须的,只要它返回 CURLM_CALL_MULTI_PERFORM 就还有事情要做。这么做主要是为了创建连接,它不会等待完整的URL响应。只要批处理中还有活动连接主循环就会一直持续。curl_multi_select() 会一直等待,直到某个URL查询产生活动连接。cURL的活儿又来了,主要是获取响应数据。检查各种信息。当一个URL请求完成时,会返回一个数组。在返回的数组中有一个 cURL 句柄。我们利用其获取单个cURL请求的相应信息。如果这是一个死链或者请求超时,不会返回http状态码。如果这个页面找不到了,会返回404状态码。其他情况我们都认为这个链接是可用的(当然,你也可以再检查一下500错误之类...)。从该批次移除这个cURL句柄,因为它已经没有利用价值了,关了它!很好,现在可以另外加一个URL进来了。再一次地,初始化工作又开始进行...嗯,该干的都干了。关闭批处理器,生成报告。回过头来看给批处理器添加新URL的函数。这个函数每调用一次,静态变量 $index 就递增一次,这样我们才能知道还剩多少URL没处理。我把这个脚本在我的博客上跑了一遍(测试需要,有一些错误链接是故意加上的),结果如下:以下为引用的内容:共检查约40个URL,只耗费两秒不到。当需要检查更加大量的URL时,其省心省力的效果可想而知!如果你同时打开10个连接,还能再快上10倍!另外,你还可以利用cURL批处理的无隔断特性来处理大量URL请求,而不会阻塞你的Web脚本。另一些有用的cURL 选项HTTP 认证如果某个URL请求需要基于 HTTP 的身份验证,你可以使用下面的代码:复制内容到剪贴板代码:以下为引用的内容:$url = "http://www.somesite.com/members/";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 发送用户名和密码curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");// 你可以允许其重定向curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// 下面的选项让 cURL 在重定向后// 也能发送用户名和密码curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);$output = curl_exec($ch);curl_close($ch);FTP 上传PHP 自带有 FTP 类库, 但你也能用 cURL:以下为引用的内容:// 开一个文件指针$file = fopen("/path/to/file", "r");// url里包含了大部分所需信息$url = "ftp://username:password@mydomain.com:21/path/to/new/file";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 上传相关的选项curl_setopt($ch, CURLOPT_UPLOAD, 1);curl_setopt($ch, CURLOPT_INFILE, $fp);curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file"));// 是否开启ASCII模式 (上传文本文件时有用)curl_setopt($ch, CURLOPT_FTPASCII, 1);$output = curl_exec($ch);curl_close($ch);翻墙术你可以用代理发起cURL请求:以下为引用的内容:$ch = curl_init();curl_setopt($ch, CURLOPT_URL,'http://www.example.com');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 指定代理地址curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080');// 如果需要的话,提供用户名和密码curl_setopt($ch, CURLOPT_PROXYUSERPWD,'user:pass');$output = curl_exec($ch);curl_close ($ch);回调函数可以在一个URL请求过程中,让cURL调用某指定的回调函数。例如,在内容或者响应下载的过程中立刻开始利用数据,而不用等到完全下载完。以下为引用的内容:$ch = curl_init();curl_setopt($ch, CURLOPT_URL,'http://net.tutsplus.com');curl_setopt($ch, CURLOPT_WRITEFUNCTION,"progress_function");curl_exec($ch);curl_close ($ch);function progress_function($ch,$str) {echo $str;return strlen($str);}这个回调函数必须返回字串的长度,不然此功能将无法正常使用。在URL响应接收的过程中,只要收到一个数据包,这个函数就会被调用。小结今天我们一起学习了cURL库的强大功能和灵活的扩展性。希望你喜欢。下一次要发起URL请求时,考虑下cURL吧!英文原文:http://net.tutsplus.com/tutorial%20...%20for-mastering-curl/原文作者:Burak Guzel本文链接:http://www.blueidea.com/tech/program/2010/7348.aspHow to Use cURL in PHP
2023年08月04日
11 阅读
0 评论
0 点赞
2023-07-30
安装虚拟机VMware Workstation17Pro
下载https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html激活密钥VMware Workstation 17 Pro 激活密钥JU090-6039P-08409-8J0QH-2YR7F4A4RR-813DK-M81A9-4U35H-06KNDNZ4RR-FTK5H-H81C1-Q30QH-1V2LA4Y09U-AJK97-089Z0-A3054-83KLA4C21U-2KK9Q-M8130-4V2QH-CF810MC60H-DWHD5-H80U9-6V85M-8280DZA30U-DXF84-4850Q-UMMXZ-W6K8FAC590-2XW97-48EFZ-TZPQE-MYHEAYF39K-DLFE5-H856Z-6NWZE-XQ2XDAC15R-FNZ16-H8DWQ-WFPNV-M28E2CZ1J8-A0D82-489LZ-ZMZQT-P3KX6YA11K-6YE8H-H89ZZ-EXM59-Y6AR0
2023年07月30日
27 阅读
0 评论
0 点赞
2023-07-29
win下docker安装和使用
安装下载安装包:https://docs.docker.com/desktop/install/windows-install/下载 Linux 内核更新包适用于 x64 计算机的 WSL2 Linux 内核更新包解决docker下载镜像速度慢问题阿里云镜像加速器:https://阿里ID.mirror.aliyuncs.com复制上面镜像加速地址,在Docker Desktop设置如下{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": true, "features": { "buildkit": true }, "registry-mirrors": [ "https://阿里ID.mirror.aliyuncs.com" ] }experimental默认为false,这里改成true后才能保存,然后再改回来使用命令行输入docker run hello-world
2023年07月29日
44 阅读
0 评论
0 点赞
1
...
19
20