phpdeprecated
1. php報錯: Deprecated: preg_replace(): The /e modifier is deprecated...
這個錯誤是這樣的情況,我們來一起分析下:
從錯誤的信息來看,貌似說是用了不推薦的函數,也就是過時的函數,可是事實是這樣嗎?
為了一探究竟,我查看了PHP手冊的preg_replace()函數介紹,並沒有說這個函數過時了或不推薦了,那麼,問題出在哪了呢?
繼續往下看,結果在手冊中看到這樣的消息:
錯誤/異常
當傳入 "e" 修飾符的時候,會產生一個E_DEPRECATED級別的錯誤。
好像明白點了,是因為用了「e」修飾符,那之前使用為什麼沒有出錯呢?
繼續往下看,看到版本更新,一下恍然大悟,原來如此:
版本 說明
5.5.0 /e修飾符已經被棄用了。使用preg_replace_callback()代替。參見文檔中PREG_REPLACE_EVAL關於安全風險的更多信息
這下問題很清楚了,5.5.0以後的版本,/e的參數被廢棄了,也就是不推薦了,官方建議使用preg_replace_callback()函數代替。
廢話有點多了,好,下面進入正題。
好了,問題找到了,那就看看如何解決,官方推薦使用preg_replace_callback() ,那還客氣啥,用就是了。
可是,問題又來了,怎麼用呢?
繼續看手冊,看preg_replace_callback()的手冊,說的很明白。
其實這個函數和preg_replace()唯一的區別就是,preg_replace()將匹配到的串直接替換,而preg_replace_callback()是將匹配到的串帶入到回調函數中做處理後然後替換,就是這么任性,靈活度一下加大了,但是效率肯定不如preg_replace(),所以,如果僅僅是簡單替換,還是用preg_replace()的好,如果要對匹配到的串進行特殊處理,那就非preg_replace_callback()莫屬了,親!
好了,就到這里了,為了升級知道賬號,所以廢話有點多了。。。。。望採納啊。
2. PHP Deprecated: Function eregi() is deprecated in
eregi函數在php5.3中屬於「不贊成使用」的函數,這個函數依然可以用,但是會有PHP Deprecated的報錯。
根據你所提供的邏輯來改,把那一行改成
if (strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === FALSE){exit("<br><p align=center><font color='red' style='font-size:12pt'>出錯了,本頁面禁止外部鏈接。</font></p>");}
就可以了。
不過老實說這個判斷有點不太嚴謹。
如果是我,我會這樣寫
if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != $_SERVER['SERVER_NAME'])
{exit("<br><p align=center><font color='red' style='font-
size:12pt'>出錯了,本頁面禁止外部鏈接。</font></p>");}
3. 如何使php頁面中不再出現NOTICE和DEPRECATED的錯誤提示
<?php
//文件頭部設置
error_reporting(E_ALL^E_NOTICE);
?>
//或者在php.ini配置文件中修改:
error_reporting=E_ALL & ~E_NOTICE
4. 運行composer 時 PHP Deprecated: Directive 'track_errors' is deprecated in Unknown on line 0
打開 php.ini :
修改:
track_errors=On
為:track_errors=Off
5. php報錯PHP Deprecated: preg_replace求大神解決
Deprecated: preg_replace();意思是不贊成正則替換,你這用正則替換的用法,不讓使用,換種方法實現你的替換目的吧。
6. 新人求教PHP高手,Deprecated
ereg函數是5之前用的,在5.多版本就棄用了,5點低的一些會執行但有警告,你說的php2.3我沒聽說過這個版本,apache2.3到是有聽說,正則你用preg_grep吧!返回匹配模式的數組條目,效果一樣的,關於正則的函數你到php手冊,函數參考->文本處理->PCRE->PCRE函數,這里是正則的一般使用到的函數,PCRE下的POSIX REGEX你也可以看下,你用的ereg函數裡面就有說明,其中就有
Note:
使用 Perl 兼容正則表達式語法的 preg_match() 函數通常是比 ereg() 更快的替代方案。
7. php5.3提示Function ereg() is deprecated Error問題解決方法
本文實例講述了php5.3提示Function
ereg()
is
deprecated
Error問題解決方法。分享給大家供大家參考。具體實現方法如下:
一、問題:
PHP
5.3
ereg()
無法正常使用,提示「Function
ereg()
is
deprecated
Error」是因為它長ereg
函數進行了升級處理,需要像preg_match使用/
/來規則了,當然也是php5.3把ereg給廢掉的節奏了。
PHP
5.3
ereg()
無法正常使用,提示「Function
ereg()
is
deprecated
Error」。
問題根源是php中有兩種正則表示方法,一個是posix,一個是perl,php6打算廢除posix的正則表示方法所以後來就加了個preg_match。此問題解決辦法很簡單,在ereg前加個過濾提示信息符號即可:把ereg()變成@ereg()。這樣屏蔽了提示信息,但根本問題還是沒有解決,php在5.2版本以前ereg都使用正常,在5.3以後,就要用preg_match來代替ereg。所以就需要變成這樣。
原來:ereg("^[0-9]*$",$page)變成:preg_match("/^[0-9]*$/",$page)
特別提醒:posix與perl的很明顯的表達區別就是是否加斜杠,所以與ereg相比,後者在正則的前後分別增加了兩個"/"符號,不能缺少。
例如:
改前:
復制代碼
代碼如下:function
inject_check($sql_str)
{
$sql_str
=
strtolower($sql_str);
return
eregi('fopen|post|eval|select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile',
$sql_str);
//
進行過濾
}
二、解決方法:
找到代碼所在的文件位置:
復制代碼
代碼如下:function
inject_check($sql_str)
{
$sql_str
=
strtolower($sql_str);
return
preg_match('/fopen|post|eval|select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile/',
$sql_str);
//
進行過濾
}
注意:一定要加'/'開頭與結束。此段參考:http://www.jb51.net/article/38857.htm
補充:此問題在php5.2之前版本不會出現。
希望本文所述對大家的PHP程序設計有所幫助。