亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP的十個(gè)高級(jí)技巧(上中下)第2/3頁(yè)

 更新時(shí)間:2006年07月12日 00:00:00   作者:  
三、文件是我們的朋友 
  無(wú)論你在開發(fā)的網(wǎng)站規(guī)模的大小,都應(yīng)該意識(shí)到代碼重用的重要性,無(wú)論這些代碼是HTML、還是PHP代碼。例如,你必須至少每年改變一次包含版權(quán)信息的頁(yè)腳,如果你的網(wǎng)站含有1000個(gè)頁(yè)面,每年修改一次也是個(gè)很煩人的事兒。 

  在PHP中,至少有幾個(gè)函數(shù)可以幫助你實(shí)現(xiàn)代碼重用的目的,所使用的函數(shù)取決于你所重用的代碼,主要的函數(shù)有: 

  * include() and include_once() 

  * require() and require_once() 

  include()函數(shù)包含并對(duì)給定的文件進(jìn)行計(jì)算,例如: 

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

  在include文件中的任何代碼都在include()出現(xiàn)的代碼范圍內(nèi)執(zhí)行,你可以通過(guò)聯(lián)合使用include()和fopen()在自己的服務(wù)器上包含靜態(tài)文件,在另一臺(tái)服務(wù)器上包含目標(biāo)文件。 

  include_once()的功能與include()相同,二者之間的區(qū)別在于它會(huì)檢查一個(gè)文件中的代碼是否已經(jīng)包含在現(xiàn)有的腳本中,如果代碼已經(jīng)存在,則不會(huì)再次包含它。 

   require()函數(shù)用給定文件的內(nèi)容取代它本身,這一代替過(guò)程發(fā)生在PHP引擎編譯代碼期間,而不是在執(zhí)行期間進(jìn)行,它不象include()那樣會(huì)首先進(jìn)行計(jì)算。require()函數(shù)更多地用在靜態(tài)元素中,而include()更多地用于動(dòng)態(tài)元素中。與include_once()類似的是,require_once()將首先檢查是否已經(jīng)插入給定的代碼,如果代碼已經(jīng)存在,就不再插入了。 

  為也了解其內(nèi)容,在版權(quán)信息、靜態(tài)文字和其他不包含變量的元素或者依賴其他正在執(zhí)行的腳本的元素中我更趨向于使用require函數(shù)。例如: 

  <HTML> 

  <HEAD><TITLE>Something</TITLE></HEAD> 

  <BODY> 

  [a lot of content] 

  <? 

  // insert copyright 

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

  ?> 

  </BODY> 

  </HTML> 

  另一方面,我經(jīng)常在文件的開始使用include()來(lái)控制許多的函數(shù): 

  <? 

  //得到函數(shù)庫(kù) 

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

  // do PHP things with my functions ?> 

  <HTML> 

  <HEAD><TITLE>Something</TITLE></HEAD> 

  <BODY> 

  [a lot of content] 

  </BODY> 

  </HTML> 

  下一個(gè)問(wèn)題就該是“include和require文件在哪里?”,對(duì)這個(gè)問(wèn)題簡(jiǎn)單的回答是,“系統(tǒng)中的任意地方?!比绻愕拇a中包含有帶有用戶名和口令的數(shù)據(jù)庫(kù)連接,你肯定不會(huì)將它們都放在文檔根目錄中向所有的人都開放。 

  included或required文件可以在系統(tǒng)上的任何地方,只要PHP運(yùn)行的系統(tǒng)上的用戶可以訪問(wèn)這些文件即可,你可以使這些文件具有任何后綴,或者不使用后綴。 

  使用include()和require()對(duì)在網(wǎng)站中的元素進(jìn)行具體化是一種普遍的現(xiàn)象,并在需要對(duì)網(wǎng)站升級(jí)時(shí),給你帶來(lái)很大的方便。 

四、PHP和文件系統(tǒng)的維護(hù) 
  PHP中有許多與文件系統(tǒng)有關(guān)的函數(shù),這些函數(shù)不僅可以打開文件,還可以顯示目錄中的內(nèi)容、移動(dòng)文件和其他一些功能,許多人甚至用PHP開發(fā)基于互聯(lián)網(wǎng)的文件資源管理器。 

  關(guān)于文件路徑的解釋:在Windows中,可以在路徑中使用/和\符號(hào),而在其他的操作系統(tǒng)中只能使用/符號(hào)。出于一致性的緣故,我們統(tǒng)一使用/符號(hào)。 

  下面的腳本樣例可以顯示一個(gè)目錄清單,注釋已經(jīng)包含在代碼中: 

  <? /*把要讀取的目錄的全路徑名存入一個(gè)名字為$dir_name的變量中。 */ 

  $dir_name = "/home/me/"; 

  /* 創(chuàng)建一個(gè)句柄,其值是打開一個(gè)給定目錄的結(jié)果*/ 

  $dir = opendir($dir_name); 

  /* 建立一個(gè)文字塊,用以放置列表元素(文件名字)*/ 

  $file_list = "<ul>"; 

  /* 使用一個(gè)while語(yǔ)句,讀取已經(jīng)打開的目錄中的所有元素,如果文件的名字不是“.”或“..”,則顯示列表中的名字*/ 

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

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

  $file_list .= "<li>$file_name"; 

  } 

  } 

  $file_list .= "</ul>"; 

  /*關(guān)閉打開的目錄,結(jié)束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> 

  好了,我們已經(jīng)得到了一個(gè)目錄清單。需要注意的是,要讀取一個(gè)文件(稍后我們將進(jìn)行講解)或目錄的內(nèi)容,PHP運(yùn)行的系統(tǒng)上的用戶必須至少有讀取文件的權(quán)限。 

  下面是一個(gè)如何拷貝文件的例子: 

  <? /*把你要拷貝的原文件的全路徑賦給一個(gè)名字為$original的變量中,把拷貝的文件的全路徑賦予一個(gè)名字為$copied的變量中*/ 

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

  $copied = "/archive/mydatabasedumo_1010"; 

  /* 使用copy()函數(shù)拷貝原始文件,如果拷貝沒(méi)有完成則會(huì)顯示一個(gè)錯(cuò)誤信息*/ 

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

  ?> 

  這個(gè)例子是一個(gè)文件備份系統(tǒng)的原型。在這段腳本運(yùn)行時(shí),它把文件拷貝到一個(gè)不同的位置進(jìn)行保存。稍微修改一下守護(hù)程序,就可以在一天中你指定的時(shí)刻執(zhí)行它,而無(wú)需用戶的干預(yù)。 

  假定你在系統(tǒng)上安裝了Lynx,可以創(chuàng)建一個(gè)守護(hù)程序的條目訪問(wèn)這個(gè)文件,訪問(wèn)這個(gè)文件會(huì)運(yùn)行這個(gè)腳本并建立一個(gè)拷貝文件,下面的例子將在上午5點(diǎn)鐘運(yùn)行這個(gè)腳本,然后關(guān)閉Lynx: 

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

  如果運(yùn)行的是CGI版本的PHP,可以跳過(guò)Lynx部分,而直接調(diào)用二進(jìn)制文件: 

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

五、豐富的數(shù)組函數(shù) 
  PHP 4.0中新添加了30個(gè)與組數(shù)有關(guān)的函數(shù),其中一些常見(jiàn)的函數(shù)可以判斷一個(gè)數(shù)組中是否包含某個(gè)元素,對(duì)一個(gè)數(shù)組中的元素進(jìn)行計(jì)數(shù),添加或刪除數(shù)組中的元素或者對(duì)數(shù)組中的元素進(jìn)行排序。 

  如果有一個(gè)很大的數(shù)組,而你需要找出其中是否包含一個(gè)特定的元素,就可以使用in_array()。下面的例子將顯示“Not found in this array”,因?yàn)樵谝粋€(gè)名字為$namesArray的數(shù)組中查找Albert,而在$namesArray數(shù)組中不存在這樣一個(gè)元素。 

  <? $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,就會(huì)得到“You've found it!”的信息,因?yàn)镸ary是$namesArray數(shù)組中的一個(gè)元素。 

  如果要對(duì)一個(gè)數(shù)組中的元素個(gè)數(shù)進(jìn)行計(jì)數(shù),只要簡(jiǎn)單地使用count()函數(shù)即可: 

  <? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John"); 

  $count = count($namesArray); ?> 

  返回的$count的值為7。 

  可以在一個(gè)數(shù)組的開頭或結(jié)尾處添加元素,還可以使用array_merge()來(lái)建立一個(gè)包含二個(gè)或更多數(shù)組中元素的新數(shù)組,合并時(shí),元素的順序會(huì)按指定的順序排列,如果原來(lái)的數(shù)組是被排過(guò)序的,在合并后需要對(duì)它重新排序。 

  我們可以首先利用array_push()在數(shù)組的結(jié)尾處添加一個(gè)元素: 

  <? /* 建立一個(gè)數(shù)組 */ 

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

  /* 向數(shù)組中添加元素 */ 

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

  /*顯示每個(gè)元素及其序號(hào)*/ 

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

  echo "$key : $value<br>"; 

  } 

  ?> 

  運(yùn)行上面的程序?qū)⒌玫较旅娴慕Y(jié)果: 

  0 : apple 

  1 : orange 

  2 : banana 

  3 : kiwi 

  4 : pear 

  5 : grape 

  6 : pineapple 

  7 : tomato 

  如果需要在數(shù)組的開頭添加元素,其代碼與上面的代碼差不多,唯一的不同之處是需要用array_unshift()代替array_push()。 

  <? 

  /* 建立一個(gè)數(shù)組*/ 

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

  /* 向數(shù)組中添加元素*/ 

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

  /* 顯示每個(gè)元素及其序號(hào)*/ 

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

  echo "$key : $value<br>"; 

  } 

  ?> 

  運(yùn)行上面的程序?qū)⒌玫较旅娴慕Y(jié)果: 

  0 : grape 

  1 : pineapple 

  2 : tomato 

  3 : apple 

  4 : orange 

  5 : banana 

  6 : kiwi 

  7 : pear 

  array_merge()函數(shù)可以把二個(gè)或更多的數(shù)組合并為一個(gè)數(shù)組。 

  <? /*建立第一個(gè)數(shù)組*/ 

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

  /*/建立第二個(gè)數(shù)組*/ 

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

  /*把這二個(gè)數(shù)組合并為一個(gè)數(shù)組*/ 

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

  /* 顯示每個(gè)元素及其序號(hào)*/ 

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

  echo "$key : $value<br>"; 

  } 

  ?> 

  運(yùn)行上面的腳本將得到下面的結(jié)果: 

  0 : apple 

  1 : orange 

  2 : banana 

  3 : kiwi 

  4 : pear 

  5 : carrot 

  6 : green beans 

  7 : asparagus 

  8 : artichoke 

  9 : corn 

  現(xiàn)在我們已經(jīng)掌握了如何添加元素和合并數(shù)組,我們?cè)賮?lái)看看如何從一個(gè)數(shù)組中刪除元素。從一個(gè)數(shù)組的末尾刪除一個(gè)元素可以使用array_pop()函數(shù),使用array_shift()函數(shù)可以從一個(gè)數(shù)組的開頭刪除一個(gè)元素。盡管使用array_pop()或 array_shift()從數(shù)組中刪除了一個(gè)元素,你還可以把這個(gè)元素當(dāng)作一個(gè)變量來(lái)使用。 

  使用array_pop()從一個(gè)數(shù)組的末尾刪除一個(gè)元素: 

  <? 

  /*建立一個(gè)數(shù)組*/ 

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

  /* 從數(shù)組的末尾刪除一個(gè)元素*/ 

  $popped = array_pop($fruitArray); 

  /* 顯示刪除后數(shù)組的內(nèi)容和你刪除的元素*/ 

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

  echo "$key : $value<br>"; 

  } 

  echo "<br>and finally, in $popped: $popped"; 

  ?> 

  運(yùn)行上面的腳本會(huì)得到下面的結(jié)果: 

  0 : apple 

  1 : orange 

  2 : banana 

  3 : kiwi 

  and finally, in $popped: pear 

  我們?cè)賮?lái)討論一個(gè)從一個(gè)數(shù)組的末尾刪除元素的例子: 

  <? 

  /* 建立一個(gè)數(shù)組*/ 

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

  /*從一個(gè)數(shù)組的開始刪除一個(gè)元素*/ 

  $shifted = array_shift($fruitArray); 

  /* 顯示刪除后數(shù)組的內(nèi)容和你刪除的元素*/ 

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

  echo "$key : $value<br>"; 

  } 

  echo "<br>and finally, in $shifted: $shifted"; 

  ?> 

  運(yùn)行上述腳本會(huì)得到如下的顯示結(jié)果: 

  0 : orange 

  1 : banana 

  2 : kiwi 

  3 : pear 

  and finally, in $shifted: apple 

  另外還有幾個(gè)函數(shù)可以對(duì)數(shù)組中的元素進(jìn)行排序,但在這里我們將只簡(jiǎn)要介紹基本的排序函數(shù),說(shuō)明排序的過(guò)程: 

  <? /*建立一個(gè)數(shù)組*/ 

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

  /* 對(duì)數(shù)組進(jìn)行排序*/ 

  sort($fruitArray); 

  /*顯示每個(gè)元素及其序號(hào)*/ 

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

  echo "$key : $value<br>"; 

  } 

  ?> 

  運(yùn)行上述的腳本會(huì)得到如下的顯示結(jié)果: 

  0 : apple 

  1 : banana 

  2 : kiwi 

  3 : orange 

  4 : pear 

相關(guān)文章

最新評(píng)論