PHP教程.经验技巧

PHP的十个高级技巧(中)

三、文件是我们的朋友

  无论你在开发的网站规模的大小,都应该意识到代码重用的重要性,无论这些代码是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函数。例如:

  

  

  

  [a lot of content]

  

  // insert copyright

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

  ?>

  

  

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

  

  //得到函数库

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

  // do PHP things with my functions ?>

  

  

  

  [a lot of content]

  

  

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

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

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

四、PHP和文件系统的维护

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

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

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

  

  $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);

  ?>

  

  

  

  

  

  

  

  

Files in:

  

  

  

  

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

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

  

  $original = "/home/me/mydatabasedump";

  $copied = "/archive/mydatabasedumo_1010";

  /* 使用copy()函数拷贝原始文件,如果拷贝没有完成则会显示一个错误信息*/

  @copy($original, $copied) or die("Couldn‘t copy file.");

  ?>

  这个例子是一个文件备份系统的原型。在这段脚本运行时,它把文件拷贝到一个不同的位置进行保存。稍微修改一下守护程序,就可以在一天中你指定的时刻执行它,而无需用户的干预。

  假定你在系统上安装了Lynx,可以创建一个守护程序的条目访问这个文件,访问这个文件会运行这个脚本并建立一个拷贝文件,下面的例子将在上午5点钟运行这个脚本,然后关闭Lynx:

  0 5 * * * [username] lynx -dump http://localhost/copyfile.php 1>/dev/null 2>&1

  如果运行的是CGI版本的PHP,可以跳过Lynx部分,而直接调用二进制文件:

  0 5 * * * [username] php /path/to/copyfile.php 1>/dev/null 2>&1

五、丰富的数组函数

  PHP 4.0中新添加了30个与组数有关的函数,其中一些常见的函数可以判断一个数组中是否包含某个元素,对一个数组中的元素进行计数,添加或删除数组中的元素或者对数组中的元素进行排序。

  如果有一个很大的数组,而你需要找出其中是否包含一个特定的元素,就可以使用in_array()。下面的例子将显示“Not found in this array”,因为在一个名字为$namesArray的数组中查找Albert,而在$namesArray数组中不存在这样一个元素。

  

  $lookingFor = "Albert";

  if (in_array($lookingFor, $namesArray)) {

  echo "You‘ve found it!";

  } else {

  echo "Not found in this array!";

  }

  ?>

  如果把$lookingFor的值改为Mary,就会得到“You‘ve found it!”的信息,因为Mary是$namesArray数组中的一个元素。

  如果要对一个数组中的元素个数进行计数,只要简单地使用count()函数即可:

  

  $count = count($namesArray); ?>

  返回的$count的值为7。

  可以在一个数组的开头或结尾处添加元素,还可以使用array_merge()来建立一个包含二个或更多数组中元素的新数组,合并时,元素的顺序会按指定的顺序排列,如果原来的数组是被排过序的,在合并后需要对它重新排序。

  我们可以首先利用array_push()在数组的结尾处添加一个元素:

  

  $fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

  /* 向数组中添加元素 */

  array_push($fruitArray, "grape", "pineapple", "tomato");

  /*显示每个元素及其序号*/

  while (list($key,$value) = each($fruitArray)) {

  echo "$key : $value
";

  }

  ?>

  运行上面的程序将得到下面的结果:

  0 : apple

  1 : orange

  2 : banana

  3 : kiwi

  4 : pear

  5 : grape

  6 : pineapple

  7 : tomato

  如果需要在数组的开头添加元素,其代码与上面的代码差不多,唯一的不同之处是需要用array_unshift()代替array_push()。

  

  /* 建立一个数组*/

  $fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

  /* 向数组中添加元素*/

  array_unshift($fruitArray, "grape", "pineapple", "tomato");

  /* 显示每个元素及其序号*/

  while (list($key,$value) = each($fruitArray)) {

  echo "$key : $value
";

  }

  ?>

  运行上面的程序将得到下面的结果:

  0 : grape

  1 : pineapple

  2 : tomato

  3 : apple

  4 : orange

  5 : banana

  6 : kiwi

  7 : pear

  array_merge()函数可以把二个或更多的数组合并为一个数组。

  

  $fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

  /*/建立第二个数组*/

  $vegArray = array("carrot", "green beans", "asparagus", "artichoke", "corn");

  /*把这二个数组合并为一个数组*/

  $goodfoodArray = array_merge($fruitArray, $vegArray);

  /* 显示每个元素及其序号*/

  while (list($key,$value) = each($goodfoodArray)) {

  echo "$key : $value
";

  }

  ?>

  运行上面的脚本将得到下面的结果:

  0 : apple

  1 : orange

  2 : banana

  3 : kiwi

  4 : pear

  5 : carrot

  6 : green beans

  7 : asparagus

  8 : artichoke

  9 : corn

  现在我们已经掌握了如何添加元素和合并数组,我们再来看看如何从一个数组中删除元素。从一个数组的末尾删除一个元素可以使用array_pop()函数,使用array_shift()函数可以从一个数组的开头删除一个元素。尽管使用array_pop()或 array_shift()从数组中删除了一个元素,你还可以把这个元素当作一个变量来使用。

  使用array_pop()从一个数组的末尾删除一个元素:

  

  /*建立一个数组*/

  $fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

  /* 从数组的末尾删除一个元素*/

  $popped = array_pop($fruitArray);

  /* 显示删除后数组的内容和你删除的元素*/

  while (list($key,$value) = each($fruitArray)) {

  echo "$key : $value
";

  }

  echo "
and finally, in $popped: $popped";

  ?>

  运行上面的脚本会得到下面的结果:

  0 : apple

  1 : orange

  2 : banana

  3 : kiwi

  and finally, in $popped: pear

  我们再来讨论一个从一个数组的末尾删除元素的例子:

  

  /* 建立一个数组*/

  $fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

  /*从一个数组的开始删除一个元素*/

  $shifted = array_shift($fruitArray);

  /* 显示删除后数组的内容和你删除的元素*/

  while (list($key,$value) = each($fruitArray)) {

  echo "$key : $value
";

  }

  echo "
and finally, in $shifted: $shifted";

  ?>

  运行上述脚本会得到如下的显示结果:

  0 : orange

  1 : banana

  2 : kiwi

  3 : pear

  and finally, in $shifted: apple

  另外还有几个函数可以对数组中的元素进行排序,但在这里我们将只简要介绍基本的排序函数,说明排序的过程:

  

  $fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

  /* 对数组进行排序*/

  sort($fruitArray);

  /*显示每个元素及其序号*/

  while (list($key,$value) = each($fruitArray)) {

  echo "$key : $value
";

  }

  ?>

  运行上述的脚本会得到如下的显示结果:

  0 : apple

  1 : banana

  2 : kiwi

  3 : orange

  4 : pear

时间: 2024-10-11 03:29:06

PHP教程.经验技巧的相关文章

webstorm的中文教程和技巧分享

webstorm是一款前端javascript开发编辑的神器,此文介绍webstorm的中文教程和技巧分享. webstorm8.0.3中文汉化版下载:百度网盘下载:http://pan.baidu.com/s/1pJI9PMV WebStorm为前端javascript开发而生,专门为 javascript开发做了很多优化,令前端工程师眼前一亮的. 一.webstorm的功能 1.webstorm的智能的代码补全: 支持不同浏览器的提示,还包括所有用户自定义的函数(项目中) 代码补全包含了所有

Burpsuite教程与技巧之HTTP brute暴力破解

常规的对username/passwprd进行payload测试,我想大家应该没有什么问题,但对于Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=这样的问题,很多朋友疑惑了. 之前,我记得我介绍过burpsuite的intruder功能(BurpSuite教程与技巧之SQL Injection),想必很多人没什么印象,在此,以HTTP brute重提intruder功能. 以下面案例进行说明(只作演示之用,具体以自己的目标为准) Auth=dXNlcjp

网页设计原则理念以及实战经验技巧

(2)界面弱化 一个好的界面设计它的界面是弱化的,它突出的是功能,着重体现的是网站业提供给使用者是主要什么.这就涉及到浏览顺序.功能分区等等. 要让访客在0.5秒内就能把握网站的行业性质,1秒内就知道该从哪个地方开始使用这个网站,能点一次的,绝不点第二次.当然上面说的是大多数功能性网站,对于宣传展示性网站,诸如加特效的或Flash网站,可能就不得不花哨一些,但不能太过分.网站不是动画片,在效率越来越高,社会心理越来越浮躁的中国,人们的耐心越来越小,心理承受能力越来越低.效果可以体现意境,点到为止

[经验技巧] “php+mysql+apache”环境搭建及"手动SQL注入",20180527-0

[经验技巧] "php+mysql+apache"环境搭建及"手动SQL注入" 1."php+mysql+apache"环境搭建 环境载体:虚拟机Window7 Service Pack 1 旗舰版 下载"phpStudy (php5.2) " 链接:http://www.phpstudy.net/phpstudy/phpStudy(PHP5.2).zip 文件见附件1. 安装"phpStudy (php5.2) &

总结:电路及电路设计经验技巧

电路及电路设计经验技巧大合集,全部是文档文件,来看看有没有你需要的资料?,把好几个压缩包的文件名称给copy下来了,压缩得有点大,文件都放在闯客网技术论坛上了,需要哪个资料的,自行下载吧,同时献上我们的交流群:813238832资料链接:https://bbs.usoftchina.com/thread-206874-1-1.html 文件列表:BUCKBOOST电路原理分析.docxCAN总线接口电路设计注意事项.docxDC-DC升压电路.docxFPGACPLD数字电路设计经验分享.doc

数字集成电路设计经验技巧分享

废话不多说,直接贴出电路及电路设计经验技巧大合集84个资料的文件列表,太多了,只显示一部分吧,有需要的朋友可以到闯客网技术论坛下载,同时可以加入我们的技术交流裙:613377058,无偿共享,在线解答各种技术问题.资料链接:https://bbs.usoftchina.com/thread-206874-1-1.html 文件列表:BUCKBOOST电路原理分析.docxCAN总线接口电路设计注意事项.docxDC-DC升压电路.docxFPGACPLD数字电路设计经验分享.docxMIC电路工

调查管理系统 -(7)设计调查选项处理&Answer实体的分析设计&开发的经验技巧&数据库使用等

1.设计调查选项处理-巧利用Hibernate为对象赋值的时机 1)在Hibernate映射文件的<set>元素中添加order-by属性指定集合元素的排序方式. 2)由于问题的选项在数据库中是以字符串(选项之间以“\r\n”分隔)的形式保存的,因此,在页面上进行问题选项显示前要对字符串进行拆分工作.该字符串拆分的执行时机应该是什么时候比较好?(视频16:调查管理系统_设计调查选项处理)  技巧:Hibernate从DB中查询出数据并映射为对象,在为对象进行赋值时是调用对象成员变量的sette

使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)

为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以同时用于功能和性能测试.Jmeter 有着众多的插件开发者, 支持多种的测试协议. 一 .Jmeter 使用入门教程(快速入门) 如果您熟悉英语, 可以选择阅读tutorialpoint的教程.  或浏览汉化中的[史上最完整Jmeter教程]. 您也可以继续浏览站长收集的如下资料.  1. Jmeter 快速入门教程(一)  什么是jmeter 及 google plugin介绍 (强大

CSS 布局:40个教程、技巧、例子和最佳实践

前言: 布局是WEB开发一个重要的课题,进入XHTML/CSS后,使用TABLE布局的方式逐渐淡出,CSS布局以众多优点成为主流,本文将介绍40个基于CSS的web布局的资源和教程.文章的出处在hl.文中的不少的例子在一本经典的CSS书籍<CCS: The Missing Manual, 2nd Edition>中都可以找到,据我所知,第二版在中国没有翻译出版.你可以从这里下载英文版(不过需要注册个用户名) 正文 基于CSS的布局能提供更灵活布局方式和更强的用户视觉体验.一些重要技巧和关键点可