在PHP中使用'@'是一种开箱即用的选项吗?

时间:2017-08-16 17:15:33

标签: php

使用at符号(@)进行前面的函数调用是标准的开箱即用选项,还是需要在php.ini中启用它?

我在error_log文件中收到以下服务器错误:

PHP Parse error: syntax error, unexpected '@' in /htdocs/www/phpMyAdmin/libraries/common.inc.php on line 467

这是php脚本文件中的第467行: if (@extension_loaded('mbstring') && !empty(@ini_get('mbstring.func_overload'))) {

如果需要在php.ini中启用它可能是什么?

感谢。

修订

这是抛出错误的代码块:

/**
 * check for errors occurred while loading configuration
 * this check is done here after loading language files to present errors in locale
 */
$GLOBALS['PMA_Config']->checkPermissions();
$GLOBALS['PMA_Config']->checkErrors();

/**
 * As we try to handle charsets by ourself, mbstring overloads just
 * break it, see bug 1063821.
 *
 * We specifically use empty here as we are looking for anything else than
 * empty value or 0.
 */
if (@extension_loaded('mbstring') && !empty(@ini_get('mbstring.func_overload'))) {
    PMA_fatalError(
        __(
            'You have enabled mbstring.func_overload in your PHP '
            . 'configuration. This option is incompatible with phpMyAdmin '
            . 'and might cause some data to be corrupted!'
        )
    );
}

3 个答案:

答案 0 :(得分:5)

来自PHP: empty - Manual

  

在PHP 5.5之前,empty()仅支持变量;还要别的吗   将导致解析错误。换句话说,以下不会   工作:empty(trim($name))。相反,请使用trim($name) == false

因此@不是变量并生成错误。如果您从@来电中删除empty()

if (@extension_loaded('mbstring') && !empty(ini_get('mbstring.func_overload'))) {}

它仍会生成以下解析错误:

  

解析错误:语法错误,意外T_STRING,期待T_VARIABLE或' $'

PHP 5.3.3于7年前发布,3年多来一直没有得到支持。如果无法升级(推荐),请使用phpMyAdmin 4.0.10.20

答案 1 :(得分:1)

根据您的PhpMyAdmin版本,您需要运行PHP> 5.5。

请参阅:https://www.phpmyadmin.net/downloads/

  

当前版本兼容PHP 5.5到7.1和M​​ySQL 5.5和   新。

这就是你收到错误的原因。

答案 2 :(得分:0)

错误控制操作符@是该语言的一部分。你无法禁用它。

解析错误表示格式错误。

  

注意:@ -operator仅适用于表达式。一个简单的经验法则是:如果你可以获取某些东西的值,你可以在它前面添加@运算符。例如,您可以将它添加到变量,函数和包含调用,常量等等。您不能将它添加到函数或类定义或条件结构(如if和foreach等)

之前

http://php.net/manual/en/language.operators.errorcontrol.php

在源代码出现之前发布了答案。请投票给AbraCadaver的答案。