PHP编程:PHP的十个初级技能(中)
不懂的问题有很多高手帮你解决。但不要认为你是新手,就不能帮助别人,比如今天你学会了怎样安装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>
<?
// 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>
</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 * * * lynx -dump http://localhost/copyfile.php 1>/dev/null 2>&1
假如运转的是CGI版本的PHP,可以跳过Lynx局部,而直接挪用二进制文件:
0 5 * * * 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基础这个东西,有人问学php需要任何基础不? ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 基础有没有对学习php没有太大区别,关键是兴趣。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
页:
[1]