php中的curl使用心得详解
这两天做的工作使用到了curl
当要请求的url和自己不在一台server上面,不能直接访问
这种情况下使用curl是最好不过了,模拟post请求做一些事,简单方便
下面记录一下在使用过程中的积累
代码如下 | 复制代码 |
/* function getCurlData($url) { |
总结一下使用curl方法:
先初始化curl
使用curl_setopt设置目标url,和其他选项
curl_exec,执行curl
执行后,关闭curl
最后一步就是输出
curl()效率挺高的,支持多线程,不过需要开启下curl扩展。下面是curl扩展开启的步骤:
1、将PHP文件夹下的三个文件php_curl.dll,libeay32.dll,ssleay32.dll复制到system32下;
2、将php.ini(c:WINDOWS目录下)中的;extension=php_curl.dll中的分号去掉;
3、重启apache或者IIS
本文章来为php初学者介绍在php配置好之后连接mysql提示Call to undefined function \'mysql_connect()的解决办法。先来按书上测试一下php连接mysql
代码如下 | 复制代码 |
<?php |
运行代码出现:
Call to undefined function 'mysql_connect()'…
错误了失败
百度找到结果是PHP+MYSQL 环境没配置好, php5 的默认 mysql 是关闭的
将php_mysql.dll和libmysql.dll文件拷贝至c:/winnt/system32中(我漏了libmysql.dll)
找到php.ini中的;extension=php_mysql,去掉前面的";"
cURL简介
cURL是一个利用URL语法规定来传输数据和文件的工具,支持很多种协议如HTTP、FTP、TELNET等。PHP也支持 cURL 库。
假如我们要获取某个网页的内容,我们可能会使用下面这几种方法:
代码如下 | 复制代码 |
// 把整个文件读入一个数组中 // 读入一个文件并写入到输出缓冲
|
这几种做法相当简单,但缺乏灵活性和有效的错误处理。而且他们无法完成一些高难度动作,比如处理coockies、验证、表单提交、文件上传等等。
cURL简例
下面给出一段简单的代码,从其中你可以学习到使用cURL的大概步骤,php cURL入门教程。
代码如下 | 复制代码 |
<?php // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回的内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl资源 // 输出获得的源代码 |
关于第二步的 curl_setopt() 是最为重要的,有一长串cURL参数可供设置,它们能指定URL请求的各个细节。
获取信息
这是另一个可选的设置项,能够在cURL执行后获取这一请求的有关信息:
代码如下 | 复制代码 |
<?php // 1. 初始化 // 2. 设置选项 // 3. 执行并获取HTML文档内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 获取 cURL 信息 并输出 // 5. 释放curl句柄 |
返回的数组中包括了以下信息:
"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" // 重定向耗时
用POST方法发送数据
新建 from.php
代码如下 | 复制代码 |
// 待 post 的数据 // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl句柄 // 输出内容
|
新建 to.php
代码如下 | 复制代码 |
echo "从 from.php POST数据到 to.php 成功!以下为 to.php 返回的数据:<br><br>";
|
文件上传
上传文件和前面的POST十分相似,因为所有的文件上传表单都是通过POST方法提交的。
新建 from.php
代码如下 | 复制代码 |
// 待 post 的数据 // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl资源 // 输出内容
|
新建 to.php:
代码如下 | 复制代码 |
print_r($_FILES); |
如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加上@符号。
另一些有用的cURL范例
HTTP认证
如果某个URL请求需要基于 HTTP 的身份验证,你可以使用下面的代码:
代码如下 | 复制代码 |
<?php // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl句柄 |
FTP上传
PHP 自带有 FTP 类库,但你也能用 cURL,也可以参考这篇文章:php使用cURL来实现ftp上传
代码如下 | 复制代码 |
<?php // 开一个文件指针 // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl句柄
|
你可以用代理发起cURL请求:
代码如下 | 复制代码 |
<?php // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl句柄
|
回调函数
可以在一个URL请求过程中,让cURL调用某指定的回调函数。例如,在内容或者响应下载的过程中立刻开始利用数据,而不用等到完全下载完。
代码如下 | 复制代码 |
<?php // 1. 初始化 // 2. 设置选项 // 3. 执行并获取返回内容 // 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号 // 5. 释放curl句柄 // 回调函数
|
这个回调函数必须返回字串的长度,不然此功能将无法正常使用,在URL响应接收的过程中,只要收到一个数据包,这个函数就会被调用。
讲到了半天我们再来一个高级实用点的功能cURL来实现ftp上传
web服务器的上传限制:
php的默认上传限制为2M,如果你要上传超过2M的文件的话,你必须修改你的PHP配置 或者 用下面的代码建立一个 .htaceess文件。
代码如下 | 复制代码 |
php_value upload_max_filesize 16M |
这里设置最大的文件上传限制为16M,post_max_size 的值为20M,因为可能在上传文件的同时,我们还需要POST表单里的其他表单项的值。
建立的 .htaccess 要放在你的上传脚本同一个目录下。
使用 cURL 进行文件上传
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多种协议,如HTTP、FTP、TELNET等。它能完成很多高难度任务——如处理coockies、验证、表单提交、文件上传、ftp上传等等。
这里,我们准备通过使用web表单来上传一个文件到ftp空间上,这里的ftp空间是有密码保护的。
代码如下 | 复制代码 |
<form action="curlupload.php" method="post" enctype="multipart/form-data"> |
这个表单页面比较简单,仅仅是拥有一个文件上传的功能。
然后我们需要下面的php代码来接收上传过来的文件,使用 cURL 打开一个文件流并传送到远程ftp服务器上去。
代码如下 | 复制代码 |
|
当用户选择了并上传了一个文件,文件先保存在web服务器上,我们使用 fopen 打开这个临时文件并初始一个cURL会话,在发送的url中,把ftp的账号和密码填上,然后再设置cURL的其他必备参数,即可。如果返回的错误数量为0,那么文件就上传成功了。
小结
今天我们一起学习了cURL库的强大功能和灵活的扩展性 原文整理自:3a教程网
当你想生成一个随机的密码的时候,你第一想到的可能是使用 uniquid() 函数,但是如果我们使用 array_rand() 和 range() ,可以更完美的实现这个功能。
方法一,
代码如下 | 复制代码 |
<?php function randCode($length) { echo "www.111cn.net"; |
方法二,
1、在 33 – 126 中生成一个随机整数,如 35,
2、将 35 转换成对应的ASCII码字符,如 35 对应 #
3、重复以上 1、2 步骤 n 次,连接成 n 位的密码
该算法主要用到了两个函数,mt_rand ( int $min , int $max )函数用于生成随机整数,其中 $min – $max 为 ASCII 码的范围,这里取 33 -126 ,可以根据需要调整范围,如ASCII码表中 97 – 122 位对应 a – z 的英文字母,具体可参考 ASCII码表; chr ( int $ascii )函数用于将对应整数 $ascii 转换成对应的字符。
代码如下 | 复制代码 |
function create_password($pw_length = 8) { $randpwd = ''; for ($i = 0; $i < $pw_length; $i++) { $randpwd .= chr(mt_rand(33, 126)); } return $randpwd; } // 调用该函数,传递长度参数$pw_length = 6 echo create_password(6); |
方法三,
代码如下 | 复制代码 |
//自动为用户随机生成用户名(长度6-13) function create_password($pw_length = 4){ $randpwd = ''; for ($i = 0; $i < $pw_length; $i++){ $randpwd .= chr(mt_rand(33, 126)); } return $randpwd; } function generate_username( $length = 6 ) { // 密码字符集,可任意添加你需要的字符 $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'; $password = ''; for ( $i = 0; $i < $length; $i++ ) { // 这里提供两种字符获取方式 // 第一种是使用substr 截取$chars中的任意一位字符; // 第二种是取字符数组$chars 的任意元素 // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); $password .= $chars[ mt_rand(0, strlen($chars) - 1) ]; } return $password; } // 调用该函数 $userId = 'user'.generate_username(6); $pwd = create_password(9); |
LAMP环境下,理想的情况是Linux PHP MySQL的时区都设置一致,否则程序极易出现一些阴差阳错的【时间差】问题。假设设置时区为:"Asia/Shanghai"
1. Linux设置时区,以CentOS5.5为例:
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2. MySQL中设置时区
编辑MySQL配置文件:my.cnf/my.ini,在[mysqld]下加上:
default-time-zone = '+8:00'
实际上,如果MySQL所在OS的时区已经设置正确,则可以不用在MySQL中设置时区,因为MySQL服务启动的时候,会自动采用OS的时区。
3. PHP中设置时区
在PHP配置文件PHP.ini中:
1 date.timezone = "Asia/Shanghai"
设置好后,最好重启下系统。
如果是购买的Web空间,没有权限在Linux PHP MySQL中配置时区。那也好办,只需要在PHP脚本中设置和OS对应的时区,因为MySQL中默认使用的是OS的时区。假设OS的时区是'Asia/Shanghai',使用下面两条语句其中之一即可:
ini_set('date.timezone', 'Asia/Shanghai');
date_default_timezone_set('Asia/Shanghai');
相关文章
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31jQuery 1.9使用$.support替代$.browser的使用方法
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31使用percona-toolkit操作MySQL的实用命令小结
1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
如何使用php脚本给html中引用的js和css路径打上版本号
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24- 一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
- C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
安装和使用percona-toolkit来辅助操作MySQL的基本教程
一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24- 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
- 基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07
- 无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
- php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
- 前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04