熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

最令PHP初學者頭痛的十四個問題

2013-11-15 12:42:26  來源: PHP編程 

  頁面之間無法傳遞變量 getpostsession在最新的php版本中自動全局變量是關閉的所以要從上一頁面取得提交過來得變量要使用$_GET[foo]$_POST[foo]$_SESSION[foo]來得到當然也可以修改自動全局變量為開(phpini改為register_globals = On)考慮到兼容性還是強迫自己熟悉新的寫法比較好
  
  Win下apache 用get方法傳遞中文參數會出錯

  testphp?a=你好&b=你也好

  傳遞參數是會導致一個內部錯誤
 
  解決辦法:testphp?a=urlencode(你好)&b=urlencode(你也好)

  win下的session不能正常工作

  phpini默認的sessionsave_path = /tmp

  這顯然是linux下的配置win下php無法讀寫session文件導致session無法使用把它改成一個絕對路徑就可以了例如sessionsave_path = c:windows emp

  顯示錯誤信息

  當phpini的display_errors = On並且error_reporting = E_ALL時將顯示所有的錯誤和提示調試的時候最好打開以便糾錯如果你用以前php寫法錯誤信息多半是關於未定義變量的變量在賦值以前調用會有提示解決辦法是探測或者屏蔽

  例如顯示$foo可以if(isset($foo)) echo $foo 或者echo @$foo

  Win下mail()不能發送電子郵件

  在linux下配置好的sendmail可以發送在win下需要調用smtp服務器來發送電子郵件修改phpini的SMTP = ip //ip是不帶驗證功能的smtp服務器(網上很難找到)

  php發送郵件的最好解決方法是用socket直接發送到對方email服務器而不用轉發服務器

  初裝的mysql如果沒有設置密碼應該使用update mysqluser set password=yourpassword where user=root 修改密碼

  eader already sent

  這個錯誤通常會在你使用HEADER的時候出現他可能是幾種原因你在使用HEADER前PRING或者ECHO了你當前文件前面有空行你可能INCLUDE了一個文件該文件尾部有空行或者輸出也會出現這種錯誤

  更改phpini後沒有變化

  重新啟動web server比如IISApache等等然後才會應用最新的設置

  php在上面安裝(ISAPI的安裝方法懇請高手指教)

  PHP的phpisapidll好像和有些沖突只能用CGI模式安裝

  步驟一先wwwphpnet 下在一個安裝程序我是裝的是phpinstallerexe你也可以去找最新的版本在安裝phpinstallerexe之前保證你的IIS啟動了並能夠訪問安裝好以後在默認網站>應用程序配置

  步驟二點擊 web服務擴展 >新建web服務擴展

  步驟三 擴展名>php然後添加

  步驟四找到phpexe的路徑添加上去

  步驟五 確定就可以了!
 
  步驟六 選擇php的服務擴展然後點擊允許

  有時候sql語句不起作用對數據庫操作失敗最簡便的調試方法echo那句sql看看變量的值能得到不

  include和require的區別

  兩者沒有太大的區別如果要包含的文件不存在include提示notice然後繼續執行下面的語句require提示致命錯誤並且退出

  據我測試win平台下它們都是先包含後執行所以被包含文件裡最好不要再有include或require語句這樣會造成目錄混亂或許*nux下情況不同暫時還沒測試

  如果一個文件不想被包含多次可以使用include_once或require_once## 讀取寫入文檔數據

  function r($file_name)
  {
   $filenum=@fopen($file_namer);
   @flock($filenumLOCK_SH);
   $file_data=@fread($filenumfilesize($file_name));
   @fclose($filenum);
   return $file_data;
  }
  function w($file_name$data$method=w)
  {
   $filenum=@fopen($file_name$method);
   flock($filenumLOCK_EX);
   $file_data=fwrite($filenum$data);
   fclose($filenum);
   return $file_data;
  } 

  isset()和empty()的區別

  兩者都是測試變量用的但是isset()是測試變量是否被賦值而empty()是測試一個已經被賦值的變量是否為空

  如果一個變量沒被賦值就引用在php裡是被允許的但會有notice提示如果一個變量被賦空值$foo=或者$foo=或者 $foo=false那麼empty($foo)返回真isset($foo)也返回真就是說賦空值不會注銷一個變量
 
  要注銷一個變量可以用 unset($foo)或者$foo=NULL

  mysql查詢語句包含有關鍵字

  php查詢mysql的時候有時候mysql表名或者列名會有關鍵字這時候查詢會有錯誤例如表名是order查詢時候會出錯簡單的辦法是sql語句裡表名或者列名加上`[tab鍵上面]來加以區別例如select * from `order`

  通過HTTP協議一次上傳多個文件的方法

  有兩個思路是同一個方法的兩種實現具體程序還需自己去設計

  在form中設置多個文件輸入框用數組命名他們的名字如下

  <form action= method=post>
  <input type=file name=usefile[]>
  <input type=file name=usefile[]>
  <input type=file name=usefile[]>
  </form> 

  這樣在服務器端做以下測試

  echo <pre>;
  print_r($_FILES);
  echo </pre>

  在form中設置多個文件輸入框但名字不同如下

  <form action= method=post>
  <input type=file name=usefile_a>
  <input type=file name=usefile_b>
  <input type=file name=usefile_c>
  </form> 

  在服務器端做同樣測試

  echo <pre>;
  print_r($_FILES);
  echo </pre>;


From:http://tw.wingwit.com/Article/program/PHP/201311/21442.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.