最新消息:Excel无乱码转CSV,由于工作原因很少更新博客和回复大家的评论,非常抱歉。

更新Magento代码与PHP 5.3兼容

hicoogle Magento程序从 PHP 5.2升级到PHP5.3

PHP 5.3 版本出来一近子了,有很多的老代码在5.3 中移将无法正确运行。现在把一个2年前的 Magento 网站移到新服务器,新服务器是PHP 5.3 版本的。虽然 PHP 5.3 是”较小的”版本,有不少”废弃”的核心,只是不工作相同再也。所以在这篇文章我会解释具体什么功能我不得不更新和几个我怎样做它在每个案件的例子。

split()

Split 函数已被弃用,它还能继续工作,但将输出一条警告。Split 函数可以将”转换”两种不同方式。

如果使用一个字符定义拆分或简单的字符串,如 ‘:’ 或”\r\n”可以将它转换成 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_runtime
set_magic_quotes_runtime

eregi()
更改 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.3
return 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);

转载请注明:嗨酷哥,有你更酷! » 更新Magento代码与PHP 5.3兼容

与本文相关文章

发表我的评论

取消评论
表情 插代码

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项