|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。技能|教程 PHP的十个初级技能(中)
3、文件是咱们的伴侣
不管你在开辟的网站范围的巨细,都应当意想到代码重用的主要性,不管这些代码是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函数。例如:
<HTML>
<HEAD><TITLE>Something</TITLE></HEAD>
<BODY>
[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>
下一个成绩就该是“include和require文件在哪里?”,对这个成绩复杂的回覆是,“体系中的恣意中央。”假如你的代码中包括有带有效户名和口令的数据库毗连,你一定不会将它们都放在文档根目次中向一切的人都开放。
included或required文件可以在体系上的任何中央,只需PHP运转的体系上的用户可以会见这些文件便可,你可使这些文件具有任何后缀,或不利用后缀。
利用include()和require()对在网站中的元素停止详细化是一种广泛的景象,并在需求对网站晋级时,给你带来很大的便利。
4、PHP和文件体系的保护
PHP中有很多与文件体系有关的函数,这些函数不但可以翻开文件,还可以显示目次中的内容、挪动文件和其他一些功效,很多人乃至用PHP开辟基于互联网的文件资本办理器。
关于文件途径的注释:在Windows中,可以在途径中利用/和\符号,而在其他的操作体系中只能利用/符号。出于分歧性的原因,咱们一致利用/符号。
上面的剧本样例可以显示一个目次清单,正文已包括在代码中:
<? /*把要读取的目次的全途径名存入一个名字为$dir_name的变量中。 */
$dir_name = "/home/me/";
/* 创立一个句柄,其值是翻开一个给定目次的了局*/
$dir = opendir($dir_name);
/* 创立一个文字块,用以放置列表元素(文件名字)*/
$file_list = "<ul>";
/* 利用一个while语句,读取已翻开的目次中的一切元素,假如文件的名字不是“.”或“..”,则显示列表中的名字*/
while ($file_name = readdir($dir)) {
if (($file_name != ".") && ($file_name != "..")) {
$file_list .= "<li>$file_name";
}
}
$file_list .= "</ul>";
/*封闭翻开的目次,停止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的变量中,把拷贝的文件的全途径付与一个名字为$copied的变量中*/
$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
5、丰厚的数组函数
PHP 4.0中新添加了30个与组数有关的函数,个中一些罕见的函数可以判别一个数组中是不是包括某个元素,对一个数组中的元素停止计数,添加或删除数组中的元素或对数组中的元素停止排序。
假如有一个很大的数组,而你需求找出个中是不是包括一个特定的元素,就能够利用in_array()。上面的例子将显示“Not found in this array”,由于在一个名字为$namesArray的数组中查找Albert,而在$namesArray数组中不存在如许一个元素。
<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John");
$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()函数便可:
<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John");
$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<br>";
}
?>
运转下面的法式将失掉上面的了局:
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<br>";
}
?>
运转下面的法式将失掉上面的了局:
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<br>";
}
?>
运转下面的剧本将失掉上面的了局:
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<br>";
}
echo "<br>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<br>";
}
echo "<br>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<br>";
}
?>
运转上述的剧本会失掉以下的显示了局:
0 : apple
1 : banana
2 : kiwi
3 : orange
4 : pear
没有人会喜欢和见异思迁的人交朋友,因为这种人太不安分,太不可靠,因此,你必须要强迫自己完成自己的目标,哪怕可能会很难受,也得坚持,毅力就是这么锻炼出来的。 |
|