天天看點

收錄:Php高手帶路--問題彙總解答

 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,其内容如下:

  PHP代碼:

  <?PHP

  Ob_Start();

  Session_Start();

  Echo "<pre>";

  Echo "本頁得到的_GET變量有:";

  Print_R($_GET);

  Echo "本頁得到的_POST變量有:";

  Print_R($_POST);

  Echo "本頁得到的_COOKIE變量有:";

  Print_R($_COOKIE);

  Echo "本頁得到的_SESSION變量有:";

  Print_R($_SESSION);

  Echo "</pre>";

  ?>

  然後在php.ini中設定:include_path

=

"c:/php",并将debug.php放在此檔案夾,以後就可以在每個網頁裡包含此檔案,檢視得到的變量名和值.

  3:如何使用session

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

  為session付值很簡單,如:

  <?php

  Session_start();

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

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

  Echo $_SESSION["Name"];

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

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

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

  取消session可以這樣:

  session_start();

  session_unset();

  session_destroy();

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

  注意:

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

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

  1行

  2行 3行

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

  4行 .....

  5行

?>

  提示1:

  凡是出現" ........headers already

sent.......... ",就是Session_Start()之前向浏覽器輸出資訊.去掉輸出就正常,(COOKIE也會出現這種錯誤,錯誤原因一樣)

  提示2:

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

  1行 <?PHP Ob_Start();

  ........這裡是你的程式......

  2:這是什麼錯誤

  Warning:

session_start(): open(/tmp\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR)

failed:....

因為你沒有指定session檔案的存放路徑.

  解決方法:

  (1)在c盤建立檔案夾tmp

  (2)打開php.ini,找到session.save_path,修改為session.save_path=

"c:/tmp"

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

  $Var="hello php";//修改為$Var="     hello

php";試試得到什麼結果

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

  header("location:$post");

  receive.php的内容:

  Echo   $_GET["Name"];

  正确的方法是:

  $Var="hello php";

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

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

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

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

  $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格式的字元串不被解釋,而是照原樣顯示

  $str="<h1>PHP</h1>";

  Echo "被解釋過的: ".$str."<br>經過處理的:";

  Echo   htmlentities(nl2br($str));

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

  $a="PHP";

  foo();

  Function foo()

  {

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

   Echo "$a";

  9:我怎麼知道系統預設支援什麼函數

  <?php 

  $arr = get_defined_functions(); 

  Function php()

{

  echo   "<pre>"; 

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

  print_r($arr); 

  echo   "</pre>"; 

  ?>  

  10:如何比較兩個日期相差幾天

  $Date_1="2003-7-15";//也可以是:$Date_1="2003-7-15

23:29:14";

  $Date_2="1982-10-1";

  $d1=strtotime($Date_1);

  $d2=strtotime($Date_2);

  $Days=round(($d1-$d2)/3600/24);

  Echo   "偶已經奮鬥了

$Days 天^_^";

  11:為什麼我更新PHP後,原來的程式出現滿屏的

Notice: Undefined

variable:

  這是警告的意思,由于變量未定義引起的.

  打開php.ini,找到最下面的error_reporting,修改為error_reporting

= E_ALL & ~E_NOTICE

  對于Parse

error錯誤

  error_reporting(0)無法關閉.

  如果你想關閉任何錯誤提示,打開php.ini,找到display_errors,設定為display_errors

= Off.以後任何錯誤都不會提示.

  那什麼是?

  12:蟻朐诿扛鑫募钋埃詈竺娑技由弦晃募?但一個一個添加很麻煩

  1:打開php.ini檔案

  設定

include_path=

"c:"

  2:寫兩個檔案 

  auto_prepend_file.php

和 auto_append_file.php

儲存在c盤,他們将自動依附在每個php檔案的頭部和尾部.

  3:在php.ini中找到:

  Automatically

add files before or after any PHP document.

  auto_prepend_file

= auto_prepend_file.php;依附在頭部

  auto_append_file =

auto_append_file.php;依附在尾部

  以後你每個php檔案就相當于

  Include "auto_prepend_file.php" ;

  .......//這裡是你的程式

  Include "auto_append_file.php";

  13:如何利用PHP上傳檔案

  <html><head>

  <title>上載檔案表單</title></head> 

  <body> 

  <form

enctype="multipart/form-data" action="" method="post"> 

  請選擇檔案:

<br>

  <input name="upload_file"

type="file"><br>

  <input type="submit"

value="上傳檔案"> 

  </form> 

  </body>

  </html> 

  <?

  $upload_file=$_FILES[‘upload_file‘][‘tmp_name‘];

  $upload_file_name=$_FILES[‘upload_file‘][‘name‘];

  if($upload_file){

  $file_size_max = 1000*1000;//

1M限制檔案上傳最大容量(bytes)

  $store_dir = "d:/";//

上傳檔案的儲存位置

  $accept_overwrite = 1;//是否允許覆寫相同檔案

  // 檢查檔案大小

  if ($upload_file_size > $file_size_max)

  echo "對不起,你的檔案容量大于規定";

  exit;

  // 檢查讀寫檔案

(file_exists($store_dir . $upload_file_name)

&& !$accept_overwrite)

  Echo   "存在相同檔案名的檔案";

  //複制檔案到指定目錄

(!move_uploaded_file($upload_file,$store_dir.$upload_file_name))

  echo "複制檔案失敗";

  Echo   "<p>你上傳了檔案:";

  echo  $_FILES[‘upload_file‘][‘name‘];

  echo "<br>";

  //用戶端機器檔案的原名稱。 

  Echo   "檔案的

MIME 類型為:";

  echo $_FILES[‘upload_file‘][‘type‘];

  //檔案的

MIME 類型,需要浏覽器提供該資訊的支援,例如“image/gif”。 

  Echo   "上傳檔案大小:";

  echo $_FILES[‘upload_file‘][‘size‘];

  //已上傳檔案的大小,機關為位元組。 

  Echo   "檔案上傳後被臨時儲存為:";

  echo $_FILES[‘upload_file‘][‘tmp_name‘];

  //檔案被上傳後在服務端儲存的臨時檔案名。 

  $Erroe=$_FILES[‘upload_file‘][‘error‘];

  switch($Erroe){

          case 0:

             Echo   "上傳成功";

break;

          case 1:

             Echo   "上傳的檔案超過了 php.ini 中 upload_max_filesize

選項限制的值.";

          case 2:

             Echo   "上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE

選項指定的值。";    break;

          case 3:

             Echo   "檔案隻有部分被上傳";break;

          case 4:

             Echo   "沒有檔案被上傳";break;

  14:如何配置GD庫

  下面是我的配置過程

  1:用dos指令(也可以手動操作,拷貝dlls檔案夾裡所有dll檔案到system32目錄下)

copy c:\php\dlls\*.dll

c:\windows\system32\ 

  2:打開php.ini

  設定extension_dir

"c:/php/extensions/";

  3:

  extension=php_gd2.dll;把extension前面的逗号去掉,如果沒有php_gd2.dll,php_gd.dll也一樣,保證确實存在這一檔案c:/php/extensions/php_gd2.dll

  4:運作下面程式進行測試

  Ob_end_flush();

  //注意,在此之前不能向浏覽器輸出任何資訊,要注意是否設定了

auto_prepend_file.

  header ("Content-type: image/png");

  $im =

@imagecreate (200, 100)

     or die

("無法建立圖像");

  $background_color = imagecolorallocate ($im, 0,0, 0);

  $text_color = imagecolorallocate ($im, 230, 140, 150);

  imagestring ($im, 3, 30, 50,  "A

Simple Text String", $text_color);

  imagepng ($im);

  

  15:什麼是UBB代碼

  UBB代碼是HTML的一個變種,是Ultimate

Bulletin Board (國外一個BBS程式,國内也有不少地方使用這個程式)采用的一種特殊的TAG.

  即使禁止使用

HTML,你也可以用 UBBCode? 來實作.也許你更希望使用 UBBCode? 而不是 HTML, 即使論壇允許使用 HTML,

因為使用起來代碼較少也更安全.

  待續...