1.PHP
1.PHP1.PHP
1.PHP的配置文件
的配置文件的配置文件
的配置文件
php的配置文件函数 @ini_set @ini_get
php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就
四个函数:ini_get
ini_getini_get
ini_get、ini_set、ini_get
ini_getini_get
ini_get_all、ini_restore。个人感觉最有用的
就是ini_set和ini_get
ini_getini_get
ini_get。
* ini_get
ini_getini_get
ini_get():获取配置文件的选项值
这个函数相信很多人都使过,就是获取配置文件中某一个选项的值,如果是true
值就返回1,如果是false值就返回0,字符串就返回字符串。
比如手册中的例子:
/*
/*/*
/*
Our php.ini c
Our php.ini cOur php.ini c
Our php.ini contains the following settings:
ontains the following settings:ontains the following settings:
ontains the following settings:
display_errors = On
display_errors = Ondisplay_errors = On
display_errors = On
register_globals = Off
register_globals = Offregister_globals = Off
register_globals = Off
post_max_size = 8M
post_max_size = 8Mpost_max_size = 8M
post_max_size = 8M
*/
*/*/
*/
echo 'display_errors = ' . ini_get
ini_getini_get
ini_get('display_errors') . "\n"; //显示错
误是否打开
echo 'register_globals = ' . ini_get
ini_getini_get
ini_get('register_globals') . "\n";
//全局变量是否打开
echo 'post_max_size = ' . ini_get
ini_getini_get
ini_get('post_max_size') . "\n";
//最多能提交的文件大小
echo 'post_max_size+1 = ' . (ini_get
ini_getini_get
ini_get('post_max_size')+1) . "\n";
?>
输出:
display_errors = 1
register_globals = 0 post_max_size = 8M
post_max_size+1 = 9
这个函数主要是为了获取配置文件,可以方便你很多操作。比如你想操作字符串
过滤,但是又不清楚magic_quotes_gpc有没有打开,所以你就可以这样写一个
函数:
/*
/* /*
/* 字符串过滤函数
字符串过滤函数字符串过滤函数
字符串过滤函数
*/
*/*/
*/
function stringFilter($str)
{
if (ini_get
ini_getini_get
ini_get('magic_quotes_gpc)')
{
return $str;
}
else
{
return addslashes($str);
}
}
当然,如果你无法知道你的全局变量是否打开,也可以定制这样的函数:
/* 变量检测函数 */
function getGetVar($var)
{
if (ini_set('register_gobals')) {
return $var;
}
Else
{ return $_GET['var'];
}
}
当然,你可以做很多用途,自己慢慢体会。
* ini_set函数:设置php.ini中的某些变量值
这个函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也
失效。不是所有的选项都能被改函数设置的。具体那些值能够设置,可以查看手
册中的列表。
就是能够设置php.ini中的选项值比如,display_error选项关闭了,但是你要
显示程序中的错误信息,方便你调试程序,那么就可以使用这个函数:
ini_set("display_errors", "On");
那么在你这个页面的程序都会显示错误信息了,而且你还可以使用
error_reporting来设置显示的错误信息级别。
如果你需要增加脚本执行时间,那么可以设置:
ini_set("max_execution_time", "180");
那么脚本执行时间就由默认的30秒变为180秒,当然,你也可以使用
set_time_limit()来设置。
其实你把ini_set和ini_get
ini_getini_get
ini_get结合使的话,非常好。比如你想在配置文件里添加
自己的包含文件路径,但是你有没有权限更改php.ini,那么你可以结合两个函
数:
ini_set('include_path',ini_get
ini_getini_get
ini_get('include_path').':/your_include_dir:');
* ini_get
ini_getini_get
ini_get_all: 获取所有的设置选项变量
把所有选项值以数组的形式返回,方便你当phpinfo()无法使用的时候来使用。
手册例子,比如:
$inis = ini_get
ini_getini_get
ini_get_all();
print_r($inis);
?>
部分输出:
Array
(
[allow_call_time_pass_reference] => Array
(
[global_value] => 1
[local_value] => 1
[access] => 6
)
[allow_url_fopen] => Array
(
[global_value] => 1
[local_value] => 1 [access] => 7
)
...
)
* ini_restore: 回复配置文件默认的值
2.合理使用PHP配置函数能够帮助我很好的理解
话说,就是我能够在我的程序之中就对
Code:
<?php
Echo “查看PHP配置文件中设置的库的
.$ini_get(“include_path
?>
Output :
3.PHP
3.PHP3.PHP
3.PHP中引用文件涉及到的路径问题
中引用文件涉及到的路径问题中引用文件涉及到的路径问题
中引用文件涉及到的路径问题
dirname(__FILE__)
dirname(__FILE__) dirname(__FILE__)
dirname(__FILE__)
php中定义了一个很有用的常数
回复配置文件默认的值
配置函数能够帮助我很好的理解PHP.Ini配置文件的情况
就是我能够在我的程序之中就对PHP配置文件进行操纵。
配置文件中设置的库的路径”
include_path”)
Pic
Pic Pic
Pic one
oneone
one
中引用文件涉及到的路径问题
中引用文件涉及到的路径问题中引用文件涉及到的路径问题
中引用文件涉及到的路径问题
中定义了一个很有用的常数,即
配置文件的情况。换句
__file__
这个内定常数是当前php程序的完整路径(路径+文件名)。
即使这个文件被其他文件引用(include或require),__file__始终是它所在文
件的完整路径,而不是引用它的那个文件完整路径。
请看下面例子:
/home/data/demo/test/a.php
<?php
$the_full_name=__FILE__;
$the_dir=dirname(__FILE__);
echo $the_full_name; //返回/home/data/demo/test/a.php
echo $the_dir; //返回/home/data/demo/test
?>
home/data/demo/b.php
<?php include "test/a.php";
echo $the_full_name; //返回/home/data/demo/
echo $the_dir; //返回/home/data/demo/test 而不是
/home/data/demo/
?>test/a.php 而不是/home/data/demo/b.php
简单地说:
__FILE__ 返回当前 路径+文件名
dirname(__FILE__) 返回当前文件路径的 路径部分
dirname(dirname(__FILE__));得到的是文件上一层目录名(不含最后一
个“/”号)
例如,当前文件是 /home/data/demo/test.php ,则
__FILE__ 得到的就是完整路径 即 /home/data/demo/test.php ,而 dirname(__FILE__)得到路径部分 即 /home/data/demo (后面没有“/”
号)
3.0.PHP
3.0.PHP3.0.PHP
3.0.PHP中的相对路径和绝对路径问题
中的相对路径和绝对路径问题中的相对路径和绝对路径问题
中的相对路径和绝对路径问题
如果您刚刚开始接触网页设计,是不是经常发生这样的问题呢?做好的网页在自
己机器上可以正常浏览,而把页面传到服务器上就总是出现看不到图片,css样
式表失效等错误。
这种情况下多半是由于你使用了错误的路径,在应该使用相对路径的地方使
用了绝对路径,导致浏览器无法在指定的位置打开指定的文件。
下面我们就来谈一下最让初学者头疼的相对路径与绝对路径的区别问题。
什么是绝对路径:
大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的
位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:
c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目
录下的img子目录中。类似于这样完整的描述文件位置的路径就是绝对路径。我
们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。而在网站中
类似以http://www.merat.cn/img/photo.jpg来确定文件位置的方式也是绝对
路径。
另外,在网站的应用中,通常我们使用"/"来表示根目录,/img/photo.jpg
就表示photo.jpg文件在这个网站的根目录上的img目录里。但是这样使用对于
初学者来说是具有风险性的,因为要知道这里所指的根目录并不是你的网站的根
目录,而是你的网站所在的服务器的根目录,因此当网站的根目录与服务器根目
录不同时,就会发生错误。
什么是相对路径: 让我们先来分析一下为什么会发生图片不能正常显示的情况。举一个例子,
现在有一个页面index.htm,在这个页面中联接有一张图片photo.jpg。他们的绝
对路径如下:
c:/website/index.htm
c:/website/img/photo.jpg
如果你使用绝对路径c:/website/img/photo.jpg,那么在自己的计算机上
将一切正常,因为确实可以在指定的位置即c:/website/img/photo.jpg上找到
photo.jpg文件,但是当你将页面上传到网站的时候就很可能会出错了,因为你
的网站可能在服务器的c盘,可能在d盘,也可能在aa目录下,更可能在bb
目录下,总之没有理由会有c:/website/img/photo.jpg这样一个路径。那么,
在index.htm文件中要使用什么样的路径来定位photo.jpg文件呢?对,应该是
用相对路径,所谓相对路径,顾名思义就是自己相对与目标位置。在上例中
index.htm中联接的photo.jpg可以使用img/photo.jpg来定位文件,那么不论
将这些文件放到哪里,只要他们的相对关系没有变,就不会出错。
另外我们使用“../”来表示上一级目录,“http://www.cnblogs.com/”表示上上级的目录,
以此类推。(学习过dos的朋友可能更容易理解)
再看几个例子,注意所有例子中都是index.htm文件中联接有一张图片
photo.jpg。
例:
c:/website/web/index.htm
c:/website/img/photo.jpg
在此例中index.htm中联接的photo.jpg应该怎样表示呢?
错误写法:img/photo.jpg
这种写法是不正确的,在此例中,对于index.htm文件来说img/photo.jpg
所代表的绝对路径是:c:/website/web/img/photo.jpg,显然不符合要求。
正确写法:使用../img/photo.jpg的相对路径来定位文件
例:
c:/website/web/xz/index.htm
c:/website/img/images/photo.jpg 在此例中index.htm中联接的photo.jpg应该怎样表示呢?
错误写法:../img/images/photo.jpg
这种写法是不正确的,在此例中对于index.htm文件来
说../img/images/photo.jpg所代表的绝对路径是:
c:/website/web/img/images/photo.jpg。
正确写法:可以使用http://www.cnblogs.com/img/images/photo.jpg的相对路径来定位文件
例:
c:/website/web/xz/index.htm
c:/website/web/img/photo.jpg
在此例中index.htm中联接的photo.jpg应该怎样表示呢?
错误写法:http://www.cnblogs.com/img/photo.jpg
这种写法是不正确的,在此例中对于index.htm文件来
说http://www.cnblogs.com/img/photo.jpg所代表的绝对路径是:c:/website/img/photo.jpg。
正确写法:可以使用../img/photo.jpg的相对路径来定位文件
总结:通过以上的例子可以发现,在把绝对路径转化为相对路径的时候,两
个文件绝对路径中相同的部分都可以忽略,不做考虑。只要考虑他们不同之处就
可以了。
如何修改样式表的路径:
使用文本编辑器打开htm文件,查看源代码,在源代码的开头部分
<head>......</head>标记中间找到<link rel="stylesheet" href="test.css"
type="text/css">。“Href=”后面的内容就是css的路径,我们可以根据以上
的知识进行相对路径的转换。
例:
c:/website/web/xz/index.htm
c:/website/css/test.css
在此例中index.htm中联接test.css文件,可以使用http://www.cnblogs.com/css/test.css
的相对路径来定位文件,完整的代码标记是:<link rel="stylesheet" href="http://www.cnblogs.com/css/test.css " type="text/css">
错误写法举例:http://www.cnblogs.com/../css/test.css
这种写法是不正确的,在此例中对于index.htm文件来
说http://www.cnblogs.com/../css/test.css所代表的绝对路径是:c:/css/test.css
最后,为了避免在制作网页时出现路径错误,我们可以使用dreamweaver
的站点管理功能来管理站点。只要使用菜单命令site-new site新建站点并定义
站点目录之后,它将自动的把绝对路径转化为相对路径,并且当你在站点中移动
文件的时候,与这些文件关联的连接路径都会自动更改,实在是非常的方便。
4.0. cURL常用的几个PHP函数
cURL是一个功能强大的php库,我们可以使用php的cURL采用GET、POST
等方式发送请求,获取网页内容以及取一个XML文件并把其导入数据库等等。本
文中收集了几种常用的php的cURL函数,以备使用。主要的有几个php函数用
于:GET,POST,HTTP验证,302重定向,设置cURL的代理。 1
11
1、
、、
、开启
开启开启
开启php
phpphp
php的
的的
的
cURL
cURLcURL
cURL功能
功能功能
功能
在Windows平台下,或者使用xampp之类的集成服务器的程序,会非常简单,
你需要改一改你的php.ini文件的设置,找到php_curl.dll,并取消前面的分
号注释就行了。如下所示:
//取消注释,开启cURL功能
extension=php_curl.dll
在Linux下面,那么,你需要重新编译你的php了,编辑时,你需要打开编
译参数--在configure命令上加上" with-curl" 参数。 2
22
2、
、、
、使用
使用使用
使用cURL
cURLcURL
cURL来
来来
来GET
GETGET
GET
数据
数据数据
数据
cURL最简单最常用的采用GET来获取网页内容的php函数
function getCURL($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 3);//超时时间
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = http://blog.soso.com/qz.q/curl_exec($curl);
curl_close($curl);
return $data;
}
3
33
3、
、、
、使用
使用使用
使用cURL
cURLcURL
cURL来
来来
来POST
POSTPOST
POST数据
数据数据
数据
当我们需要对cURL请求的页面采用POST的请求方式时,我们使用下面的
php函数
function _curl_post($url, $vars) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
$data = http://blog.soso.com/qz.q/curl_exec($ch);
curl_close($ch);
if ($data)
return $data;
else
return false;
} 4
44
4、
、、
、使用
使用使用
使用cURL
cURLcURL
cURL,
,,
,需要
需要需要
需要HTTP
HTTPHTTP
HTTP服务器认证
服务器认证服务器认证
服务器认证
当我们请求地址需要加上身份验证,即HTTP服务器认证的时候,我们就要使用下面的函数了,对于cURL中GET方法使用验证也是采用相同的方式。
function postCurlHTTP($url, $str) {
$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_USERPWD, "验证的用户名:密码");
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
$data = http://blog.soso.com/qz.q/curl_exec($ch);
$Headers = curl_getinfo($ch);
if ($Headers['http_code'] == 200) {
return $data;
} else {
return false;
}
} 5
55
5、
、、
、使用
使用使用
使用cURL
cURLcURL
cURL获取
获取获取
获取302
302302
302重定向的页面
重定向的页面重定向的页面
重定向的页面
下面函数$data为重定向后页面的内容,这里我们写一个简单的cURL POST
的302重定向后返回重定向页面URL的函数,有时候返回页面的URL更加重要。
function _curl_post_302($url, $vars) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
$data = http://blog.soso.com/qz.q/curl_exec($ch);
$Headers = curl_getinfo($ch);
curl_close($ch);
if ($data&&$Headers)
return s$Headers["url"];
else
return false;
} 6
66
6、
、、
、给
给给
给cURL
cURLcURL
cURL加个代理服务器
加个代理服务器加个代理服务器
加个代理服务器
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.2fool.cn');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, '代理服务器地址(www.2fool.cn):
端口');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, '代理用户:密码');
$data = http://blog.soso.com/qz.q/curl_exec();
curl_close($ch); 7
77
7、
、、
、一个
一个一个
一个cURL
cURLcURL
cURL简单的类
简单的类简单的类
简单的类
<?php
/*
Sean Huber CURL library This library is a basic implementation of CURL
capabilities.
It works in most modern versions of IE and FF.
==================================== USAGE
====================================
It exports the CURL object globally, so set a callback with
setCallback($func).
(Use setCallback(array('class_name', 'func_name')) to set a callback
as a func
that lies within a different class)
Then use one of the CURL request methods: get($url);
post($url, $vars); vars is a urlencoded string in query string format.
Your callback function will then be called with 1 argument, the response
text.
If a callback is not defined, your request will return the response
text.
*/ class CURL {
var $callback = false; function setCallback($func_name) {
$this->callback = $func_name;
} function doRequest($method, $url, $vars) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
if ($method == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
$data = http://blog.soso.com/qz.q/curl_exec($ch);
curl_close($ch);
if ($data) {
if ($this->callback)
{
$callback = $this->callback;
$this->callback = false;
return call_user_func($callback, $data);
} else {
return $data;
}
} else {
return curl_error($ch);
}
} function get($url) {
return $this->doRequest('GET', $url, 'NULL');
} function post($url, $vars) {
return $this->doRequest('POST', $url, $vars);
}
}
5.0.session
5.0.session5.0.session
5.0.session会话
会话会话
会话
C
CC
Code:
ode:ode:
ode:
<?php
session_start();//调用session_start()函数开始会话
$_SESSION['pages']=1 ;//在session中存储数据,$_session[]超级全局变量,
//意外着在整个程序段中都可以调用
?>
<html>
<body>
<?php
echo "currentPage=".$_SESSION['pages'];
//取回session中存储的数据
?>
</body>
</html>
Output:
如果我把销毁会话的函数放在两个输出会话存储值的语句之间的时候
下的情况:
Code:
<?php
session_start();//调用
$_SESSION['pages']=1 ;//
//意外着在整个程序段中都可以调用
?>
<html>
<body>
<?php
echo "currentPage=".$_SESSION['pages'];
数据
session_unset();
session_destroy
echo "currentPage=".$_SESSION['pages']; //
储的数据
?>
</body>
</html>
Output:
如果我把销毁会话的函数放在两个输出会话存储值的语句之间的时候
调用session_start()函数开始会话
$_SESSION['pages']=1 ;//在session中存储数据,$_session[]超级全局变量
意外着在整个程序段中都可以调用
echo "currentPage=".$_SESSION['pages']; //取回session
session_unset();
destroy();
echo "currentPage=".$_SESSION['pages']; //取回
如果我把销毁会话的函数放在两个输出会话存储值的语句之间的时候。会出现以
超级全局变量,
session中存储的
取回session中存
6.0.会话中的存取对象和应用数组
会话过程中对于$_SESSION
级变量之中,
然后想用的时候在调用出来
储变量的PHP文件运行,
Code:book.class.php
<?php
class Book{
private $book_number ;
private $book_name;
private $book_price ;
private $book_author ;
public function getbook_author()//
{
return $this->
}
public function setbook_author($book_author)
{
$this->book_author=$book_author ;
}
会话中的存取对象和应用数组
$_SESSION这个变量,因为需要先要把会话的内容存储到这个超
然后想用的时候在调用出来。所以如果写了一个关于会话的程序,
,然后再调用存储的内容,否则会挂掉的。
private $book_number ;
private $book_name;
private $book_price ;
private $book_author ;
public function getbook_author()//作者
>book_author ;
public function setbook_author($book_author)
>book_author=$book_author ;
因为需要先要把会话的内容存储到这个超
,那么得先把存
。
public function getbook_name()//书名
{
return $this->book_name;
}
public function setbook_name($book_name)
{
$this->book_name=$book_name;
}
public function getbook_price()//价格
{
return $this->book_price ;
}
public function setbook_price($book_price)
{
$this->book_price=$book_price ;
}
public function getbook_number()//书籍编号
{
return $this->book_number ;
}
public function setbook_number($book_number) {
$this->book_number=$book_number ;
}
}
?>
Code:save_object.php
<?php
include_once("book.class.php");
session_start();
$book=new Book() ;
$book->setbook_number("b0803");
$book->setbook_name("九阴真经");
$book->setbook_price(83);
$book->setbook_author("黄桑");
$_SESSION['bookinfo']=$book;
?>
Code :show_bookinfo.php
<?php
include_once("book.class.php");
session_start();
$bokinfo=$_SESSION['bookinfo'];
?>
<table border="1">
<tr><td>书籍编号</td><td>书籍名</td><td>书籍价格(元)</td><td>书籍作者</td></tr>
<tr>
<td><?php echo $bokinfo
<td><?php echo $bokinfo
<td><?php echo $bokinfo
<td><?php echo $bokinfo
</tr>
</table>
Output:
在我没有运行save_object.php
运行save_object.php文件
浏览器中没有什么东西。
会自动的报错误。更何况这个文件没有需要输出的内容
接着我重新运行show_bookinfo.php
<td><?php echo $bokinfo-> getbook_number();?></td>
<td><?php echo $bokinfo-> getbook_name();?></td>
<td><?php echo $bokinfo-> getbook_price();?></td>
<td><?php echo $bokinfo-> getbook_author();?></td>
save_object.php文件之前,浏览器截图如下:
文件。
。说明这个文件没有错误。因为如果有错误的话
更何况这个文件没有需要输出的内容。
show_bookinfo.php文件
> getbook_number();?></td>
thor();?></td>
因为如果有错误的话,Apache