溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php版本之殤

發(fā)布時(shí)間:2020-05-19 15:42:57 來源:網(wǎng)絡(luò) 閱讀:510 作者:shilen77 欄目:web開發(fā)

苦心學(xué)習(xí)Php有一段時(shí)間了,仍然停留在入門初級(jí)階段,仍然寫不出自己的作品來,就算照著別人的現(xiàn)成的教材,一字不落的寫在板板上,仍然會(huì)有層出不窮的錯(cuò)誤,揪其因果,實(shí)乃版本之故。有位大蝦,曾寫下如下博文:

PHP5.3開始加入了一個(gè)新的報(bào)錯(cuò)級(jí)別DEPRECATED,即將廢棄/過期。

php5.3被放棄的函數(shù)有

call_user_method() //使用 call_user_func() 替代
call_user_method_array() //
使用call_user_func_array() 替代
define_syslog_variables()
dl()
ereg() //
使用 preg_match() 替代
ereg_replace() //
使用 preg_replace() 替代
eregi() //
使用 preg_match() 配合 'i' 修正符替代
eregi_replace() //
使用 preg_replace() 配合 'i' 修正符替代
set_magic_quotes_runtime() //
以及它的別名函數(shù)magic_quotes_runtime()
session_register() //
使用 $_SESSION 超全部變量替代
session_unregister() //
使用 $_SESSION 超全部變量替代
session_is_registered() //
使用 $_SESSION 超全部變量替代
set_socket_blocking() //
使用stream_set_blocking() 替代
split() //
使用 preg_split() 替代
spliti() //
使用 preg_split() 配合 'i' 修正符替代
sql_regcase()
mysql_db_query() //使用 mysql_select_db() mysql_query() 替代
mysql_escape_string() //
使用mysql_real_escape_string() 替代
mysql_close(); //
將不支持全部關(guān)閉, 需要改為:mysql_close($link);
廢棄以字符串傳遞區(qū)域設(shè)置名稱. 使用 LC_* 系列常量替代.
mktime()
is_dst 參數(shù). 使用新的時(shí)區(qū)處理函數(shù)替代.
PHP 5.4

mcrypt_generic_end()
mysql_list_dbs()
PHP 5.5

mcrypt_cbc()
mcrypt_cfb()
mcrypt_ecb()
mcrypt_ofb() 

其中,PHP 5.3是廢棄函數(shù)的開始,很多常用的以前的正則ereg全部替換preg,但是魔術(shù)引號(hào)。居然也從PHP 5.3開始棄用,PHP 5.4就移除了。這個(gè)算是PHP 5.3的一個(gè)大變動(dòng)吧。
PHP 5.4
開始新增了很多特性,新增很多特殊寫法。(www.jbxue.com 
腳本學(xué)堂)

至于PHP 5.5,居然把MYSQL這個(gè)擴(kuò)展去掉了,建議使用MYSQLI或者PDO!
用了5.5很多程序都會(huì)報(bào)錯(cuò),提示mysql_connect即將過期!!會(huì)看到如下錯(cuò)誤:
Deprecated: mysql_connect(): The mysql extension is deprecated and will beremoved in the future: use mysqli or PDO instead in E:testnew 6.php on line 6
PHP5
相對(duì)于4的跨進(jìn)最大的就是類的部分,而影響更多的就是廢棄這些老習(xí)慣的東西吧。
雖然版本一直在升級(jí),但是終究市場(chǎng)上還是大量的5.1.6-5.2.175.3開始廢棄很多特性,這就導(dǎo)致了很多程序也不敢直接上,5.5.直接秒殺了大量的開源產(chǎn)品!


現(xiàn)如今,能夠在開源市場(chǎng)找到最新版的教程,屈指可數(shù),或者根本沒有,只能在舊版的教程基礎(chǔ)之上勤加練習(xí)。昨天一段很簡(jiǎn)單的連接數(shù)據(jù)庫(kù)操作的代碼愣是把我搞得稀里嘩啦的。代碼如下:

<?php

mysql_connect("localhost","root","root");

mysql_select_db("exer");

$result=mysql_query("select * from wasa");

while($row=mysql_fetch_array($result,MYSQL_ASSOC)){

print_r($row);

echo "<br/>\n";

}

?>

好吧,夠簡(jiǎn)單了吧,一目了然,無非就是要在數(shù)據(jù)庫(kù)里面把數(shù)據(jù)以數(shù)組的形式取出并打印出來??墒?,就這么簡(jiǎn)單的代碼,在高于php 5.3版上一運(yùn)行,出錯(cuò)了,報(bào)的錯(cuò)誤搞的人暈頭轉(zhuǎn)向,雖然描述得很清楚,但卻沒有給出解決的方法。如下圖所示:


php版本之殤

將:mysql_connect()改為:mysqli_connect(),結(jié)果呵呵了:

php版本之殤

你這錯(cuò)誤,比我代碼的行數(shù)還多,叫我情何以堪!php版本之殤

明明知道這個(gè)是PHP版本的問題導(dǎo)致的,可是如果是幾千行,幾萬行的代碼,因?yàn)榘姹镜纳?jí)就死光光了,想想實(shí)在是令人恐怖的一件事。所以,那些在5.3版以前開發(fā)的網(wǎng)站或者管理系統(tǒng),要升級(jí)的話,千萬要三思后行了。其實(shí),這段代碼是沒有問題的,下圖是在windows server 2003系統(tǒng)上的WEB環(huán)境:

php版本之殤

將代碼中的數(shù)據(jù)庫(kù)和表改動(dòng)一下,運(yùn)行的話是沒有任何報(bào)錯(cuò)信息的,除了編碼問題導(dǎo)致亂碼外:

<?php

mysql_connect("localhost","root","root");

mysql_select_db("ecshop");

$result=mysql_query("select * from ecs_tag");

while($row=mysql_fetch_array($result)){

print_r($row);

echo "<br/>\n";

}

?>

運(yùn)行結(jié)果:

php版本之殤

處于菜鳥的心態(tài),希望有大蝦看到這篇小文章能夠給予指點(diǎn)一二。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI