PHP7是PHP的一个重大更新版本,其中引入了许多新的功能和改进,同时废弃了一些旧的、不再推荐使用的函数以及可执行代码的函数。本文将介绍PHP7废弃掉的一些函数以及可执行代码的函数,以及替代这些函数的推荐做法。
1.废弃函数
(1)Mbereg_match,Mbereg_replace,Mbereg,Mbereg_search,Mbereg_search_pos,Mbereg_replace_callback
这些函数在PHP7中被废弃了,不再推荐使用,因为它们是基于POSIX扩展正则表达式的,而POSIX扩展已经不再是流行的正则表达式引擎。取而代之的是PCRE(Perl Compatible Regular Expressions)库,所以应该使用Mb_ereg系列函数中的PCRE变体,比如Mb_ereg_replace可以被替换为Mb_ereg_replace_callback。
(2)Mcrypt_encrypt,Mcrypt_decrypt,Mcrypt_create_iv
这些函数主要用于加密解密处理,但在PHP7中被废弃了,因为它们使用了旧的mcrypt库,该库已经很久没有维护更新了,同时这些函数也存在一些安全隐患。PHP7官方建议使用OpenSSL扩展或sodium扩展来替代这些函数。
(3)ereg,eregi,ereg_replace,eregi_replace
这些函数与Mb_ereg函数类似,也是POSIX扩展正则表达式引擎的函数,同样也被废弃了。如果需要使用正则表达式,应该使用preg_match或preg_replace等函数。
(4)Call_user_method和Call_user_function
这些函数的问题在于它们可能会侵犯到对象的私有成员和方法。PHP7官方建议使用call_user_func或call_user_func_array等函数替代。
(5)split
这个函数在PHP7中被废弃了,因为它使用的是POSIX字符集,同时这个函数也容易被攻击者利用从而执行任意代码。PHP7官方建议使用preg_split等函数替代。
(6)Mcrypt_generic_end和Mcrypt_module_close
这些函数在PHP7中被废弃了,因为它们使用了旧的mcrypt库。PHP7官方建议使用OpenSSL扩展或sodium扩展来替代这些函数。
2.可执行代码的函数
(1)eval
eval函数可以执行字符串形式的PHP代码,但它有被恶意攻击者滥用的高危隐患,因为它能够执行任意代码而没有任何限制。所以,应该尽可能地避免使用eval函数,而使用其他方法来实现同样的功能。
(2)assert
assert函数用于断言某个条件是否成立,如果条件不成立,则会触发一个致命错误。然而,assert函数同样存在被滥用的危险,因为这个函数可以执行任意代码。PHP7官方建议使用其他方式来实现条件检查。
(3)create_function
这个函数可以动态地创建PHP函数。然而,这个函数同样存在被恶意攻击者利用的隐患,因为可以通过动态创建函数的方式执行任意代码。PHP7官方建议使用匿名函数等方式来创建函数。
3.替代做法
替代方案基本上都是使用更加安全的新的函数、库或API,如下所示:
(1)使用mb_eregi_replace替代Mbereg_replace
(2)使用OpenSSL扩展或sodium扩展来替代Mcrypt_encrypt,Mcrypt_decrypt和Mcrypt_create_iv
(3)使用preg_match或preg_replace替代ereg,eregi,ereg_replace和eregi_replace
(4)使用call_user_func或call_user_func_array替代Call_user_method和Call_user_function
(5)使用preg_split替代split
(6)使用OpenSSL扩展或sodium扩展来替代Mcrypt_generic_end和Mcrypt_module_close
(7)使用其他方法来替代eval函数
(8)使用其他方式来实现条件检查,而不是使用assert函数
(9)使用匿名函数等方式来创建函数,而不是使用create_function函数
综上所述,PHP7的废弃函数和可执行代码的函数往往存在安全隐患或性能问题,而且通常官方也会提供更加安全、更加高效的替代方案来代替它们。因此,在编写PHP程序时,应该注意使用推荐的函数和方法,同时尽可能地避免使用废弃的函数。这样可以为程序的稳定性和安全性提供更好的保障。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/
发表评论 取消回复