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

PHP初學者頭疼問題總結

2013-11-15 12:24:05  來源: 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:windowstemp 
】顯示錯誤信息 
當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" 
修改密碼 
】header 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_name"r"); 
@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/20877.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.