php可以支持代码重用技术的命令,Linux下的编程 PHP高级技巧全放送(一)

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

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

本文主要介绍以下十大PHP高级技巧:一、把PHP安装为的DSO ;二、使用PHP本身的对话;三、文件是我们的朋友;四、PHP和文件系统的维护;五、丰富的数组函数;六、动态图像的创建;七、基于PHP的用户认证;八、PHP和COM;九、PHP和Java;十、PHP和XML

一、把PHP安装为Apache的DSO

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

由于易于维护和升级,我强烈建议以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目录中的一个文件)。为了得到较高的性能,我没有安装对的支持模块。

./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)中,然后开启浏览器,键入地址,屏幕上就会出现许多的变量和它们的值。

如果要重新配置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.";

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

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 "";

?>

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

对话变量不能被查询字符串覆盖,也就是说我们不能输入给注册变量$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');

?>

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

//得到函数库

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

// do PHP things with my functions ?>

Something

[a lot of content]

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python处理word表格格式_python---word表格样式设置

1、word表格样式的设置from docx import * document Document() table document.add_table(3, 3, style"Medium Grid 1 Accent 1") heading_cells table.rows[0].cells heading_cells[0].text 第一列内容 heading_cells[1].text 第二列内容 heading_cells[2].te…

Spring AOP——Spring 中面向切面编程

前面两篇文章记录了 Spring IOC 的相关知识,本文记录 Spring 中的另一特性 AOP 相关知识。 部分参考资料: 《Spring实战(第4版)》 《轻量级 JavaEE 企业应用实战(第四版)》 Spring 官方文档 W3CSchool Spri…

python getchar,Linux C编程学习:getchar()和getch()

getchar函数名: getchar功 能: 从stdin流中读字符用 法: int getchar(void);注解:getchar有一个int型的返回值,当程序调用getchar时程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中直到用户按回车为止(回车字符也放在缓冲区中)。当用…

python 折线图中文乱码_彻底解决 Python画图中文乱码问题--Pyplotz组件

1 源起 自从开始学习Python,就非常喜欢用来画图。一直没有需求画要中文显示信息的图,所以没有配置Python中文的环境。由于昨天就需要画几十个形式相同,只是数据不同的图,并且需要显示中文信息。如果用Excel画图会很浪费时间&#…

SpringBoot的AOP是默认开启的,不需要加注解@EnableAspectJAutoProxy____听说SpringAOP 有坑?那就来踩一踩

Aspect Component public class CustomerServiceInterceptor {Before("execution(public * org.example.aop.demo..*.*(..))")public void doBefore() {System.out.println("do some important things before...");} }另外SpringBoot默认是cglib动态代理&a…

php4 apache 配置,[开发环境配置]windows下php4+mysql4+apache2开发环境配置

在网上看了好多php+mysql+apache的开发环境配置文档。但是其中不乏出现了很多的问题导致在配置开发环境的时候出现了很多的问题。这里总结出一份自己配置过程中的文档希望能给大家带来一些帮助。那么废话不多说,我们开始吧。首先我在配置的时…

mysql 开启远程访问_QxOrm 访问 MySQL

在前面的 QxOrm 章节中,我们已经介绍了对本地数据库的操作,现在是时候介绍对远程数据库的访问了,那么就以最常用的 MySQL 为例吧!在开始之前,首先要安装 MySQL。如果条件允许,建议将其安装在 Linux 系统上&…

当泛型遇到重载

当泛型遇到了重载,好戏,就发生了。 请看下面代码: 问题:代码能正确编译吗? 这个题目是一个考察泛型的题目。java里面,泛型实际上是“伪泛型”,并不像C#那样是实际上的泛型。 IDE会提示我们下…

oracle 查看时间对应周,oracle数据获取当前自然周,当前周的起始和结束时间

select to_char(sysdate,iw) from dual; --本周是第几个自然周select to_char(sysdate,yyyy) into v_sbzq_nf from dual; -- 当前年份SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,yyyy-MM-dd),yyyy-MM-dd),IW),yyyy-MM-dd) FROM DUAL;--本周的起始时间(本周周一日期)SELECT …

redis查询所有key命令_三歪推荐:Redis常见的面试题

本文公众号来源:科技缪缪作者:科技缪缪本文已收录至我的GitHub说说Redis基本数据类型有哪些吧字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息…

springboot系列——redisTemplate和stringRedisTemplate对比、redisTemplate几种序列化方式比较

文章目录一、redisTemplate和stringRedisTemplate对比1、StringRedisTemplate2、RedisTemplate二、redisTemplate序列化方式比较1、性能测试对比2、性能总结3、方案一、考虑效率和可读性,牺牲部分空间4、方案二、空间敏感,忽略可读性和效率影响5、使用示…

oracle rman备份慢,诊断Oracle RMAN备份慢的原因

㈠ 先在系统层面查询CPU、IO使用情况:top、iostat、sar...等㈡ EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();㈢ rman target / debug trace /tmp/rmandebug.txt log/tmp/rman_log20130727.txt执行备份㈣ EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();㈤ …

mysql查询默认排序规则_深究 mysql 默认排序, order by 的顺序【收藏】

mysql 语句中如果没有使用 order by 来排序,通常会用 主键正序排列,但是有的时候不是这样,来看一个实例。实例群友问:请教一个问题,mysql 默认排序问题,当sql 语句 的排序没有指定 主键(id&…

Spring Boot jackson配置使用详解

Spring Boot系列-json框架jackson配置详解 T1 - 前言 目前Java最常见的3中JSON操作框架分别为Gson、Jackson、FastJson,该篇文章主要讲解jackson在SpringBoot环境中各配置项的具体作用。 T2 - 环境依赖 jackson是spring-boot的web/webflux框架默认依赖的json库&…

oracle字段序列自增长,ORACLE序列(字段自增长)

序列:是oacle提供的用于产生一系列唯一数字的数据库对象。 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率创建序列:1、 要有创建序列的权限 create sequence 或 create any sequence2、 创建序列的语法CREATE SEQUENCE seque…

频率统计表用c语言_空间矢量脉宽调制建模与仿真(基于C语言的SIMULINK仿真模型 | 基于SVPWM模块的仿真)...

文末有仿真模型下载方式1.1 基于C语言的SIMULINK仿真模型使用C语言在MATLAB/SIMULINK中仿真,需要借助s-function builder模块实现。七段式SVPWM仿真模型如图1-1所示。仿真解算器(Solver)选择变步长(Variable-step)、od…

pythonrandom库seed_Python

Python seed() 函数 描述 seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。 语法 以下是 seed() 方法的语法: import random random.seed ( [x] ) 我们调用 random.random() 生成随机数时,每一次生成的数都是随机的。但是…

php基本语法 格式,PHP 基本语法格式

PHP 基本语法格式标准代码如下:复制代码 代码如下:...?>短标签模式(此模式需要修改PHP配置,让PHP支持短标签模式):复制代码 代码如下:...?>注释:复制代码 代码如下:/* ...*///#时间: 2009-12-14Abs: 取得绝对值. Acos: 取…

spring @Primary-在spring中的使用

在spring 中使用注解,常使用Autowired, 默认是根据类型Type来自动注入的。但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 Primary 的作用就出来了。下面是个简单的使用例子。…

php获取手机的mac地址,Android手机获取Mac地址的方法

[导读]这篇文章主要为大家详细介绍了Android手机获取Mac地址的方法,具有一定的参考价值最常用的方法,通过WiFiManager获取:/*** 通过WiFiManager获取mac地址* param context* return*/private static String tryGetWifiMac(Context context) {WifiManage…