阅读:3329回复:0
更新Magento代码与PHP 5.3兼容图片:hicoogle_update_php.jpg PHP 5.3 版本出来一近子了,有很多的老代码在5.3 中移将无法正确运行。现在把一个2年前的 Magento 网站移到新服务器,新服务器是PHP 5.3 版本的。虽然 PHP 5.3 是”较小的”版本,有不少”废弃”的核心,只是不工作相同再也。所以在这篇文章我会解释具体什么功能我不得不更新和几个我怎样做它在每个案件的例子。 split() Split 函数已被弃用,它还能继续工作,但将输出一条警告。Split 函数可以将”转换”两种不同方式。 如果使用一个字符定义拆分或简单的字符串,如 ‘:’ 或”rn”可以将它转换成 explode()。Explode() 这表示得稍快一些,然后使用 regex 的优势基于函数。 如果通过使用正则表达式定义拆分,则我们必须将其转换为使用正则表达式兼容 preg_split() 函数。 若要查找可以使用正则表达式搜索[^._w]split( single character => split to explode (when regex ’|’ convert to character ‘|’)split(':', $value) => explode(':', $value)split(self::MULTI_DELIMITER, $value); =>explode(self::MULTI_DELIMITER, $value);character class or full regex => split to preg_split split('[[:space:]]+', trim($uname)) =>preg_split('/[[:space:]]+/', trim($uname))split("r?n", $headers); => preg_split("/r?n/", $headers);split('(, *)|,', $keywordsString); =>preg_split('/(, *)|,/', $keywordsString);magic_quotes 魔术引号 5.3 大多被淘汰,默认情况下应禁用,在安装PHP程序时,删除所有行包含以避免警告: get_magic_quotes_runtimeset_magic_quotes_runtimeeregi() 更改 eregi 到 preg_match 和更改现有的正则表达式表达式。开始和结束现有的正则表达式中添加斜杠和添加 i 在结束时,使它不区分大小写的选项。示例:/existing regex/i 请确保任何现有的正斜杠 / 在现有的 regex 转义反斜杠 (ie: ‘ x / y’ 变为 ‘/ x/y/i’) 做了很多变化,但在这里是一些例子: eregi('Windows 9', php_uname())=>preg_match('/Windows 9/i', php_uname())$reg = '^' . str_replace(array('*', '?', '/'), array('.*', '.', '/'), $fragment) . '$'; return eregi($reg, $value);=>$reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '/'), $fragment) . '$/i';return preg_match($reg, $value);eregi('^(http|ftp)://', substr($file, 0, 10))=>preg_match('/^(http|ftp):///i', substr($file, 0, 10))ereg() 作为 eregi() 的同一原则。更改为 preg_match,开始和现有的正则表达式的结尾处添加斜线。不要添加 i 选项、 额日格不区分大小写。 ereg('^libc-(.*).so$', basename(readlink('/lib/libc.so.6')), $matches)=>preg_match('/^libc-(.*).so$/', basename(readlink('/lib/libc.so.6')), $matches)gd_info() “JPG Support” 调用 gd_info() ;”JPG 支持”数组键改为 JPEG 支持 PHP 5.3 中。 $gd_options = gd_info();if (!$gd_options['JPG Support'] ) {到 if ((!isset($gd_options['JPG Support']) || $gd_options['JPG Support'] != true) && (!isset($gd_options['JPEG Support']) || $gd_options['JPEG Support'] != true)) { __toString() PHP 5.3 中 __toString() 神奇方法不接受任何参数。旧的代码,如下面将触发一个致命的错误。 Fatal error: Method __tostring() cannot take arguments尝试使用正则表达式搜索的 function[s]+__toString([^)]+) 查找有问题的代码。 更改 public function __toString(array $arrAttributes = array(), $valueSeparator=',') { $arrData = $this->toArray($arrAttributes); return implode($valueSeparator, $arrData);}为 public function __toString() { if(func_num_args() == 2) { return $this->__invoke(func_get_arg(0), func_get_arg(1)); } elseif(func_num_args() == 1) { return $this->__invoke(func_get_arg(0)); } else { return $this->__invoke(); }}/** * Convert object attributes to string * * @param array $arrAttributes array of required attributes * @param string $valueSeparator * @return string */ public function __invoke(array $arrAttributes = array(), $valueSeparator=’,') { $arrData = $this->toArray($arrAttributes); return implode($valueSeparator, $arrData); } dl() 正则表达式搜索 [^_.w]dl (其中应只匹配一个或两个梨文件夹中的文件。 替换 return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);为 // return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);// dl() is deprecated in php 5.3return false;PEAR 要修复潜在的问题,当它试图安装梨软件包的梨文件夹里面的一些变化。然而,一般我不认为梨附带 Magento 的旧版本是 php 5.3 完全准备的。最有可能的 Magento 连接将不再正常一旦移动到服务器使用 php 5.3 中的网站不工作。因为您可以手动安装您的 Magento 扩展不应很大的问题。 error_reporting(E_ALL & ~E_NOTICE);为 error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); |
|