當前位置:首頁 » 編程語言 » php錯誤級別

php錯誤級別

發布時間: 2023-01-02 19:02:42

php中語句相同為什麼有一個會出錯

錯誤一:Parse error: syntax error, unexpected …

這種錯誤是PHP解析器在解析時遇到了語法錯誤,直譯為:

解析錯誤:語法錯誤,意料之外的…

通常是我們在寫代碼時,語法格式不對,比如:每一條語句都應當以英文分號結束,如果不寫分號,或打成了中文分號,就會報這樣的錯誤。這個錯誤還會在很多語法不正確的地方報錯出現。

錯誤二:Fatal error: Uncaught Error: Call to undefined function…

代碼在執行時遇到了致命錯誤,直譯為:

致命錯誤:未捕獲錯誤:調用了未定義的函數…

遇到這個錯誤其實非常好解決,因為這個提示非常明顯,就是看後面報錯在第幾行,找到這一行,仔細查看這一行中所使用的函數名字是否寫錯。 解決思路:既然提示調用了未定義的函數,就是說函數名無法識別,那肯定是寫錯函數名或自定義函數真的沒定義。

錯誤三:Notice: Array to string conversion in…

這個錯誤是初學者最容易遇到的,只是一個提示錯誤,級別非常低,不影響整個代碼的執行。出現 Parse error或Fatal error 時PHP程序會中斷執行。

錯誤提示可以理解為提示:數組在第…行轉換成字元串

一般是由echo後面輸出一個數組時導致的,也可能是數組作為字元串進行拼接運算時導致的。因為PHP是弱類型編程語言,在運算時會自動根據環境需要轉換數據類型。解決辦法就是找到提示的那一行,將數組提前處理好以後再進行字元串運算即可。

錯誤四:Parse error: syntax error, unexpected 『1』 (T_LNUMBER), expecting variable …

當出現PHP無法解析的語法錯誤時會提示這個,unexpected是意料之外的…,後面還有提示expecting是指希望出現… 。一般在變數名、函數名等取名不符合命名語法規范時會報這個錯。 解決辦法就是仔細看報錯的行命名是否正確。

錯誤五:Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given …

這個錯誤是一個警告錯誤,也不影響程序的執行。通常出現在資料庫讀取結果集數據時,初學者比較難找到錯誤的解決辦法,因為根據無法通過提示所在行找出錯誤。

直譯為:

警告:mysqli_fetch_assoc函數期望參數1是mysqli的結果集,但是給了一個布爾值。

也就是說當我們寫好SQL語句從資料庫讀取數據時,本身應該返回結果集,再給結果集中讀取數據。但是,結果集卻是一個布爾值,所以反推出極有可能是SQL語句寫錯了,導致執行出錯,結果集就成了執行結果false。

解決辦法:仔細檢查SQL語句,最好是將拼接好的SQL語句輸出出來看看,確認沒問題再提交到伺服器執行。

錯誤六:Notice: Undefined variable:…

直譯為:提示:未定義變數a

當使用了一個未定義的變數時,會報這個錯,只需要仔細檢查變數的定義或拼寫正確即可解決。

錯誤七:Notice: Undefined index: username in …

直譯為:提示:未定義的索引:username

通常在使用了一個未定義的數組元素時會出現,PHP中有一種特殊的關聯數組,可以使用鍵名訪問值,在提示是也按索引數組的方式提示,所以容易造成初學者誤解。 解決辦法就是仔細查看是不是數組鍵名是否寫錯或未定義。

錯誤八:亂碼

當看到網頁上顯示一段看不懂的符號、亂糟糟的繁體字或問號時,我們稱為亂碼。這是由於PHP生成HTML代碼時的字元集與瀏覽器默認展示的字元集不相同導致的。

解決辦法:

在PHP代碼的最頂部(任何輸出語句之前)加響應頭聲明字元集:

Ⅱ 如何讓PHP報錯

首先需要確定是否打開了錯誤報告,方法有兩個:
1.可以查看PHP配置文件,看是否打開錯誤報告:
display_errors = On
2.PHP腳本中有動態設置php.ini配置文件的方法,可以設置如下 :
ini_set('display_errors', 'On');
其次,需要設置錯誤報告級別:
error_reporting = E_ALL; // 最嚴格的錯誤報告級別, 一般在開發階段開啟
error_reporting = E_ALL &~ E_NOTICE // 除了notice以外的錯誤
error_reporting = E_ERROR | E_PARSE | e_CORE_ERROR // 只考慮致命的運行時錯誤,新解析錯誤和核心錯誤 。一般在生產環境中使用

Ⅲ php進程超時介面返回504錯誤分析

在一次介面測試中,發現返回的http 504 time out 的錯誤,然後查看了php-fpm的錯誤日誌,發現了如下錯誤

從表現上看,是php進程超時導致的進程被kill了,那麼這個超時時間以及kill的機制是跟哪些參數有關呢,這里系統這里一下。

Nginx服務一般因為php的錯誤或者超時會有兩種錯誤碼502 bad Gateway 或者 504 Gateway Time-out

一種情況是php產生了語法錯誤,比如循環調用、變數作用域錯誤、方法不存在等,如果開啟錯誤日誌輸出的話,這種錯誤在php-fpm的錯誤日誌中是可以看到調用棧信息的。

另外一種情況可能就是超時引起的php-fpm主動kill的情況,在php.ini和php.fpm中有兩個配置項,用來管理php腳本的最大執行時間

當php腳本的執行時間超過這個時間時,PHP-FPM不只會終止腳本的執行,還會終止執行腳本的Worker進程。所以Nginx會發現與自己通信的連接斷掉了,就會返回給客戶端502錯誤。

以頂部的錯誤為例,當報502錯誤是,nginx的errorlog中有如下日誌,:

所以只需將這兩項的值調大一些就可以讓PHP腳本不會因為執行時間長而被終止了。request_terminate_timeout可以覆蓋max_execution_time,

所以如果不想改全局的php.ini,那隻改PHP-FPM的配置就可以了。

此外要注意的是Nginx的upstream模塊中的max_fail和fail_timeout兩項。這兩個配置表示在fail_timeout事件內,如果fail的測試達到max_fail,那麼在接下來的fail_timeout時間內,Nginx都會認為上游伺服器掛掉了,都會返回502錯誤。

所以可以將max_fail調大一些,將fail_timeout調小一些。

PHP-FPM設置的腳本最大執行時間已經夠長了,但執行耗時PHP腳本時,發現Nginx報錯從502變為504了。這是為什麼呢?

因為我們修改的只是PHP的配置,Nginx中也有關於與上游伺服器通信超時時間的配置

以Nginx超時時間為90秒,PHP-FPM超時時間為300秒為例,報504 Gateway Timeout錯誤時的Nginx錯誤訪問日誌如下:

調高這三項的值(主要是read和send兩項,默認不配置的話Nginx會將超時時間設為60秒)之後,504錯誤也解決了。

而且這三項配置可以配置在http、server級別,也可以配置在location級別。擔心影響其他應用的話,就配置在自己應用的location中吧。

要注意的是factcgi_connect/read/send_timeout是對FastCGI生效的,而proxy_connect/read/send_timeout是對proxy_pass生效的。

參考鏈接: http://www.cnblogs.com/fei33423/p/8184098.html 感謝分享!

Ⅳ php問題求助,Notice: Undefined offset: 1 ,我的數組下標沒有越界啊為什麼會有這樣的提示呢

1、Notice的產生原因,使用了未定義的變數或者數組索引。

Ⅳ 這句話是什麼意思,網上查到說是設置 PHP 的報錯級別並返回當前級別。但還是不明白,能舉個例子嗎

例如E_CORE_ERROR指的是核心錯誤,如果只設置了E_CORE_ERROR而沒設置其它的,那麼只有出現核心錯誤時才報錯,而出現其它的就不報了,如出現 E_CORE_WARNING 時而沒設置了這個報錯就不報這個錯.

這是個錯誤報告篩選,就這么簡單

Ⅵ PHP自定義門面以後顯示錯誤

如果您是PHP老手,當然知道當PHP腳本出錯時發生了什麼事情。此時PHP解析器將在屏幕上給出錯誤信息,如 Fatal error: Call to undefined function on line 19 --,因此程序在此處終止。這個信息會嚇到客戶,他可能立即打電話和你進行咨詢。
幸運的是,這里有解決辦法。PHP擁有內置工具,可以讓開發人員捕捉腳本錯誤然後將它們轉到自定義的錯誤處理器。此時則可以對處理器進行編程顯示更多關於錯誤的詳細信息。還可以將錯誤寫入文件或資料庫以採取補救措施。有時候還可以對處理器編寫程序忽略錯誤消息。
本文中,我將闡述如何使用PHP的錯誤處理API構建用戶自定義的錯誤處理器,並且說明如何以簡單而友好的方式顯示和管理腳本的錯誤信息。
錯誤類型和報告級別
我們從最基本的開始。PHP有三種最基本的錯誤類型,從低級到高級分別為:注意、警告和錯誤(或致命錯誤)。通常情況下,注意和警告不會終止程序;但是致命錯誤則是危險故障(例如,調用一個沒有定義的函數或參考一個不存在的對象),將導致程序中斷。這些錯誤有可能在啟動、解析、編譯或運行時發生。
關鍵字如E_NOTICE, E_ERROR等用於表明錯誤的不同類型和等級。在PHP手冊上可以獲得它們的詳細信息列表。
腳本階段錯誤顯示由error_reporting()函數進行控制。這一函數針對不同的錯誤等級設置不同的參數。表A給出了使用此函數報告警告和致命錯誤的腳本程序。
表A
<?php
// display warnings and errors
error_reporting(E_WARNING | E_ERROR);
// this will generate a notice, which will never be displayed
echo $undefinedVar;
// this will generate a fatal error, which will be displayed
callUndefFunc();
?>
將表B中的代碼與上面的進行比較發現,Listing B中隱藏錯誤信息甚至隱藏致命信息,使得錯誤信息不會被顯示出來。
表B
<?php
// turn off error display
// no errors will be displayed
error_reporting(0);
// this will generate a notice
echo $undefinedVar;
// this will generate a fatal error
callUndefFunc();
?>
表C中的代碼將所有錯誤信息甚至簡單的注意事項都顯示出來:
表C
<?php
// all errors will be displayed
error_reporting(E_ALL);
// this will generate a notice
echo $undefinedVar;
// this will generate a fatal error
callUndefFunc();
?>
如以上3個例子所示,error_reporting()函數在控制錯誤發生時,在屏幕上顯示內容非常重要。這里的關鍵字是displayed,其表達的意思是錯誤不被顯示而不是錯誤沒有發生。因此,發生致命錯誤時(例如不正確的函數調用),程序將被終止;但是,此時沒有任何消息顯示給用戶。
下面的例子(表 D)說明了這種情況:
表D
<?php
// no errors will be displayed
error_reporting(0);
// start a task
echo "Starting task...";
// call an undefined function
// a fatal error occurs ring task processing
callMe();
// end the task
echo "Successfully completed task...";
?>
在表D中,在調用echo()函數時發生了致命錯誤,程序執行時到這點被終止,但是卻沒有任何錯誤消息給出,用戶不知道這種情況還以為程序在正確運行。下面的結論是非常明顯的:不給出錯誤報告非常危險,因為不論過程是否完成它常導致不正確的結論。
注意:調用不帶任何參數的error_reporting()將返回當前的錯誤報告等級。
自定義錯誤處理器
很明顯,隱藏錯誤報告是不正確的,你肯定想知道有什麼其他辦法加以改進。自定義錯誤處理器就是一個很好的能取代PHP默認錯誤處理系統的解決方法。自定義錯誤處理器可以以任何方式設置處理錯誤信息,包括信息如何顯示。
PHP函數中,完成這一功能的是set_error_handler()函數。錯誤發生時,此函數被自動調用,然後給出4個參數:錯誤代碼、錯誤消息、發生錯誤的腳本名稱和錯誤出現的行,此函數對錯誤管理負責。
表E給出一個簡單例子:
表E
<?php
// define custom handler
set_error_handler('myHandler');
// custom handler code
function myHandler($code, $msg, $file, $line) {
echo "Just so you know, something went wrong at line $line of your script $file. The system says that the error code was $code, and the reason for the error was: $msg. Sorry about this!";
}
// generate a notice
echo $undefVar;
?>
當運行此腳本的時候,會出現下面的信息:
Just so you know, something went wrong at line 11 of your /dev/error1.php. The system says that the error code was 8, and the reason for the error was: Undefined variable: undefVar. Sorry about this!
此時,PHP的默認錯誤處理器被用戶定義的myHandler()函數所取代,$undefVar變數被激活,PHP通知未定義變數的信息,此信息在運行時引擎產生,然後傳遞給myHandler()函數,同時錯誤發生的地址也傳遞給此函數。然後myHandler()函數輸出友好信息解釋錯誤。
注意:錯誤和致命錯誤很重要,它們會繞過自定義錯誤處理器,然後以PHP默認的錯誤處理機制進行顯示。顯示這些信息可使用前面討論的標准error_reporting()函數進行控制。
例1:動態錯誤頁面和e-mail警報
表F給出了另一個範例,當發生錯誤時,將動態產生HTML錯誤頁面,並且通過e-mail向Web管理員進行報告。
表F
<?php
// define custom handler
set_error_handler('myHandler');
// custom handler code
function myHandler($code, $msg, $file, $line, $context) {
// print error page
echo "<html><head></head><body>";
echo "<h2 align=center>Error!</h2>";
echo "<font color=red size=+1>";
echo "An error occurred while processing your request. Please visit our <a href=http://www.domain.dom>home page</a> and try again.";
echo "</font>";
echo "</body></html>";
// email error to admin
$body = "$msg at $file ($line), timed at " . date ("d-M-Y h:i:s", mktime());
$body .= "nn" . print_r($context, TRUE);
mail ("[email protected]", "Web site error", $body);
// halt execution of script
die();
}
// generate a notice
echo $undefVar;
?>
這里,自定義的錯誤處理器在遇到錯誤時動態產生HTML錯誤頁面。此錯誤信息也能被e-mail信息捕獲,然後通過PHP內置的mail()函數發送給管理員。
這里出現了myHandler()函數的一個新參數$context。這是myHandler()函數的第五個參數,是可選項。它包含了當前變數狀態的快照。包括對管理員有用的上下文信息,有利於減少調試時間。

Ⅶ PHP中變數未定義的錯誤

未定義的變數是會給出錯誤提示的,但是不是「嚴重錯誤」這個級別。這個提示不影響程序執行。如果你不想看這個東西把error_report()的值給成0就行了。不過不建議這么做。

Ⅷ 關閉PHP錯誤腳本提示的詳解

最簡單的辦法就是直接在php程序代碼中加入下面代碼

代碼如下

error_reporting(E_ALL^E_NOTICE^E_WARNING);

可以關閉所有notice 和 warning 級別的錯誤

把這個語句放在您腳本的功用包含文件中 通常為config php 或者conn php 中就可以控制輸出了

當然我也也可以在php ini中進行設置了方法如下

打開PHP安裝目錄下的php ini文件

找到display_errors = On 修改為 display_errors = off

注意:如果你已經把PHP ini文件復制到windows目錄下 那麼必須同時把c:windows/php ini里的display_errors = On 修改為display_errors = off

PHP ini中display_errors = Off失效的解決

問題

PHP 設置文件php ini中明明已經設置display_errors = Off 但是在運行過程中 網頁上還是會出現錯誤信息

解決

打開PHP安裝目錄下的php ini文件

找到log_errors = off 修改為 log_errors = on

找到error_log = filename 修改為 error_log="D:PHPerrlogphp_error log" (這里的目錄和文件名D:PHPerrlogphp_error log隨便你取什麼)

注意:如果你已經把PHP ini文件復制到windows目錄下 那麼必須同時把c:windows/php ini文件

此外php_error log至少要有USER的修改和寫許可權 否則無法輸出錯誤日誌

經常見到error_reporting( )直意為 設定錯誤訊息回報的等級

value constant

E_ERROR

E_WARNING

E_PARSE

E_NOTICE

E_CORE_ERROR

E_CORE_WARNING

E_PILE_ERROR

E_PILE_WARNING

E_USER_ERROR

E_USER_WARNING

E_USER_NOTICE

E_ALL

E_STRICT

然而 = + +

代碼如下 <?php //禁用錯誤報告 error_reporting( ); //報告運行時錯誤 error_reporting(E_ERROR | E_WARNING | E_PARSE); //報告所有錯誤 error_reporting(E_ALL); ?> lishixin/Article/program/PHP/201311/21242

Ⅸ php 文件上傳error 錯誤為6 ,找不到臨時文件 ,怎麼解決

文件過大~看看是不是圖片大於2M了~~~~
設置下 PHP.INI裡面的文件大小設置

熱點內容
編譯歷史 發布:2025-07-04 18:23:01 瀏覽:850
空調壓縮機種類 發布:2025-07-04 18:13:58 瀏覽:242
中國有ip6伺服器嗎 發布:2025-07-04 17:58:56 瀏覽:725
第六章編譯原理答案 發布:2025-07-04 17:37:55 瀏覽:40
php內存優化 發布:2025-07-04 17:25:54 瀏覽:664
威綸觸摸屏如何設置時間限制密碼 發布:2025-07-04 17:25:50 瀏覽:418
python列表的遍歷 發布:2025-07-04 17:24:20 瀏覽:24
編譯基本塊 發布:2025-07-04 17:23:06 瀏覽:750
scl語言編程 發布:2025-07-04 17:23:05 瀏覽:993
oracle用戶連接資料庫連接 發布:2025-07-04 17:20:20 瀏覽:939