0

0

PHP高级技巧全放送(上)_PHP

php中文网

php中文网

发布时间:2016-06-01 12:35:04

|

915人浏览过

|

来源于php中文网

原创

全球超过300万个互联网网站的管理员都在使用PHP使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台而且是开放源代码软件。随你使用的水平不同PHP可以很简单也可以很复杂可以只使用它发送HTML表格元素还可以在PHP应用程序中集成Java和XML。 

如果你对PHP有一定的了解或者看过一些初步的教材
这些技巧可以扩展你对PHP的认识使你掌握一些常见的和高级的PHP功能。 

一、把PHP安装为Apache的DSO 

PHP在Linux
/Unix平台上经常与Apache搭配使用在安装PHP时有三种安装方式可供选择静态模式、动态模式DSO、CGI二进制模式。 

由于易于维护和升级
我强烈建议以DSO方式安装PHP。例如初次安装时如果安装的PHP仅支持数据库随后希望再安装支持加密的模块只要运行“make clean”添加新的配置选项然后再运行“make”和“make install”即可一个新的PHP模块就会安装在Apache中适当的位置上然后重新启动Apache而无需重新编译Apache。 

下面的步骤将安装一个全新的Apache
并以DSO方式安装PHP 

1、从Apache软件基金会得到最新版本的Apache源代码
 

2、把得到的源代码放到
/usr/local/或者/opt/目录下或者你指定的任意目录中 

3、运行Gunzip对文件进行解压缩
得到后缀为.tar的文件 

4、运行下面的命令
把文件安装到apache_[version]目录中 

tar
-xvf apache_[version].tar 

5、进入
/usr/local/apache_[version]目录或者在步骤4中安装压缩文件的目录 

6、键入下面的命令为编译Apache作准备
用你自己的路径替换其中的[path]例如/usr/local/apache[version]现在已经设置了mod_so的新值它将允许Apache使用DSO模块 

7、回到提示符状态后键入make
并等待再次回到提示符状态 

8、执行“make install”命令。 

至此
Apache已经安装完毕系统将重回到提示符状态。接下来我们开始安装PHP 

1、在PHP主页的下载区中找到最新版本的链接
 

2、把文件下载到一个适当的目录中
例如/usr/local//opt/或者你指定的任意目录中 

3、运行Gunzip对文件进行解压缩
得到后缀为.tar的文件 

4、执行下面的命令把文件安装在php
-[version]目录中 

tar
-xvf php-[version] 

5、进入
/usr/local/php-[version]目录或在步骤4中指定的目录 

至此
已经作好了以DSO方式安装PHP的准备工作唯一需要修改的配置选项是with-apxs这是Apache的bin目录中的一个文件。为了得到较高的性能我没有安装对MySQL的支持模块。 

.
/configure --with-mysql=/[path to mysql] --with-apxs=/[path to apxs] 

6、回到提示符状态后执行make命令
等待重新返回到提示符状态 

7、执行make install命令。 

至此
系统以DSO方式在Apache的模块目录中安装了PHP并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。回到提示符状态后你还需要对Apache的httpd.conf文件作一些修改。 

1、找到包含有ServerAdmin的一行
添加你的电子邮件地址如下所示 

ServerAdmin you
@yourdomain.com 

2、找到以ServerName开头的行
把它改为真正的值例如 

ServerName localhost 

3、找到内容如下所示的小节


# And for PHP 4.x, use: 



#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps 

修改这些行的内容,使PHP 4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容:

# And for PHP 4.x, use: 



AddType application/x-httpd-php .php .phtml 

AddType application/x-httpd-php-source .phps 

保存文件,回到上一级目录,执行下面的命令重新启动Apache: 

./bin/apachectl start 

如果在启动时没有出现错误提示信息,就可以通过创建一个名为phpinfo.php的只有如下所示一行内容的文件,对安装的Apache、PHP进行测试: 

phpinfo()
?> 

把这个文件保存到Apache的文档根目录
htdocs然后开启浏览器键入http://localhost/phpinfo.php地址,屏幕上就会出现许多的变量和它们的值。 

如果要重新配置PHP,需要再次运行make clean命令,然后执行带有一系列选项的./configure命令,然后再执行make和make install命令,Apache的目录模块中就会出现一个新的模块,只要再重新启动Apache加载这个新的模块,就一切OK了。 

二、使用PHP本身的对话 

PHP 4.0中最令人期待的特性应该是对对话的支持,PHP 3.0的用户必须使用第三方的软件否则就不能使用对话,不支持对话一直是PHP最大的缺憾之一。 

只要用户在浏览你的网站,你就可以利用对话维护与特定用户有关的变量,而无需建立多个cookie、使用隐藏表格字段或将信息存储在数据库中。 

在一个网页上启动一个对话,就会使PHP引擎知道你想启动一个对话(如果还没有启动)或者继续当前的对话: 

session_start(); 

启动一个对话将通过cookie向用户发送一个识别字符串(例如940f8b05a40d5119c030c9c7745aead9),在服务器端,会创建一个与识别字符串匹配的临时文件,例如sess_940f8b05a40d5119c030c9c7745aead9,这个文件中包含注册的对话变量以及它们的值。 

用来显示对话的作用的最常见的例子是访问计数器。启动PHP模块,确保PHP代码是文件的第一行,在PHP代码之前不要有空格、HTML代码和其他的代码。因为对话会发送一个头部,因此如果在session_start()之前有空格和HTML代码,就会得到一个出错信息。 

 

// 如果还不存在一个针对某用户的用户,则启动一个对话: 

session_start(); 

然后注册一个名字为count的变量: 

session_register('count'); 

注册一个对话变量后,只要对话存在,名字为count的变量也就存在。现在,count变量还没有被赋值,如果对它执行加1操作,它的值就变为了1。 

$count++; 

把上述内容综合在一块儿,如果还没有启动一个对话,就会启动一个对话;如果不存在一个对话id,就为用户指定一个好了,注册一个名字为$count的变量,对$count执行加1操作表示用户已经首次访问了该网页。 

要知道用户在当前的对话中访问本页面的次数,只要显示$count变量的值即可: 

echo "

You've been here $count times.

知了追踪
知了追踪

AI智能信息助手,智能追踪你的兴趣资讯

下载
"; 

全部的访问计数器代码如下所示: 

 

session_start(); 

session_register('count'); 

$count++; 

echo "

You've been here $count times.

"; 

?> 

如果重新加载上述的脚本文件
就会发现变量count的值增加了1很酷吧。 

还可以在对话中注册一个数组变量
假设我们注册了一个名字为$faves的变量 

$faves
= array ('chocolate','coffee','beer','linux'); 

可以象注册一个简单变量那样注册一个数组变量
 

session_register
('faves'); 

引用数组变量与引用简单变量没有什么二样
如果一个用户在网页上指出在生活中的爱好时可以把他的爱好注册到一个被称作$faves的数组变量中然后可以在另一个网页中很方便地把这些爱好显示出来 

 

session_start
(); 

echo "My user likes: 

    "
;

while (list(,$v) = each ($faves)) { 

echo "
  • $v"
  • ; } 

    echo ""; 

    ?> 

    然后你就得到了一个关于用户爱好的清单。 

    对话变量不能被查询字符串覆盖
    也就是说我们不能输入http:///www.yourdomain.com/yourscript.php?count=56给注册变量$count指定一个新值,这一点对于安全很重要:只能在服务器端的脚本中删除一个没有注册的对话变量。 

    如果要完全删除一个对话变量,首先需要从系统中注销它: 

    session_unregister('count'); 

    要完全删除一个对话变量的脚本是非常简单,如下所示: 

    session_destroy(); 

    使用对话变量可以减少访问数据库的频率,使代码更加清晰,而且可以减少对用户发送的cookie的数量,它是最简单的方法了。 

    三、文件是我们的朋友

    无论你在开发的网站规模的大小,都应该意识到代码重用的重要性,无论这些代码是HTML、还是PHP代码。例如,你必须至少每年改变一次包含版权信息的页脚,如果你的网站含有1000个页面,每年修改一次也是个很烦人的事儿。

    在PHP中,至少有几个函数可以帮助你实现代码重用的目的,所使用的函数取决于你所重用的代码,主要的函数有:

    * include() and include_once()

    * require() and require_once()

    include()函数包含并对给定的文件进行计算,例如:

    include('/home/me/myfile');

    在include文件中的任何代码都在include()出现的代码范围内执行,你可以通过联合使用include()和fopen()在自己的服务器上包含静态文件,在另一台服务器上包含目标文件。

    include_once()的功能与include()相同,二者之间的区别在于它会检查一个文件中的代码是否已经包含在现有的脚本中,如果代码已经存在,则不会再次包含它。

    require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。

    为也了解其内容,在版权信息、静态文字和其他不包含变量的元素或者依赖其他正在执行的脚本的元素中我更趋向于使用require函数。例如:



    Something



    [a lot of content]



    // insert copyright

    require('/home/me/mycopyright');

    ?>

    /BODY>

    /HTML>

    另一方面
    我经常在文件的开始使用include()来控制许多的函数



    //得到函数库

    include('/home/me/myfunctions');

    // do PHP things with my functions
    ?>

    HTML>

    HEAD>TITLE>Something/TITLE>/HEAD>

    BODY>

    [a lot of content]

    /BODY>

    /HTML>

    下一个问题就该是“
    includerequire文件在哪里对这个问题简单的回答是“系统中的任意地方。”如果你的代码中包含有带有用户名和口令的数据库连接你肯定不会将它们都放在文档根目录中向所有的人都开放。

    included或required文件可以在系统上的任何地方
    只要PHP运行的系统上的用户可以访问这些文件即可你可以使这些文件具有任何后缀或者不使用后缀。

    使用
    include()require()对在网站中的元素进行具体化是一种普遍的现象并在需要对网站升级时给你带来很大的方便。

    四、PHP和文件系统的维护

    PHP中有许多与文件系统有关的函数
    这些函数不仅可以打开文件还可以显示目录中的内容、移动文件和其他一些功能许多人甚至用PHP开发基于互联网的文件资源管理器。

    关于文件路径的解释
    在Windows中可以在路径中使用/和符号而在其他的操作系统中只能使用/符号。出于一致性的缘故我们统一使用/符号。

    下面的脚本样例可以显示一个目录清单
    注释已经包含在代码中

    /*把要读取的目录的全路径名存入一个名字为$dir_name的变量中。 */

    $dir_name
    = "/home/me/";

    /* 创建一个句柄,其值是打开一个给定目录的结果*/

    $dir
    = opendir($dir_name);

    /* 建立一个文字块,用以放置列表元素(文件名字)*/

    $file_list
    = "
      "
    ;

    /* 使用一个while语句,读取已经打开的目录中的所有元素,如果文件的名字不是“.”或“..”,则显示列表中的名字*/

    while ($file_name = readdir($dir)) {

    if (($file_name != ".") && ($file_name != "..")) {

    $file_list .
    = "
  • $file_name"
  • ;

    }

    }

    $file_list .
    = "";

    /*关闭打开的目录,结束PHP模块*/

    closedir
    ($dir);

    ?>

    !-- Start your HTML -->

    HTML>

    HEAD>

    TITLE>Directory Listing/TITLE>

    /HEAD>

    BODY>

    !-- Use PHP to print the name of the directory you read -->

    P>Files in: echo "$dir_name"; ?>/p>

    !-- Use PHP to print the directory listing -->

    echo "$file_list"; ?>

    /BODY>

    /HTML>

    好了
    我们已经得到了一个目录清单。需要注意的是要读取一个文件稍后我们将进行讲解或目录的内容PHP运行的系统上的用户必须至少有读取文件的权限。

    下面是一个如何拷贝文件的例子


    /*把你要拷贝的原文件的全路径赋给一个名字为$original的变量中把拷贝的文件的全路径赋予一个

    相关文章

    PHP速学教程(入门到精通)
    PHP速学教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    php

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

    本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

    463

    2026.02.13

    微博网页版主页入口与登录指南_官方网页端快速访问方法
    微博网页版主页入口与登录指南_官方网页端快速访问方法

    本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

    135

    2026.02.13

    Flutter跨平台开发与状态管理实战
    Flutter跨平台开发与状态管理实战

    本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

    64

    2026.02.13

    TypeScript工程化开发与Vite构建优化实践
    TypeScript工程化开发与Vite构建优化实践

    本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

    20

    2026.02.13

    Redis高可用架构与分布式缓存实战
    Redis高可用架构与分布式缓存实战

    本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

    26

    2026.02.13

    c语言 数据类型
    c语言 数据类型

    本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

    29

    2026.02.12

    雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
    雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

    本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

    14

    2026.02.12

    豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
    豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

    本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

    524

    2026.02.12

    PostgreSQL性能优化与索引调优实战
    PostgreSQL性能优化与索引调优实战

    本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

    53

    2026.02.12

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    【Midjourney】从入门到精通
    【Midjourney】从入门到精通

    共17课时 | 1.4万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号