存档

文章标签 ‘PHP教程’

php_call_oracle_procedure

2010年8月12日

在PHP中调用oracle中的存储过程,通常就是采用PHP的OCI扩展所提供的函数来进行调用。

关于PHP调用存储过程,基本上的搜索到的国内的网页,其步骤都差不多,也只是谈到了存储过程返回一般参数,即Varchar2、number这种类型,基本上没有讲到如何返回ref cursor类型。

笔者经过测试发现,其实调用返回ref cursor类型的存储过程,其方式也与一般的调用类似,唯一不同的地方就是在采用oci_bind_by_name将采用oci_ew_cursor的创建的cursor类型的变量绑定到输出游标后,在采用oci_execute执行预处理resource后,需要采用oci_execute执行刚才所绑定的那个游标,再采用oci_fetch_*等函数获取该游标的值

各位TX可以参考以下的代码:

<?php
$conn = oci_connect('SCOTT','TIGER') or die;

$sql = 'BEGIN blog.latest(:num_entries, :blog_entries); END;';

$stmt = oci_parse($conn, $sql);

// Bind the input num_entries argument to the $max_entries PHP variable
$max_entries = 5;
oci_bind_by_name($stmt,":num_entries",$max_entries,32);

// Create a new cursor resource
$blog_entries = oci_new_cursor($conn);

// Bind the cursor resource to the Oracle argument
oci_bind_by_name($stmt,":blog_entries",$blog_entries,-1,OCI_B_CURSOR);

// Execute the statement
oci_execute($stmt);

// Execute the cursor
oci_execute($blog_entries);

print "The $max_entries most recent blog entries\n";

// Use OCIFetchinto in the same way as you would with SELECT
while ($entry = oci_fetch_assoc($blog_entries, OCI_RETURN_LOBS )) {
    print_r($entry);
}
?>

以上代码中标红色的那句代码至关重要,若返回的游标没有执行的话,将无法获取到游标的内容!

注意:在写存储过程时,若遇到同时有varchar2、number、ref_cursor等类型的做为输出时,需要将ref_cursor类型的参数放在参数列表的最后,否则将可能出现意想不到的异常!

具体原因笔者也未找到,若有TX发现,可一起讨论一下!

另外,Oracle表中的Clob类型的字段,在查询出结果后,采用var_dump出来看,会发现,那个字体是resource类型,resource类型是不能够直接显示的,需要采用stream_get_contents或者fgets等函数才能取出相应的字符串。

这个处理相对比较简单,这里就不用专门写DEMO了。

PHP教程 , , , , , , , ,

php数组排序

2010年5月5日

近日,看到一关于PHP数组排序的问题,居然在瞬间没有想出如何实现!真的是有点丢分呢。。。

于是想起CSDN上曾有一篇文章说过只有20%的人能够实现二分查找,看来我在那20%之外了

于是想了一下,得出以下实现算法,供大家借鉴。

<?php
class sortNum{
        private $_sortArr;
        private $_tmp = array();
        function __construct($arr=array()){
                if(count($arr)!=0)
                        $this->_sortArr = $arr;
        }
        function __desctruct(){
            unset($this->_sortArr);
            unset($this->_item);
        }
        public function setNum($arr){
                if(count($arr)!=0){
                        $this->_sortArr = $arr;
                        return true;
                }else
                        return false;
        }
        public function sortArray(){
            $num=count($this->_sortArr);
            $min=-999999999;
            for($i=0;$i<=$num;$i++){
                $mina=999999999;
                foreach ($this->_sortArr as $key => $value) {
                    if($value>$min&&$value<$mina){
                        $this->_tmp[$i]=$value;
                        $mina=$value;
                    }
                }
                $min=$mina;
            }
            return $this->_tmp;
        }
}

$st = array(2,6,1,5,3,7);
$obj=new sortNum($st);
$rs = $obj->sortArray();
print_r($rs);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 6
    [5] => 7
)

 

这里,看来以后得多加注意这种基本的算法问题了,不然再次出现这种情况,可真是冤啊。。。

PHP教程 , ,

关于JS获取select的值

2010年3月16日

近日,在一项目中需要采用JS获取Select选择框所选中项的值,居然一下子忘记了如何获取。于是看了DOM文档,真觉得是自己老了,连这么简单的东西都忘记了。

为怕以后再忘记,也给同行一个提示,遂记录于此。

<select id="s1" name="s1">
<option selected="selected" value="1">选项一</option>
<option value="2">选项二</option>
<option value="3">选项三</option>
</select>

操作一、获取所选择项显示的文字

document.getElementById(‘s1’).options[document.getElementById(‘s1’).selectedIndex].text

若当前选中“选项二”,则这种方式所取的结果为:选项二

操作二、获取所选择项的value

document.getElementById(‘s1’).options[document.getElementById(‘s1’).selectedIndex].value

若当前选中“选项二”,则这种方式所取的结果为:2

操作三、获取当前选择项

document.getElementById(‘s1’).selectedIndex

若当前选中“选项一”,则这种方式所取的结果为:1

这里对于select必须得有id属性,才能采用getElementById获取该控件,这点需要注意。

另外,对于PHP获取页面所提交的Select控件的值,需要Select控件得有name属性,在PHP内获取表单上的Select控件数据时,采用$s = $_POST[‘select的name属性值’];这种方式来获取。

怎么样? 其实很简单的吧,希望能给初学者一个启示!

HTML, Javascript, PHP教程 , , ,

Session中的KEY

2009年11月26日

近时在项目中遇到一问题,因未对某一输入值对相关限制,导致输入值有可能为全数字。

而在项目中将该输入值直接做为Session中的key,此时就出现了奇怪问题:原本入到Session中的数据一下子丢失了,然后再进行了初始化,进而导致在使用Session中的数据出错,始终找不到具体原因。

详细看了一下手册,原来将数据放到Session中,其key必须采用和变量一样的命名,即必须以字母、下划线开头。而这里以全数字为key将数据放到Session中,就导致了会在每时每刻都生成一个新的session id,即Session失效了!

找到了症结所在,解决之!一切完好!

PHP教程 ,

谈PHP中的多态

2009年9月9日

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

在面向对象的软件开发中,多态性是最为重要的部分之一。面向对象编程并不只是将相关的方法与数据简单的结合起来,而是采用面向对象编程中的各种要素将现实生活中的各种情况清晰的描述出来。这一小节将对面向对象编程中的多态性作详细的讲解。

10.2.1  什么是多态

多态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在面向对象的理论中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。也即不同类的对象收到相同的消息时,将得到不同的结果。

在实际的应用开发中,采用面向对象中的多态主要在于可以将不同的子类对象都当作一个父类来处理,并且可以屏蔽不同子类对象之间所存在的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

10.2.2  多态的应用设计

在实际的应用开发中,通常为了使项目能够在以后的时间里的轻松实现扩展与升级,需要通过继承实现可复用模块进行轻松升级。在进行可复用模块设计时,就需要尽可能的减少使用流程控制语句。此时就可以采用多态实现该类设计。

【示例10.4】例举了通常采用流程控制语句实现不同类的处理。其代码如下所示。

<?php
    class painter{                                    //定义油漆工类
        public function paintbrush(){                 //定义油漆工动作
            echo "油漆工正在刷漆!\n";
        }
    }
    class typist{                                    //定义打字员类
        public function typed(){                     //定义打字员工作
            echo "打字员正在打字!\n";
        }
    }
    function printworking($obj){                    //定义处理类
        if($obj instanceof painter){                //若对象是油漆工类,则显示油漆工动作
            $obj->paintbrush();
        }elseif($obj instanceof typist){            //若对象是打字员类,则显示打字员动作
            $obj->typed();
        }else{                                    //若非以上类,则显示出错信息
            echo "Error: 对象错误!";
        }
    }
    printworking(new painter());                    //显示员工工作
    printworking(new typist());                     //显示员工工作
?>

分析:在上述程序中,首先定义两个员工类:油漆工类和打字员类。然后定义一个处理函数,在该函数中,判断员工是否为已经定义的员工,打印出员工的工作状态。其结果如下所示。

油漆工正在刷漆 

打字员正在打字

从以上程序可轻松看出,若想显示其几种员工的工作状态,需要首先定义该员工类,并在该员工类中定义员工的工作,然后在printworking()函数中增加elseif语句以检查对象是哪一员工类的实例。这在实际的应用中,是非常不可取的。若此时采用多态,则可以轻松解决此问题。

可以首先创建一个员工父类,所有的员工类将继承自该员工父类,并且继承父类的所有方法与属性。然后在员工类中创建“是一”关系,判断是否为合法的员工。

【示例10.5】例举了采用多态的方式改写上例。其代码如下所示。

<?php
	class employee{							//定义员工父类
		protected function working(){				//定义员工工作,需要在子类的实现
			echo "本方法需要在子类中重载!";
		}
	}
	class painter extends employee{					//定义油漆工类
		public function working(){				//实现继承的工作方法
			echo "油漆工正在刷漆!\n";
		}
	}
	class typist extends employee{					//定义打字员类
		public function working(){
			echo "打字员正在打字!\n";
		}
	}
	class manager extends employee{					//定义经理类
		public function working(){
			echo "经理正在开会!";
		}
	}
	function printworking($obj){					//定义处理方法
		if($obj instanceof employee){				//若是员工对象,则显示其工作状态
			$obj->working();
		}else{							//否则显示错误信息
			echo "Error: 对象错误!";
		}
	}
	printworking(new painter());					//显示油漆工的工作
	printworking(new typist());					//显示打字员的工作
	printworking(new manager());					//显示经理的工作
?>

分析:在上述程序中,首先定义一个员工基类,并定义一个员工工作状态的方法。然后定义将继承自员工基类的三个员工类:油漆工类、打字员类和经理类。然后定义显示员工工作状态的方法。并在该方法中创建一个“是一”关系,用于判断是否为合法的员工。其结果如下所示。

油漆工正在刷漆!

打字员正在打字!

经理正在开会!

从上例可发现,无论增加多少个员工类,只需要实现自员工父类继承的该员工类和方法。而无须修改显示员工工作状态的方法printworking()。

PHP从入门到精通, PHP教程 ,

《PHP从入门到精通》样章-14章

2009年9月8日

第14章 PHP与AJAX

AJAX技术是近年流行起来的技术。它是现有的多种技术的综合应用,包括JavaScript技术、XML技术、DOM技术和XMLHttpRequest控件等多种技术。AJAX技术是现在流行的Web2.0的一个重要标志。本章将对以下内容讲解:

  • AJAX原理。

  • AJAX的核心技术。

  • AJAX的相关应用。

通过对本章的学习,读者将能够理解什么是AJAX,其工作原理是什么,并且能够在实际的应用中使用AJAX

14.1 AJAX概述

AJAX技术是当前Web技术中一门炙手可热的新兴技术。实质上,它并非一门新技术,而是几种新技术的强大组合。它能够为用户提供更为自然的浏览体验。这一节将对AJAX进行详细地介绍。

14.1.1 什么是AJAX

传统B/S模式的应用程序的弊端是对用户反应不灵敏,用户总是处于“提交=>等待=>响应”的过程中,也就是说“用户的动作总是在和服务器思考时间同步”。而AJAX提供了与服务器异步通信的能力,从根本上让用户从“请求=>等待=>响应”的循环中解脱出来。

AJAXAsynchronous JavaScript and XML(以及DHTML等)的缩写,翻译成中文为异步JavaScriptXML。这个短语是Adaptive PathJesse James Garrett发明的,按照Jesse的解释,这不是个首字母缩写词,AJAX技术包含:

  • 基于CSS标准的表示。

  • 使用Document Object Model进行动态显示和交互。

  • 使用XMLHttpRequest与服务器进行异步通信。

  • 使用JavaScript绑定一切。

AJAX是现有多种技术的综合应用。它是通过浏览器页面与服务器后台处理的异步处理来减少网络传输,进而减少用户的等待时间和服务器负担的一种综合技术。它由HTMLJavaScript技术、DHTMLDOM组成,这一方法可以将传统笨拙的Web界面转化成交互性的AJAX应用程序。

14.1.2 工作原理

AJAX的核心是XMLHttpRequestXMLHttpRequest提供了与服务器异步通信的能力,从而让用户在请求的时候不受到阻塞。其工作流程如下所述。

首先由用户在客户端浏览器页面触发某个事件,如onclick事件,当然,这个事件只能是被JavaScript脚本语言捕获到的事件。然后JavaScript脚本相应的创建一个XMLHttpRequest请求,并通过XMLHttpRequest异步的把请求发送到服务器端,同时等待服务器端的响应。服务器端程序在接受客户端所提交的请求后,进行处理并把结果返回。返回的结果被XMLHttpRequest捕获到并返回给JavaScript,再由JavaScript调用相应的DOM进行显示层的控制。如图14-1所示。

14-1 AJAX工作原理图

要让AJAX能够成功运行,需要用户的客户端与服务端两种技术互相配合。客户端采用JavaScript引擎向服务器端发送请求,服务端根据客户端提交的请求返回指定内容。

用户客户端的XMLHttpRequest对象使JavaScript以异步方式访问服务器成为可能。这样当JavaScript函数在后台向服务器提交请求时,用户可以在客户端页面继续其他的工作。

14.1.3 优点与缺点

AJAX技术作为近年来流行的技术,有其技术优点,也有其缺点。优点主要有以下几个方面。

  • AJAX可以提高系统性能,优化用户界面,增强用户浏览体验。

  • AJAX允许在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户的动作,并避免了在网络上发送那些没有改变过的信息。

  • AJAX应用可以仅向服务器发送并取回必需的数据,服务器与客户端之间交换的数据大大减少。

  • AJAX不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

  • AJAX允许将一些服务端的操作移至客户端,减轻了服务器的负担。

其缺点主要有以下几个方面。

  • AJAX可以在不刷新页面的情况下更新页面数据,这可能破坏浏览器【后退】按钮的正常行为。

  • AJAX在客户端执行,因此在开发时需考虑到AJAX的兼容性。

  • AJAX对串流媒体的支持没有FLASHJava Applet好。

  • 由于AJAX的代码存放在页面的HTML语言中,因此项目代码可能因此泄漏。

  • 使用AJAX动态更新页面使得用户难于将某个特定的状态保存到收藏夹中。

  • AJAX的无刷新重载使得页面的变化没有刷新重载整个页面那么明显,所以容易给用户带来困扰。

  • JavaScriptAJAX引擎,不得不考虑JavaScript的兼容性和DeBug等问题。

  • 现有的好多手持设备(例如PDA、手机等)不能很好地支持AJAX

14.2 使用AJAX

AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。它由用户的客户端通过JavaScriptXMLHttpRequest对象向服务器发起请求。再由服务器端根据用户的请求进行处理,完成以后向客户端抛出处理结果,用户浏览器再将服务器处理结果,通过DOM结构呈现在HTML页面上。本节将根据AJAX的请求过程一步步进行讲解。

14.2.1 创建XMLHttpRequest对象

AJAX是通过XMLHttpRequest对象向服务器发起请求的。该对象最初是由MicrosoftInternet ExplorerActiveX对象引入,被称为XMLHTTP。而后Mozilla﹑Netscape﹑Safari和其他浏览器也提供了XMLHttpRequest类,只不过它们创建XMLHttpRequest类的方法不同。

对于MicrosoftInterner Explorer浏览器,其版本不同,创建XMLHttpRequest对象的方法也不一样。通常有以下几种方式。

xmlhttp_request = new ActiveXObject(“Msxml2.XMLHTTP.3.0″); //IE3.0IE4.05.0

xmlhttp_request = new ActiveXObject(“Msxml2.XMLHTTP”); //IE6.0

xmlhttp_request = new ActiveXObject(“Microsoft.XMLHTTP”); //IE7.0及以上

其中,上述第一行是在IE6.0之前的版本创建该对象时所使用的方式。第二行为IE6.0版本创建该对象时所使用的方法。第三行为IE6.0版本以上的浏览器创建对象时所使用方法。为了能够更好的兼容不同版本的Internet Explorer浏览器,在实际应用中常常需要根据浏览器版本创建XMLHttpRequest类。

对于MozillaNetscape﹑Safari等浏览器,创建XMLHttpRequest类的方法如下所示。

xmlhttp_request = new XMLHttpRequest();

如果服务器的响应没有XML mime-type header,某些版本的Mozilla浏览器可能无法正常工作。为了解决这个问题,如果服务器响应的header不是text/xml,可以调用如下所示的其他方法修改该header

xmlhttp_request = new XMLHttpRequest();

xmlhttp_request.overrideMimeType(‘text/xml’);

在实际的应用中,AJAX编写在静态的HTML页面中的Script标签以内,也可以编写在独立的JavaScript文件中,在需要使用AJAX的页面加载该JavaScript文件即可。

第14章样章文档下载

PHP从入门到精通, PHP教程 ,

《PHP从入门到精通》目录

2009年9月6日

应网友要求,特在本博展示《PHP从入门到精通》一书的目录与样章。有需要的朋友可了解一下。

目录
第一篇  概述篇
第1章  PHP概述
1.1  PHP简介
1.1.1  什么是PHP
1.1.2  PHP的特点
1.1.3  PHP的应用范围
1.2  WEB服务器概述
1.2.1  什么是Web服务器
1.2.2  Web服务器原理简介
1.2.3  常用的Web服务器
1.3  HTML简介
1.3.1  什么是HTML
1.3.2  HTML标记类型
1.3.3  HTML元素与标签
1.4  小结
第2章  PHP环境的安装与配置
2.1  PHP环境安装
2.1.1  安装Apache服务器
2.1.2  安装PHP
2.1.3  PHP配置文件php.ini简介
2.1.4  查看配置信息
2.2  整合套件
2.2.1  xampp简介
2.2.2  WAMP
2.2.3  Vertrigo Server
2.2.4  其它套件
2.3  开发工具
2.3.1  EditPlus
2.3.2  NotePad++
2.3.3  Eclipse+PDT
2.3.4  ZendStudio for Eclipse
2.3.5  其它开发工具
2.4  第一个PHP程序——Hello,World!
2.5  小结
第二篇  语法篇
第3章  PHP基础
3.1  数据类型
3.1.1  标量数据类型
3.1.2  复合数据类型
3.1.3  特殊数据类型
3.1.4  数据类型的获取
3.2  数据类型的转换
3.2.1  转换为布尔型
3.2.2  转换为整型
3.2.3  转换为浮点型
3.2.4  转换为字符串
3.2.5  转换为数组
3.2.6  转换为对象和资源
3.3  常量与变量
3.3.1  常量
3.3.2  系统常量
3.3.3  变量
3.3.4  变量的作用域
3.3.5  可变变量
3.4  运算符
3.4.1  赋值运算符
3.4.2  算术运算符
3.4.3  字符串运算符
3.4.4  比较运算符
3.4.5  逻辑运算符
3.4.6  位运算符
3.4.7  其它运算符
3.4.8  运算符的优先级
3.5  表达式
3.5.1  表达式的分类
3.5.2  赋值表达式
3.5.3  算术运算表达式
3.5.4  三目运算表达式
3.5.5  其它表达式
3.6  本章实例
3.7  小结
第4章  PHP流程控制
4.1  流程控制概述
4.2  条件控制语句
4.2.1  if控制语句
4.2.2  switch分支语句
4.3  循环控制语句
4.3.1  while循环语句
4.3.2  do…while循环语句
4.3.3  for循环语句
4.4  跳转语句
4.4.1  break跳转语句
4.4.2  continue跳转语句
4.4.3  return跳转语句
4.5  文件包含
4.5.1  使用inlcude和include_once包含文件
4.5.2  使用require和require_once包含文件
4.6  本章实例
4.7  小结
第5章  PHP函数及操作
5.1  函数的定义与调用
5.1.1  函数的调用
5.1.2  函数的定义
5.1.3  函数间传递参数
5.2  引用
5.2.1  什么是引用
5.2.2  对函数、变量的引用
5.2.3  引用的释放
5.3  PHP常用函数
5.3.1  日期时间函数
5.3.2  数学函数
5.3.3  其它常用函数
5.4  本章实例
5.5  小结
第6章  PHP数组及其操作
6.1  概述
6.1.1  一维数组
6.1.2  多维数组
6.2  数组的常用操作
6.2.1  数组的创建
6.2.2  数组的调用与删除
6.2.3  数组的更新
6.2.4  数组的遍历
6.3  数组的查找
6.3.1  顺序查找
6.3.2  二分法查找
6.3.3  使用array_search查找
6.4  数组的排序
6.4.1  递增排序
6.4.2  递减排序
6.4.3  数组排序
6.5  数组的拆分与合并
6.5.1  数组的拆分
6.5.2  数组的合并
6.6  全局数组
6.6.1  $_SERVER[]全局数组
6.6.2  $_ENV[]全局数组
6.6.3  $_GET[]和$_POST[]全局数组
6.6.4  $_FILES[]全局数组
6.6.5  $_COOKIE[]和$_SESSION[]全局数组
6.6.6  $_REQUEST[]全局数组
6.7  本章实例
6.8  小结
第7章  字符操作与正则表达式
7.1  理解字符类型
7.2  字符的显示与格式化
7.2.1  字符的显示
7.2.2  字符的格式化
7.3  常用操作
7.3.1  字符串重复操作—str_repeat
7.3.2  字符串查找操作–strstr
7.3.3  字符串替换操作—str_replace
7.3.4  字符串分解操作—str_split
7.3.5  字符串分解成单词—str_word_count
7.3.6  字符串的长度—strlen
7.3.7  获取子字符串–substr
7.4  正则表达式
7.4.1  正则表达式简介
7.4.2  常见的正则表达式元字符
7.5  正则表达式的常用操作
7.5.1  进行正则表达式的匹配preg_match
7.5.2  进行全局正则表达式的匹配preg_match_all
7.5.3  获得与模式匹配的数组单元preg_grep
7.5.4  转义正则表达式字符preg_quote
7.5.5  执行正则表达式的搜索与替换preg_replace
7.5.6  通过回调函数执行正则表达式的搜索与替换preg_replace_callback
7.5.7  用正则表达式进行字符串分割preg_split
7.6  本章实例
7.7  小结
第8章  PHP错误、异常处理与调试
8.1  PHP错误类型
8.1.1  语法错误
8.1.2  语义错误
8.1.3  逻辑错误
8.1.4  注释错误
8.1.5  运行时错误
8.2  错误处理
8.2.1  错误级别
8.2.2  php.ini对错误处理的设置
8.2.3  错误处理
8.3  PHP异常
8.3.1  异常处理原理
8.3.2  异常处理
8.3.3  扩展的异常处理类
8.3.4  异常的传递与重掷
8.4  PHP程序的调试
8.4.1  打开错误报告
8.4.2  使用ECHO进行调试
8.4.3  使用DIE进行调试
8.5  使用ZendStudio进行调试
8.5.1  使用Eclipse开发PHP的优点
8.5.2  Eclipse和ZendStudio的安装
8.5.3  Zend Debugger的安装
8.5.4  使用ZendStudio进行调试
8.6  本章实例
8.5  小结
第9章  面向对象的PHP
9.1  概述
9.1.1  什么是面向对象
9.1.2  面向对象的特征
9.2  类和对象
9.2.1  类的结构及声明
9.2.2  属性和方法的定义
9.2.3  使用构造函数
9.2.4  使用析构函数
9.2.5  类的实例化
9.2.6  类的继承
9.3  类的常量
9.4  访问方法和属性
9.4.1  访问修饰符
9.4.2  静态属性
9.4.3  静态方法
9.4.4  魔术方法
9.5  本章实例
9.6  小结
第10章  继承、多态与接口
10.1  继承
10.1.1  什么是继承
10.1.2  PHP中实现继承的方法
10.1.3  重载
10.1.4  用final关键字对继承和重载进行限制
10.2  多态
10.2.1  什么是多态
10.2.2  多态的应用设计
10.3  接口
10.3.1  接口的概念
10.3.2  接口的实现
10.3.3  接口的继承
10.4  小结
第三篇  应用篇
第11章  文件系统与操作
11.1  目录操作
11.1.1  打开目录
11.1.2  关闭目录
11.1.3  读取目录
11.1.4  建立目录
11.1.5  删除目录
11.1.6  改变目录
11.2  文件操作
11.2.1  打开文件
11.2.2  关闭文件
11.2.3  读取文件
11.2.4  写入文件
11.2.5  删除文件
11.2.6  复制文件
11.2.7  移动文件和重命名文件
11.3  文件的上传与下载
11.3.1  开启上传功能
11.3.2  POST方法上传
11.3.3  同时上传多个文件
11.3.4  文件的下载
11.4  本章实例
11.5  小结
第12章  PHP交互
12.1  表单数据的提交方式
12.1.1  GET方法
12.1.2  POST方法
12.1.3  表单提交方式的区别
12.2  获取表单数据
12.2.1  获取文本域的数据
12.2.2  获取单选按钮的数据
12.2.3  获取复选框的数据
12.2.4  获取下拉框或列表框的数据
12.3  常用表单数据的验证
12.3.1  用户名的验证
12.3.2  密码验证
12.3.3  日期验证
12.3.4  E-mail验证
12.4  URL编码与解码
12.4.1  编码urlencode函数
12.4.2  解码urldecode
12.5  本章实例
12.6  小结
第13章  Cookie与Session
13.1  概述
13.1.1  Cookie
13.1.2  Session
13.2  Cookie操作
13.2.1  设置Cookie
13.2.2  访问Cookie
13.2.3  删除Cookie
13.2.4  Cookie全局数组
13.3  Cookie应用
13.3.1  登录页面
13.3.2  验证页面
13.3.3  欢迎页面
13.4  Session操作
13.4.1  开始使用Session
13.4.2  Session检测与注销
13.4.3  Session全局数组
13.5  Session应用
13.5.1  登录页面
13.5.2  验证页面
13.5.3  欢迎页面
13.5.4  注销页面
13.6  本章实例
13.7  小结
第14章  PHP与AJAX
14.1  AJAX概述
14.1.1  什么是AJAX
14.1.2  工作原理
14.1.3  优点与缺点
14.2  使用AJAX
14.2.1  创建XMLHttpRequest对象
14.2.2  向服务器发送请求
14.2.3  处理服务器响应
14.3  使用POST方式的AJAX
14.3.1  POST方式
14.3.2  POST实例
14.4  第一个AJAX程序—-Hello, Ajax!
14.4.1  浏览器页面发送请求与处理响应
14.4.2  服务器响应
14.5  本章实例
14.5.1  读取服务器文本文件
14.5.2  三级联动下拉框
14.6  小结
第15章  PHP图像处理
15.1  图像库简介
15.1.1  打开GD库
15.1.2  GD库支持的图像格式
15.2  基本的图像处理
15.2.1  创建图像
15.2.2  设置颜色
15.2.3  生成图像与销毁图像
15.2.4  绘制点线
15.2.5  绘制并填充几何图形
15.2.6  输出文字
15.3  图像处理实例
15.3.1  生成验证码图片
15.3.2  生成缩略图
15.4  本章实例
15.5  小结
第16章  PHP邮件处理
16.1  PHP邮件发送配置
16.1.1  SMTP功能的配置
16.1.2  安装SMTP服务器
16.2  使用mail函数发送邮件
16.2.1  mail函数简介
16.2.2  发送HTML格式的邮件
16.2.3  发送带附件的邮件
16.3  本章实例
16.4  小结
第四篇  数据库篇
第17章  MYSQL数据库的安装与操作
17.1  SQL语言概述
17.2  MySQL的安装与配置
17.2.1  下载
17.2.2  安装和配置
17.3      MySQL的启动与停止
17.3.1  启动
17.3.2  停止
17.4  管理数据库
17.4.1  MySQL的登录与退出
17.4.2  创建数据库
17.4.3  删除数据库
17.4.4  选择数据库
17.4.5  备份与恢复
17.5  操作数据表
17.5.1  创建表
17.5.2  修改表
17.5.3  删除表
17.6  数据类型与视图
17.6.1  MYSQL数据类型
17.6.2  视图
17.7  操作数据
17.7.1  查询语句
17.7.2  插入语句
17.7.3  更新语句
17.7.4  删除语句
17.8  使用phpmyadmin管理mysql数据库
17.8.1  phpmyadmin概述
17.8.2  安装与配置
17.8.3  数据库操作
17.8.4  数据表操作
17.8.5  数据增删改
17.8.6  数据查询
17.8.7  数据的导入导出
17.9  小结
第18章  PHP操作数据库
18.1  PHP操作MySQL数据库
18.1.1  连接MySQL数据库
18.1.2  断开与MySQL的连接
18.1.3  选择和使用MySQL数据库
18.1.4  执行MySQL指令
18.1.5  分析结果集
18.2  管理MYSQL数据库中的数据
18.2.1  添加数据
18.2.2  更新数据
18.2.3  删除数据
18.3  获取数据库信息
18.3.1  获取数据库的信息
18.3.2  获取数据表的信息
18.3.3  获取数据表中列的信息
18.4  PHP操作SQL Server数据库
18.4.1  连接和关闭SQL Server数据库
18.4.2  执行SQL语句
18.4.3  获取结果集
18.5  PHP操作Access数据库
18.5.1  连接和关闭Access
18.5.2  执行SQL语句
18.5.3  获取结果集
18.6  本章实例
18.7  小结
第19章  PHP与XML
19.1  XML简介
19.2  使用SimpleXML进行操作
19.2.1  创建SimpleXML对象
19.2.2  读取对象中的XML数据
19.2.3  XML数据的修改
19.2.4  XML数据的存储
19.3  动态创建XML文档
19.4  小结
第五篇  扩展篇
第20章  MVC模式与PHP开发框架
20.1  MVC概述
20.1.1  何谓MVC
20.1.2  MVC的优点
20.1.3  MVC的不足
20.2  PHP框架——Zend Framework
20.2.1  Zend Framework的特性
20.2.2  Zend Framework的目录结构
20.2.3  Zend Framework的安装
20.2.4  引导文件index.php
20.2.5  页面组织
20.2.6  控制器类Controllers
20.2.7  视图文件
20.2.8  布局
20.3  小结
第21章  PHP面向对象高级编程和设计模式
21.1  重载
21.1.1  属性和方法的重载
21.1.2  使用数组语法访问的重载
21.2  设计模式
21.2.1  设计模式简介
21.2.2  单例模式
21.2.3  策略模式
21.2.4  工厂模式
21.2.5  观察者模式
21.2.6  适配器模式
21.3  小结
第22章  PHP缓存与静态化
22.1  为何使用静态机制
22.2  缓存机制及其应用
22.2.1  缓存机制
22.2.2  缓存机制的应用
22.3  静态机制及实现
22.3.1  由模板生成静态页面
22.3.2  由数据库生成静态页面
22.4  小结
第23章  PEAR与PECL
23.1  概述
23.1.1  PEAR简介
23.1.2  PECL简介
23.2  PEAR的安装与使用
23.2.1  PEAR的安装
23.2.2  查看已安装的包
23.2.3  查看PEAR包的详细信息
23.2.4  PEAR包的安装
22.2.5  PEAR包的升级
22.2.6  PEAR包的删除
22.2.7  PEAR包的使用
23.3  PECL扩展库
23.3.1  下载安装PECL扩展库
23.3.2  使用PEAR编译共享PECL扩展库
23.4  小结
第六篇  实例篇
第24章  留言板
24.1  留言板简介
24.2  数据库设计
24.3  项目实施
24.3.1  系统配置文件
24.3.2  数据库连接
24.3.3  添加留言模块
24.3.4  查看留言模块
24.3.5  显示留言详细内容
24.3.6  登录模块
24.3.7  回复留言模块
24.3.8  删除留言模块
24.3.9  审核留言模块
24.5  小结
第25章  投票系统
25.1  投票系统简介
25.2  数据库设计
25.3  项目实施
25.3.1  系统配置文件
25.3.2  数据库操作类
25.4  投票模块
25.4.1  投票页面
25.4.2  投票处理
25.4.3  投票统计
25. 5  登录模块
25.5.1  登录页面
25.5.2  登录处理
25.5.3  退出模块
25.6  投票主题模块
25.6.1  添加主题
25.6.2  修改投票主题
25.6.3  删除投票主题
25. 7  参数配置模块
25.7.1  添加投票选项
25.7.2  修改投票选项
25.7.3  删除投票选项
25.8  小结
第26章  基于Zend Framework的内容管理系统
26.1  内容管理系统简介
26.2  数据库设计
26.3  项目实施
26.3.1  系统配置
26.3.2  引导文件bootstrap.php
26.3.3  系统初始化
26.3.4  系统默认布局
26.3.5  系统异常处理
26.3.6  系统参数配置
26.4  用户模块
26.4.1  系统开关
26.4.2  注册
26.4.3  登录
26.4.4  退出
26.5  文章模块
26.5.1  管理控制器初始化
26.5.2  添加文章
26.5.3  管理文章
26.5.4  修改文章
26.5.5  审核文章
26.5.6  删除文章
26.5.7  显示文章列表
26.5.8  显示文章内容
26.6  文章类别管理
26.6.1  新增类别
26.6.2  修改类别
26.6.3  删除类别
26.7  文章模板管理
26.7.1  新增模板
26.7.2  修改模板
26.7.3  删除模板
26.5  小结

PHP从入门到精通, PHP教程 ,

书印刷出来了

2009年8月6日

今天接到出版社的通知,我的书—-《PHP从入门到精通》已经印刷完毕,即将上市。

上图为先。

PHP从入门到精通

所属类别
科技图书 >> 计算机 >> 语言及程序设计

作者:陈超 等编著
丛书名:程序员书库
出版日期:2009年8月 书号:978-7-122-05978-9
开本:16 装帧:平 版次:1版1次 页数:432页

以下是这本书的内容简介

本书由浅入深、循序渐进地向读者介绍了Web服务器原理、Web应用程序技术和PHP 5的知识点。每一章在讲解了PHP 5的知识点后,都配有具体的实例,带领读者一步步走进PHP 5的殿堂。
本书共分为六篇26章。从Web服务器基本原理开始,首先讲解PHP应用开发环境的安装与配置、PHP 5语言的编程基础知识及PHP 5面向对象的知识,然后介绍PHP的相关应用,包括PHP操作文件系统、与表单的交互等,再介绍了PHP 5与数据库交互操作知识及PHP 5的一些高级应用,最后通过3个实例,详细讲解了PHP 5在实际开发项目中的应用。
本书适合广大Web网站开发人员、网站管理维护人员和大专院校学生阅读,尤其是有一定Internet/Intranet编程经验的开发人员。

这本书呢,对于想快速入门的朋友应该是一本不错的教程(现在是广告时间:))。因为它基本记录我的PHP历程,希望能够对各位朋友有所帮助。

PHP教程 , , , ,

curl指南

2009年7月3日

上一个终端项目本周算是完全结束后,趁着还有点时间,于是将之前未完成的事情接着做。在此需要在程序中模拟客户端,需要用到curl库。G了一下,觉得这个不错,特记录于此。

目前为止最全的CURL中文说明了,学PHP的要好好掌握.有很多的参数.大部份都很有用.真正掌握了它和正则,一定就是个采集高手了.

PHP中的CURL函数库(Client URL Library Function)

curl_close – 关闭一个curl会话
curl_copy_handle – 拷贝一个curl连接资源的所有内容和参数
curl_errno – 返回一个包含当前会话错误信息的数字编号
curl_error – 返回一个包含当前会话错误信息的字符串
curl_exec – 执行一个curl会话
curl_getinfo – 获取一个curl连接资源句柄的信息
curl_init – 初始化一个curl会话
curl_multi_add_handle – 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close – 关闭一个批处理句柄资源
curl_multi_exec – 解析一个curl批处理句柄
curl_multi_getcontent – 返回获取的输出的文本流
curl_multi_info_read – 获取当前解析的curl的相关传输信息
curl_multi_init – 初始化一个curl批处理句柄资源
curl_multi_remove_handle – 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select – Get all the sockets associated with the cURL extension, which can then be “selected”
curl_setopt_array – 以数组的形式为一个curl设置会话参数
curl_setopt – 为一个curl设置会话参数
curl_version – 获取curl相关的版本信息

curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。

<?php
$ch = curl_init(“http://www.baidu.com/”);
curl_exec($ch);
curl_close($ch);
?>

curl_version()函数的作用是获取curl相关的版本信息,curl_version()函数有一个参数,不清楚是做什么的

可设置的参数有:

CURLOPT_AUTOREFERER
自动设置header中的referer信息

CURLOPT_BINARYTRANSFER
在启用CURLOPT_RETURNTRANSFER时候将获取数据返回

CURLOPT_COOKIESESSION
启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下curl会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。

CURLOPT_CRLF
启用时将Unix的换行符转换成回车换行符。

CURLOPT_DNS_USE_GLOBAL_CACHE
启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认为true。

CURLOPT_FAILONERROR
显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息

CURLOPT_FILETIME
启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。

CURLOPT_FOLLOWLOCATION
启用时会将服务器服务器返回的”Location:”放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。

CURLOPT_FORBID_REUSE
在完成交互以后强迫断开连接,不能重用。

CURLOPT_FRESH_CONNECT
强制获取一个新的连接,替代缓存中的连接。

CURLOPT_FTP_USE_EPRT
TRUE to use EPRT (and LPRT) when doing active FTP downloads. Use FALSE to disable EPRT and LPRT and use PORT only.
Added in PHP 5.0.0.

CURLOPT_FTP_USE_EPSV
TRUE to first try an EPSV command for FTP transfers before reverting back to PASV. Set to FALSE to disable EPSV.

CURLOPT_FTPAPPEND
TRUE to append to the remote file instead of overwriting it.

CURLOPT_FTPASCII
An alias of CURLOPT_TRANSFERTEXT. Use that instead.

CURLOPT_FTPLISTONLY
TRUE to only list the names of an FTP directory.

CURLOPT_HEADER
启用时会将头文件的信息作为数据流输出。

CURLOPT_HTTPGET
启用时会设置HTTP的method为GET,因为GET是默认是,所以只在被修改的情况下使用。

CURLOPT_HTTPPROXYTUNNEL
启用时会通过HTTP代理来传输。

CURLOPT_MUTE
讲curl函数中所有修改过的参数恢复默认值。

CURLOPT_NETRC
在连接建立以后,访问~/.netrc文件获取用户名和密码信息连接远程站点。

CURLOPT_NOBODY
启用时将不对HTML中的body部分进行输出。

CURLOPT_NOPROGRESS
启用时关闭curl传输的进度条,此项的默认设置为true

CURLOPT_NOSIGNAL
启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认打开。

CURLOPT_POST
启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

CURLOPT_PUT
启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE

CURLOPT_RETURNTRANSFER
讲curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

CURLOPT_SSL_VERIFYPEER
FALSE to stop cURL from verifying the peer’s certificate. Alternate certificates to verify against can be specified with the CURLOPT_CAINFO option or a certificate directory can be specified with the CURLOPT_CAPATH option. CURLOPT_SSL_VERIFYHOST may also need to be TRUE or FALSE if CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2). TRUE by default as of cURL 7.10. Default bundle installed as of cURL 7.10.

CURLOPT_TRANSFERTEXT
TRUE to use ASCII mode for FTP transfers. For LDAP, it retrieves data in plain text instead of HTML. On Windows systems, it will not set STDOUT to binary mode.

CURLOPT_UNRESTRICTED_AUTH
在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。

CURLOPT_UPLOAD
启用时允许文件传输

CURLOPT_VERBOSE
启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中

CURLOPT_BUFFERSIZE
每次获取的数据中读入缓存的大小,这个值每次都会被填满。

CURLOPT_CLOSEPOLICY
不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个,但是curl暂时还不支持。.

CURLOPT_CONNECTTIMEOUT
在发起连接前等待的时间,如果设置为0,则不等待。

CURLOPT_DNS_CACHE_TIMEOUT
设置在内存中保存DNS信息的时间,默认为120秒。

CURLOPT_FTPSSLAUTH
The FTP authentication method (when is activated): CURLFTPAUTH_SSL (try SSL first), CURLFTPAUTH_TLS (try TLS first), or CURLFTPAUTH_DEFAULT (let cURL decide).

CURLOPT_HTTP_VERSION
设置curl使用的HTTP协议,CURL_HTTP_VERSION_NONE(让curl自己判断),CURL_HTTP_VERSION_1_0(HTTP/1.0),CURL_HTTP_VERSION_1_1(HTTP/1.1)

CURLOPT_HTTPAUTH
使用的HTTP验证方法,可选的值有:CURLAUTH_BASIC,CURLAUTH_DIGEST,CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM,CURLAUTH_ANY,CURLAUTH_ANYSAFE,可以使用”|”操作符分隔多个值,curl让服务器选择一个支持最好的值,CURLAUTH_ANY等价于CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM,CURLAUTH_ANYSAFE等价于CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM

CURLOPT_INFILESIZE
设定上传文件的大小

CURLOPT_LOW_SPEED_LIMIT
当传输速度小于CURLOPT_LOW_SPEED_LIMIT时,PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。

CURLOPT_LOW_SPEED_TIME
The number of seconds the transfer should be below CURLOPT_LOW_SPEED_LIMIT for PHP to consider the transfer too slow and abort.
当传输速度小于CURLOPT_LOW_SPEED_LIMIT时,PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。

CURLOPT_MAXCONNECTS
允许的最大连接数量,超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接

CURLOPT_MAXREDIRS
指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。

CURLOPT_PORT
一个可选的用来指定连接端口的量

CURLOPT_PROXYAUTH
The HTTP authentication method(s) to use for the proxy connection. Use the same bitmasks as described in CURLOPT_HTTPAUTH. For proxy authentication, only CURLAUTH_BASIC and CURLAUTH_NTLM are currently supported.

CURLOPT_PROXYPORT
The port number of the proxy to connect to. This port number can also be set in CURLOPT_PROXY.

CURLOPT_PROXYTYPE
Either CURLPROXY_HTTP (default) or CURLPROXY_SOCKS5.

CURLOPT_RESUME_FROM
在恢复传输时传递一个字节偏移量(用来断点续传)

CURLOPT_SSL_VERIFYHOST
1 to check the existence of a common name in the SSL peer certificate.
2 to check the existence of a common name and also verify that it matches the hostname provided.

CURLOPT_SSLVERSION
The SSL version (2 or 3) to use. By default PHP will try to determine this itself, although in some cases this must be set manually.

CURLOPT_TIMECONDITION
如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过,则使用CURL_TIMECOND_IFMODSINCE返回页面,如果没有被修改过,并且CURLOPT_HEADER为true,则返回一个”304 Not Modified”的header,CURLOPT_HEADER为false,则使用CURL_TIMECOND_ISUNMODSINCE,默认值为 CURL_TIMECOND_IFMODSINCE

CURLOPT_TIMEOUT
设置curl允许执行的最长秒数

CURLOPT_TIMEVALUE
设置一个CURLOPT_TIMECONDITION使用的时间戳,在默认状态下使用的是CURL_TIMECOND_IFMODSINCE

CURLOPT_CAINFO
The name of a file holding one or more certificates to verify the peer with. This only makes sense when used in combination with CURLOPT_SSL_VERIFYPEER.

CURLOPT_CAPATH
A directory that holds multiple CA certificates. Use this option alongside CURLOPT_SSL_VERIFYPEER.

CURLOPT_COOKIE
设定HTTP请求中”Set-Cookie:”部分的内容。

CURLOPT_COOKIEFILE
包含cookie信息的文件名称,这个cookie文件可以是Netscape格式或者HTTP风格的header信息。

CURLOPT_COOKIEJAR
连接关闭以后,存放cookie信息的文件名称

CURLOPT_CUSTOMREQUEST
A custom request method to use instead of “GET” or “HEAD” when doing a HTTP request. This is useful for doing “DELETE” or other, more obscure HTTP requests. Valid values are things like “GET”, “POST”, “CONNECT” and so on; i.e. Do not enter a whole HTTP request line here. For instance, entering “GET /index.html HTTP/1.0\r\n\r\n” would be incorrect.
Note: Don’t do this without making sure the server supports the custom request method first.

CURLOPT_EGBSOCKET
Like CURLOPT_RANDOM_FILE, except a filename to an Entropy Gathering Daemon socket.

CURLOPT_ENCODING
header中”Accept-Encoding: “部分的内容,支持的编码格式为:”identity”,”deflate”,”gzip”。如果设置为空字符串,则表示支持所有的编码格式

CURLOPT_FTPPORT
The value which will be used to get the IP address to use for the FTP “POST” instruction. The “POST” instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a hostname, a network interface name (under Unix), or just a plain ‘-’ to use the systems default IP address.

CURLOPT_INTERFACE
在外部网络接口中使用的名称,可以是一个接口名,IP或者主机名。

CURLOPT_KRB4LEVEL
KRB4(Kerberos 4)安全级别的设置,可以是一下几个值之一:”clear”,”safe”,”confidential”,”private”。默认的值为 “private”,设置为null的时候表示禁用KRB4,现在KRB4安全仅能在FTP传输中使用。

CURLOPT_POSTFIELDS
在HTTP中的”POST”操作。如果要传送一个文件,需要一个@开头的文件名

CURLOPT_PROXY
设置通过的HTTP代理服务器

CURLOPT_PROXYUSERPWD
连接到代理服务器的,格式为”[username]:[password]“的用户名和密码。

CURLOPT_RANDOM_FILE
设定存放SSL用到的随机数种子的文件名称

CURLOPT_RANGE
设置HTTP传输范围,可以用”X-Y”的形式设置一个传输区间,如果有多个HTTP传输,则使用逗号分隔多个值,形如:”X-Y,N-M”。

CURLOPT_REFERER
设置header中”Referer: ” 部分的值。

CURLOPT_SSL_CIPHER_LIST
A list of ciphers to use for SSL. For example, RC4-SHA and TLSv1 are valid cipher lists.

CURLOPT_SSLCERT
传递一个包含PEM格式证书的字符串。

CURLOPT_SSLCERTPASSWD
传递一个包含使用CURLOPT_SSLCERT证书必需的密码。

CURLOPT_SSLCERTTYPE
The format of the certificate. Supported formats are “PEM” (default), “DER”, and “ENG”.

CURLOPT_SSLENGINE
The identifier for the crypto engine of the private SSL key specified in CURLOPT_SSLKEY.

CURLOPT_SSLENGINE_DEFAULT
The identifier for the crypto engine used for asymmetric crypto operations.

CURLOPT_SSLKEY
The name of a file containing a private SSL key.

CURLOPT_SSLKEYPASSWD
The secret password needed to use the private SSL key specified in CURLOPT_SSLKEY.
Note: Since this option contains a sensitive password, remember to keep the PHP script it is contained within safe.

CURLOPT_SSLKEYTYPE
The key type of the private SSL key specified in CURLOPT_SSLKEY. Supported key types are “PEM” (default), “DER”, and “ENG”.

CURLOPT_URL
需要获取的URL地址,也可以在PHP的curl_init()函数中设置。

CURLOPT_USERAGENT
在HTTP请求中包含一个”user-agent”头的字符串。

CURLOPT_USERPWD
传递一个连接中需要的用户名和密码,格式为:”[username]:[password]“。

CURLOPT_HTTP200ALIASES
设置不再以error的形式来处理HTTP 200的响应,格式为一个数组。

CURLOPT_HTTPHEADER
设置一个header中传输内容的数组。

CURLOPT_POSTQUOTE
An array of FTP commands to execute on the server after the FTP request has been performed.

CURLOPT_QUOTE
An array of FTP commands to execute on the server prior to the FTP request.

CURLOPT_FILE
设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。

CURLOPT_INFILE
在上传文件的时候需要读取的文件地址,值是一个资源类型。

CURLOPT_STDERR
设置一个错误输出地址,值是一个资源类型,取代默认的STDERR。

CURLOPT_WRITEHEADER
设置header部分内容的写入的文件地址,值是一个资源类型。

CURLOPT_HEADERFUNCTION
设置一个回调函数,这个函数有两个参数,第一个是curl的资源句柄,第二个是输出的header数据。header数据的输出必须依赖这个函数,返回已写入的数据大小。

CURLOPT_PASSWDFUNCTION
设置一个回调函数,有三个参数,第一个是curl的资源句柄,第二个是一个密码提示符,第三个参数是密码长度允许的最大值。返回密码的值。

CURLOPT_READFUNCTION
设置一个回调函数,有两个参数,第一个是curl的资源句柄,第二个是读取到的数据。数据读取必须依赖这个函数。返回读取数据的大小,比如0或者EOF。

CURLOPT_WRITEFUNCTION
设置一个回调函数,有两个参数,第一个是curl的资源句柄,第二个是写入的数据。数据写入必须依赖这个函数。返回精确的已写入数据的大小

curl_copy_handle()函数的作用是拷贝一个curl连接资源的所有内容和参数

<?php
$ch = curl_init(“http://www.baidu.com/”);
$another = curl_copy_handle($ch);
curl_exec($another);
curl_close($another);
?>

curl_exec($another);
curl_close($another);
?>

curl_error()函数的作用是返回一个包含当前会话错误信息的字符串。
curl_errno()函数的作用是返回一个包含当前会话错误信息的数字编号。

curl_multi_init()函数的作用是初始化一个curl批处理句柄资源。
curl_multi_add_handle()函数的作用是向curl批处理会话中添加单独的curl句柄资源。curl_multi_add_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。
curl_multi_exec()函数的作用是解析一个curl批处理句柄,curl_multi_exec()函数有两个参数,第一个参数表示一个批处理句柄资源,第二个参数是一个引用值的参数,表示剩余需要处理的单个的curl句柄资源数量。
curl_multi_remove_handle()函数表示移除curl批处理句柄资源中的某个句柄资源, curl_multi_remove_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。
curl_multi_close()函数的作用是关闭一个批处理句柄资源。

<?php
$ch1 = curl_init();
$ch2 = curl_init();
curl_setopt($ch1, CURLOPT_URL, “http://www.baidu.com/”);
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, “http://www.google.com/”);
curl_setopt($ch2, CURLOPT_HEADER, 0);
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
do {
curl_multi_exec($mh,$flag);
} while ($flag > 0);
curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
?>

curl_multi_getcontent()函数的作用是在设置了CURLOPT_RETURNTRANSFER的情况下,返回获取的输出的文本流。

curl_multi_info_read()函数的作用是获取当前解析的curl的相关传输信息。
curl_multi_select()
Get all the sockets associated with the cURL extension, which can then be “selected”

PHP教程 ,

在Debian中安装http扩展

2009年6月29日

由于在项目中需要用到http协议的相关函数,而这些函数PHP默认是没有安装的。http模块已移到PECL扩展库中,因此安装时就需要采用PECL方式进行安装:
pecl install pecl_http

但是,通常情况下是不能正确安装的。因为该扩展库也依赖于其它库,因此在需要安装http扩展模块时按以下操作进行,基本可保证能够正常安装并使用。

apt-get install php5-dev (to enable pecl command)
apt-get install libcurl3 (to get curl support)
apt-get install libmagic
apt-get install libcurl4-gnutls-dev (to enable http_post_fields function)

(注意:上面的括号及括号中的内容在安装时不能输入,那是对每一条命令的功能的一个描述)以上四个都能够正常安装后,再使用以下命令进行安装pecl_http模块。

pecl install pecl_http

此时应该不会报错了,一路enter下去即可,安装完成以后将提示需要在PHP配置文件php.ini中添加如下语句:
extension=http.so

具体这个http.so文件在哪里呢?这个文件在安装pecl_http时自动将其安装到了PHP的默认扩展目录    /usr/lib/php5/20060613+lfs中。若在安装时没有自动安装至该目录,可将安装后生成的http.so文件拷贝到该目录中。

在PHP配置文件php.ini中添加了extension=http.so后,重新启动Apache服务器。此时采用phpinfo()函数将可以看到http模块。

注意:对于想要在命令行使用该扩展,需要在cli下的php.ini中添加该语句。这是因为cli与web方式所需要的PHP配置php.ini各不相同。

以上安装将是在Debian lenny上通过,其它环境的安装应该很类似,读者可参考本文自行安装。

Linux, PHP教程 , , ,