萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> 錯誤總結PHP

錯誤總結PHP

   錯誤總結PHP-不斷更新(新手必看)

  做開發請開啟全部錯誤提示:error_reporting = E_ALL | E_STRICT

  屏蔽錯誤提示等於掩耳盜鈴。

  代碼寫規范,錯誤少一半。

  1:為什麼我得不到變量

  我在一網頁向另一網頁POST數據name,為什麼輸出$name時卻得不到任何值?

  在PHP4.2以後的版本中register_global默認為off

  若想取得從另一頁面提交的變量:

  方法一:在PHP.ini中找到register_global,並把它設置為on.

  方法二:在接收網頁最前面放上這個extract($_POST);extract($_GET);(注意extract($_SESSION)前必須要有Session_Start()).

  方法三:一個一個讀取變量$a=$_GET["a"];$b=$_POST["b"]等,這種方法雖然麻煩,但比較安全.

  2:調試你的程序

  在運行時必須知道某個變量為何值。我是這樣做的,建立一文件debug.php,其內容如下:

  Ob_Start();

  Session_Start();

  Echo ""; Echo "本頁得到的_GET變量有:"; Print_R($_GET); Echo "本頁得到的_POST變量有:"; Print_R($_POST); Echo "本頁得到的_COOKIE變量有:"; Print_R($_COOKIE); Echo "本頁得到的_SESSION變量有:"; Print_R($_SESSION); Echo "";

  然後在php.ini中設置:include_path = "c:/php",並將debug.php放在此文件夾,

  以後就可以在每個網頁裡包含此文件,查看得到的變量名和值.

  3:如何使用session

  凡是與session有關的,之前必須調用函數session_start();

  為session付值很簡單,如:

  PHP代碼:------------------------------------------------------------------

  [php]

  Session_start();

  $Name = "這是一個Session例子";

  Session_Register("Name");//注意,不要寫成:Session_Register("$Name");

  Echo $_SESSION["Name"];

  //之後$_SESSION["Name"]為"這是一個Session例子"

  [/php]

  --------------------------------------------------------------------

  在php4.2之後,可以為session直接付值:

  PHP代碼:-----------------------------------------------------

  [php]

  Session_Start();

  $_SESSION["name"]="value";

  [/php]

  --------------------------------------------------------

  取消session可以這樣:

  PHP代碼:-----------------------------------------------------

  [php]

  session_start();

  session_unset();

  session_destroy();

  [/php]

  --------------------------------------------------------------------------------

  取消某個session變量在php4.2以上還有BUG.

  注意:

  1:在調用Session_Start()之前不能有任何輸出.例如下面是錯誤的.

  ==========================================

  1行

  2行 [php]

  3行 Session_Start();//之前在第一行已經有輸出

  4行 .....

  5行 [/php]

  ==========================================

  提示1:

  凡是出現"........headers already sent..........",就是Session_Start()之前向浏覽器輸出信息.

  去掉輸出就正常,(COOKIE也會出現這種錯誤,錯誤原因一樣)

  提示2:

  如果你的Session_Start()放在循環語句裡,並且很難確定之前哪裡向浏覽器輸出信息,可以用下面這種方法:

  1行 [php] Ob_Start(); [/php]

  ........這裡是你的程序......

  2:這是什麼錯誤

  Warning: session_start(): open(/tmpsess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....

  因為你沒有指定session文件的存放路徑.

  解決方法:

  (1)在c盤建立文件夾tmp

  (2)打開php.ini,找到session.save_path,修改為session.save_path= "c:/tmp"

  4:為什麼我向另一網頁傳送變量時,只得到前半部分,以空格開頭的則全部丟失

  PHP代碼:-----------------------------------------------------------

  [php]

  $Var="hello php";//修改為$Var=" hello php";試試得到什麼結果

  $post= "receive.php?Name=".$Var;

  header("location:$post");

  [/php]

  -----------------------------------------

  receive.php的內容:

  PHP代碼:---------------------------------

  [php]

  Echo ""; Echo $_GET["Name"]; Echo "";

  [/php]

  --------------------------------------------

  正確的方法是:

  PHP代碼:-----------------------------------

  [php]

  $Var="hello php";

  $post= "receive.php?Name=".urlencode($Var);

  header("location:$post");

  [/php]

  --------------------------------------------------------------------------------

  在接收頁面你不需要使用Urldecode(),變量會自動編碼.

  5:如何截取指定長度漢字而不會出現以"[/php]"結尾,超出部分以"..."代替

  一般來說,要截取的變量來自Mysql,首先要保證那個字段長度要足夠長,一般為char(200),可以保持100個漢字,包括標點.

  PHP代碼:--------------------------------------------------------------------------------

  [php]

  $str="這個字符好長呀,^_^";

  $Short_Str=showShort($str,4);//截取前面4個漢字,結果為:這個字符...

  Echo "$Short_Str";

  Function csubstr($str,$start,$len)

  {

  $strlen=strlen($str);

  $clen=0;

  for($i=0;$i<$strlen;$i++,$clen++)

  {

  if ($clen>=$start+$len)

  break;

  if(ord(substr($str,$i,1))>0xa0)

  {

  if ($clen>=$start)

  $tmpstr.=substr($str,$i,2);

  $i++;

  }

  else

  {

  if ($clen>=$start)

  $tmpstr.=substr($str,$i,1);

  }

  }

  return $tmpstr;

  }

  Function showShort($str,$len)

  {

  $tempstr = csubstr($str,0,$len);

  if ($str<>$tempstr)

  $tempstr .= "..."; //要以什麼結尾,修改這裡就可以.

  return $tempstr;

  }

  --------------------------------------------------------------------------------

  6:規范你的SQL語句

  在表格,字段前面加上"`",這樣就不會因為誤用關鍵字而出現錯誤,

  當然我並不推薦你使用關鍵字.

  例如

  $Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

  "`"怎麼輸入? 在TAB鍵上面.

  7:如何使Html/PHP格式的字符串不被解釋,而是照原樣顯示

  PHP代碼:--------------------------------------------------------------------------------

  [php]

  $str="

  PHP

  ";

  Echo "被解釋過的: ".$str."

  經過處理的:";

  Echo htmlentities(nl2br($str));

  [/php]

  --------------------------------------------------------------------------------

  8:怎麼在函數裡取得函數外的變量值

  PHP代碼:--------------------------------------------------------------------------------

  [php]

  $a="PHP";

  foo();

  Function foo()

  {

  global $a;//刪除這裡看看是什麼結果

  Echo "$a";

  }

  [/php]

  --------------------------------------------------------------------------------

  9:我怎麼知道系統默認支持什麼函數

  PHP代碼:--------------------------------------------------------------------------------

  [php]

  $arr = get_defined_functions();

  Function php() {

  }

  echo ""; Echo "這裡顯示系統所支持的所有函數,和自定以函數php

copyright © 萬盛學電腦網 all rights reserved