本文章来给大家介绍在php5中public,private,protected他们三者的区别,他们三个都是用于类中,但是属性完全不同。
public: 公有属性或方法
在子类中可以通过self::var 或self::method 来调用 ,可以通过parent::method来调用父类中的方法,但不能调用公有属性.
在实例中可以通过$obj->var或self::method 来调用
protected: 受保护类型
在子类中可以通过self::var 或self::method调用, 可以通过parent::method来调用父类中的方法
在实例中不能通过$obj->var 来调用 protected类型的方法或属性
private: 私有类型
该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法
2.self 和 parent 的区别
a).在子类中常用到这两个对象。他们的主要区别在于self可以调用父类中的公有或受保护的属性,但parent不可以调用
b).self:: 它表示当前类的静态成员(方法和属性) 与 $this 不同,$this是指当前对象
例
代码如下 |
复制代码 |
<?php
class BaseClass {
public $public = 'public';
private $private = 'private';
protected $protected = 'protected';
function __construct(){
}
function print_var(){
print $this->public;echo '<br />';
print $this->private; echo '<br />';
print $this->protected; echo '<br />';
}
}
class Subclass extends BaseClass {
// public $public = 'public2';
protected $protected ='protected2';
function __construct(){
echo $this->protected;//可以访问,因为类中定义为受保护的,所以在本类或子类中可以,子类中还可以重复付值
echo '<br />';
echo $this->private;//error 因为是私有的只有在定义她的类baseclass中可以用
}
}
$obj1 = new BaseClass();
$obj1->print_var();
//echo $obj1->protected;//error 因为是受保护的,只有在本类内部或子类父类中可以调用
//echo $obj1->private;//error 同上私有的,只有在本类内调用
echo $obj1->public;
echo "<hr />";
$obj2 = new Subclass();
echo '<br />';
echo $obj2->public;echo '<br />';
echo $obj2->protected;
//echo $obj2->private;//error
//echo $obj2->protected;//error
?>
|
总结
public 表示全局,类内部外部子类都可以访问;
private表示私有的,只有本类内部可以使用;
protected表示受保护的,只有本类或子类或父类中可以访问;
session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,这样就是为了多了不会产生混乱了,并且session中同一浏览器同一站点只能有一个session_id,下面我们一起来看看关于session使用方法。
如何使用session
凡是与session有关的,之前必须调用函数session_start();
为session付值很简单,如:
程序代码
代码如下 |
复制代码 |
<?php
Session_start();
$Name = "这是一个Session例子";
Session_Register("Name");//注意,不要写成:Session_Register("$Name");
Echo $_SESSION["Name"];
//之后$_SESSION["Name"]为"这是一个Session例子"
?>
|
在php4.2之后,可以为session直接付值:
程序代码
代码如下 |
复制代码 |
<?PHP
Session_Start();
$_SESSION["name"]="value";
?>
|
取消session可以这样:
程序代码
代码如下 |
复制代码 |
<?php
session_start();
session_unset();
session_destroy();
?>
|
取消某个session变量在php4.2以上还有BUG.
读取 session
PHP 内置的 $_SESSION 变量可以很方便的访问设置的 session 变量。
例子:
代码如下 |
复制代码 |
<?php
session_start();
echo "登记的用户名为:".$_SESSION["username"]; //输出 登记的用户名为:nostop
?> |
检查变量是否被登记为会话变量
session_is_registered
语法:boobean session_is_registered(string name);
这个函数可检查当前的session之中是否已有指定的变量注册,参数name就是要检查的变量名。成功则返回逻辑值true。
例子:
代码如下 |
复制代码 |
<?php
session_start();
if(!session_is_registered("gender")){ //判断当前会话变量是否注册
session_register("gender"); //注册变量
}
$gender="女";
echo $_SESSION['gender']; //女
?> |
存取当前会话名称
session_name
语法:boolean session_name(string [name]);
这个函数可取得或重新设置当前session的名称。若无参数name则表示获取当前session名称,加上参数则表示将session名称设为参数name。
例子:
代码如下 |
复制代码 |
<?php
$sessionName = session_name(); //取得当前 Session 名,默认为 PHPSESSID
$sessionID = $_GET[$sessionName]; //取得 Session ID
session_id($sessionID); //使用 session_id() 设置获得的 Session ID
?>
|
存取当前会话标识号
session_id
语法:boolean session_id(string [id]);
这个函数可取得或重新设置当前存放session的标识号。若无参数id则表示只获取当前session的标识号,加上参数则表示将session的标识号设成新指定的id。
设置 Session 的生存期
代码如下 |
复制代码 |
setcookie:向客户端发送一个 HTTP cookie。
<?php
session_start
// 保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
|
session_set_cookie_params:设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用。
如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。
代码如下 |
复制代码 |
// 保存一天
<?php
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_session["admin"] = true;
?>
|
设置 Session 文件的保存路径
session_save_path() :必须在 session_start() 函数调用之前调用。
代码如下 |
复制代码 |
<?php
// 设置一个存放目录
$savePath = "./session_save_dir/";
// 保存一天
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
$_session["admin"] = true;
?>
<?php
session_start(); //启动Session
$username='nostop';
session_register('username'); //注册一个名为username变量
echo '登记的用户:'.$_SESSION['username']; //登记的用户:nostop 读取Session变量
$_SESSION['age']=23; //声明一个名为age的变量,并赋值
echo '年龄:'.$_SESSION['age']; //年龄:23
session_unregister('username'); //注销Session变量
echo $_SESSION['username']; //空
echo $_SESSION['age'];//23
unset($_SESSION['age']); //注销Session变量
echo '登记的用户:'.$_SESSION['username']; //空
echo '年龄:'.$_SESSION['age']; //空
?>
|
注意:
1:在调用Session_Start()之前不能有任何输出.例如下面是错误的.
1行
2行 <?PHP
3行 Session_Start();//之前在第一行已经有输出
4行 .....
5行 ?>
==========================================
提示1:
凡是出现"........headers already sent..........",就是Session_Start()之前向浏览器输出信息.
去掉输出就正常,(COOKIE也会出现这种错误,错误原因一样)
提示2:
如果你的Session_Start()放在循环语句里,并且很难确定之前哪里向浏览器输出信息,可以用下面这种方法:
1行 <?PHP Ob_Start(); ?>
........这里是你的程序......
2:这是什么错误
Warning: session_start(): open(/tmpsess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....
因为你没有指定session文件的存放路径.
解决方法:
(1)在c盘建立文件夹tmp
(2)打开php.ini,找到session.save_path,修改为session.save_path= "c:/tmp"
本文章来为php初学者介绍在php配置好之后连接mysql提示Call to undefined function \'mysql_connect()的解决办法。
先来按书上测试一下php连接mysql
代码如下 |
复制代码 |
<?php
$link=mysql_connect('localhost','root','123456');
if(!$link) echo "失败!";
else echo "成功!";
mysql_close();
?>
|
运行代码出现:
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,去掉前面的";"
php中的curl我前面就讲过一篇这这样的文件,下面我来把我学习php curl使用心得给大家分享一下,希望这些对大家会有所帮助。
这两天做的工作使用到了curl
当要请求的url和自己不在一台server上面,不能直接访问
这种情况下使用curl是最好不过了,模拟post请求做一些事,简单方便
下面记录一下在使用过程中的积累
代码如下 |
复制代码 |
/*
远程post请求
*/
function getRemoteUrl($get_url) {
$curl = curl_init();#启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $get_url);#设置一个Url
curl_setopt($curl, CURLOPT_POST, true);#发送一个常规的Post请求
curl_setopt($curl, CURLOPT_TIMEOUT, 30);#设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0);#显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);#获取的信息以文件流的形式返回
$return = curl_exec($curl); #执行操作
if (curl_errno($curl)) {
return false;
}
curl_close($curl); #关闭CURL会话
return $return;
}
function getCurlData($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
|
总结一下使用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中 cURL函数有一组相关函数,它是一个非常不错的函数了,我们经常用它来模仿各种登录与采集工作,下面我来给各位介绍CURL函数入门吧。
cURL简介
cURL是一个利用URL语法规定来传输数据和文件的工具,支持很多种协议如HTTP、FTP、TELNET等。PHP也支持 cURL 库。
假如我们要获取某个网页的内容,我们可能会使用下面这几种方法:
代码如下 |
复制代码 |
<?php
// 把整个文件读入一个字符串中
$str = file_get_contents("http://www.111cn.net");
// 把整个文件读入一个数组中
$arr = file("http://www.111cn.net");
// 读入一个文件并写入到输出缓冲
$out = readfile("http://www.111cn.net");
?>
|
这几种做法相当简单,但缺乏灵活性和有效的错误处理。而且他们无法完成一些高难度动作,比如处理coockies、验证、表单提交、文件上传等等。
cURL简例
下面给出一段简单的代码,从其中你可以学习到使用cURL的大概步骤,php cURL入门教程。
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. 执行并获取返回的内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl资源
curl_close($ch);
// 输出获得的源代码
echo $output;
?>
|
关于第二步的 curl_setopt() 是最为重要的,有一长串cURL参数可供设置,它们能指定URL请求的各个细节。
获取信息
这是另一个可选的设置项,能够在cURL执行后获取这一请求的有关信息:
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 获取 cURL 信息 并输出
$info = curl_getinfo($ch);
echo '获取 '. $info['url'] . ' 耗时 '. $info['total_time'] . '秒';
// 5. 释放curl句柄
curl_close($ch);
?>
|
返回的数组中包括了以下信息:
"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
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 待 post 的数据
$post_data = array (
"hyh" => "man",
"xlp" => "woman",
"love" => "yes"
);
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); // 这里设置为post方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 添加准备post的数据
// 3. 执行并获取返回内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl句柄
curl_close($ch);
// 输出内容
echo $output;
?>
|
新建 to.php
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
echo "从 from.php POST数据到 to.php 成功!以下为 to.php 返回的数据:<br><br>";
print_r($_POST);
echo "<br><br>I'm come from http://www.111cn.net"
?>
|
文件上传
上传文件和前面的POST十分相似,因为所有的文件上传表单都是通过POST方法提交的。
新建 from.php
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 待 post 的数据
$post_data = array (
"hyh" => "man",
"upload" => "@C:/test.zip" // 要上传的本地文件地址
);
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); // 这里设置为post方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 添加准备post的数据
// 3. 执行并获取返回内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl资源
curl_close($ch);
// 输出内容
echo $output;
?>
|
新建 to.php:
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
print_r($_FILES);
?>
|
如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加上@符号。
另一些有用的cURL范例
HTTP认证
如果某个URL请求需要基于 HTTP 的身份验证,你可以使用下面的代码:
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // 发送用户名和密码
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 你可以允许其重定向
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); // 让 cURL 在重定向后,也能发送用户名和密码
// 3. 执行并获取返回内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl句柄
curl_close($ch);
?>
|
FTP上传
PHP 自带有 FTP 类库,但你也能用 cURL,也可以参考这篇文章:php使用cURL来实现ftp上传
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 开一个文件指针
$file = fopen("/path/to/file", "r");
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "ftp://username:password@3aj.cn:21/path/to/new/file");
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);
// 3. 执行并获取返回内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl句柄
curl_close($ch);
?>
|
你可以用代理发起cURL请求:
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080'); // 指定代理地址
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:pass'); // 如果需要的话,提供用户名和密码
// 3. 执行并获取返回内容
$output = curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl句柄
curl_close($ch);
?>
|
回调函数
可以在一个URL请求过程中,让cURL调用某指定的回调函数。例如,在内容或者响应下载的过程中立刻开始利用数据,而不用等到完全下载完。
代码如下 |
复制代码 |
<?php
header("Content-type: text/html; charset=utf-8");
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_function");
// 3. 执行并获取返回内容
curl_exec($ch);
// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// 5. 释放curl句柄
curl_close($ch);
// 回调函数
function progress_function($ch, $str) {
echo $str;
return strlen($str);
}
?>
|
这个回调函数必须返回字串的长度,不然此功能将无法正常使用,在URL响应接收的过程中,只要收到一个数据包,这个函数就会被调用。
讲到了半天我们再来一个高级实用点的功能cURL来实现ftp上传
web服务器的上传限制:
php的默认上传限制为2M,如果你要上传超过2M的文件的话,你必须修改你的PHP配置 或者 用下面的代码建立一个 .htaceess文件。
代码如下 |
复制代码 |
php_value upload_max_filesize 16M
php_value post_max_size 20M
|
这里设置最大的文件上传限制为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">
<div>
<label for="upload">Select file</label>
<input name="upload" type="file" />
<input type="submit" name="Submit" value="Upload" />
</div>
</form>
|
这个表单页面比较简单,仅仅是拥有一个文件上传的功能。
然后我们需要下面的php代码来接收上传过来的文件,使用 cURL 打开一个文件流并传送到远程ftp服务器上去。
代码如下 |
复制代码 |
if (isset($_POST['Submit'])) {
if (!empty($_FILES['upload']['name'])) {
$ch = curl_init();
$localfile = $_FILES['upload']['tmp_name'];
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, 'ftp://username:password@3aj.cn/'.$_FILES['upload']['name']);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec($ch);
$error_no = curl_errno($ch);
curl_close($ch);
if ($error_no == 0) {
$error = 'File uploaded succesfully.';
} else {
$error = 'File upload error.';
echo "i come from ";
}
} else {
$error = 'Please select a file.';
}
}
|
当用户选择了并上传了一个文件,文件先保存在web服务器上,我们使用 fopen 打开这个临时文件并初始一个cURL会话,在发送的url中,把ftp的账号和密码填上,然后再设置cURL的其他必备参数,即可。如果返回的错误数量为0,那么文件就上传成功了。
小结
今天我们一起学习了cURL库的强大功能和灵活的扩展性 原文整理自:3a教程网
标签:[!--infotagslink--]