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()).
//extract ( array $var_array [, int $extract_type [, string $prefix ]] )
//本函數用來將變數從陣列匯入到目前的符號表中。接受結合數組 var_array 作為參數並將鍵//名當作變數名,值作為變數的值。對每個鍵/值對都會在目前的符號表中建立變量,並受到 //extract_type 和 prefix 參數的影響。
//import_request_variables ( string $types [, string $prefix ] )超全局,在$_ $*時有漏洞
方法三:一個一個讀取變數$a=$_GET["a"];$b= $_POST["b"]等,這種方法雖然麻煩,但比較安全.
2:調試你的程式
在運行時必須知道某個變數為何值。我是這樣做的,建立一檔案debug.php,其內容如下:
PHP程式碼:---------------------------- -------------------------------------------------- --
複製程式碼
Ob_Start();
Session_Start();
Echo "
";<br>本頁得到的_POST變數有:";<br> Print_R($_POST);<br> Echo "本頁得到的_COOKIE變數有:";<br> Print_R($_COOKIE);<br>)<br> Print_R($_COOKIE);<br> ";<br> Print_R($_SESSION);<br> Echo "
---------------------------- -------------------------------------------------- --
然後在php.ini中設定:include_path = "c:/php",並將debug.php放在此資料夾,
以後就可以在每個網頁裡包含此文件,查看得到的變數名稱和值.
3:如何使用session
凡是與session有關的,之前必須調用函數session_start();
為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檔案的存放路徑.
解決方法打開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 "
";<br>Echo $_GET["Name"];<br>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{
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; ,$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]
nl2br() 函數在字符字串中的每個新行(n) 之前插入HTML 換行符(
)。
htmlentities(string,quotestyle,character-set)
quotestyle可選。規定如何編碼單引號和雙引號。
ENT_COMPAT - 預設。僅編碼雙引號。
ENT_QUOTES - 編碼雙引號和單引號。
ENT_NOQUOTES - 不編碼任何引號。
character-set
ISO-8859-1 - 預設。西歐。
ISO-8859-15 - 西歐(增加 Euro 符號以及法語、芬蘭字母)。
UTF-8 - ASCII 相容多位元組8 位元Unicode
cp866 - DOS 專用Cyrillic 字元集
cp1251 - Windows 專用Cyrillic 字元集
cp1252 - Windows 專用西歐字元集標準字元集
BIG5 - 繁體中文
----------------------------------------- ---------------------------------------
8:怎麼在函數裡取得函數外的變數值
PHP程式碼:--------------------------------------- -----------------------------------------
[php]
$a= "PHP";
foo();
Function foo()
{
global $a;//刪除這裡看看是什麼結果
Echo "$a";
}
[/php]
---- -------------------------------------------------- --------------------------
9:我怎麼知道系統預設支援什麼函數
PHP程式碼:---- -------------------------------------------------- --------------------------
[php]
$arr = get_defined_functions();
Function php() {
}
echo "
";<br>Echo "這裡顯示系統所支援的所有函數,和自定以函數phpn";<br>print_r($arr);<br>echo "
[/php]
--------- -------------------------------------------------- ---------------------
10:如何比較兩個日期相差幾天
PHP代碼:---------- -------------------------------------------------- --------------------
[php]
$Date_1="2003-7-15";//也可以是:$Date_1="2003-6 -25 23:29:14";
$Date_2="1982-10-1";
$Date_List_1=explode("-",$Date_1);
$Date_List_2=explode("-",$Date_2);
$Date_List_2=explode("-",$Date_2);
$Date_List_2=explode("-",$Date_2);
$Date_List_2=explode("-",$Date_2);
$Date_List_2=explode("-",$Date_2);
$Date_List_2=explode("-",$Date_2);
$Date_。 $d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]);
$d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2 [2],$Date_List_2[0]);
$Days=round(($d1-$d2)/3600/24);
Echo "偶已經奮鬥了$Days 天^_^";
[/php]
(strtotime($Date_1) - strtotime($Date_2))/3600/24
------------------------------ --------------------------------------------------
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.以後任何錯誤都不會提示.
那什麼是error_reporting?
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;依附在頭
auto_append_file = auto_append_file.php; :------------------------------------------------- -------------------------------
[php]
Include "auto_prepend_file.php" ;
.... ...//這裡是你的程式
Include "auto_append_file.php";
[/php]
----------------------- -------------------------------------------------- -------
13:如何利用PHP上傳檔案
PHP程式碼:------------------------ -------------------------------------------------- ------
[php]
[php]
$str=$_POST['str'];
eval(" $o=$str;");
Echo "$o";
[/php]
--------------------------- -------------------------------------------------- ---
另外,用此函數必須特別小心!!
如果有人輸入format: d:會是什麼結果?

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
