函数eregi()已被弃用

函数eregi()已被弃用。 我怎样才能取代eregi()。 我尝试preg_match,但后来停止工作。

我们ethis帮助:

http://takien.com/513/how-to-fix-function-eregi-is-deprecated-in-php-5-3-0.php

代码之前:

if ( ! eregi("convert$", $this->library_path)) { if ( ! eregi("/$", $this->library_path)) $this->library_path .= "/"; $this->library_path .= 'convert'; } if (eregi("gd2$", $protocol)) { $protocol = 'image_process_gd'; } 

代码然后:

 if ( ! preg_match("convert$/i", $this->library_path)) { if ( ! preg_match("/$/i", $this->library_path)) $this->library_path .= "/"; $this->library_path .= 'convert'; } if (preg_match("gd2$/i", $protocol)) { $protocol = 'image_process_gd'; } 

preg_match期望其正则expression式参数在一对分隔符内。

所以试试:

 if ( ! preg_match("#convert$#i", $this->library_path)) { if ( ! preg_match("#/$#i", $this->library_path)) $this->library_path .= "/"; $this->library_path .= 'convert'; } if (preg_match("#gd2$#i", $protocol)) { $protocol = 'image_process_gd'; } 

你似乎忘记了分隔符

 preg_match("~/$~", $this->library_path) 

 preg_match("~gd2$~i", $protocol) 

但在这两种情况下,你都应该考虑不使用正则expression式,因为它们在这里超大

 $this->library_path[strlen($this->library_path) - 1] == '/' substr($protocol, -3) == 'gd2' 

如果你只是检查一个string在另一个string的存在,你应该只使用strpos()函数。 例如:

 if(strpos('convert', $this->library_path) !== false) { // code here } 

更新:错误读你想检查它在一个string的END,这仍然是可能的无正则expression式通过使用substr()

 if(substr($this->library_path, -7) == 'convert' { //code here } 

其中7是转换的长度,你可以使用一个strlen并从0中减去dynamic获得这个数字。 这不会启动任何正则expression式,所以更有效率。