使用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!'
)
);
}
答案 0 :(得分:5)
在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和MySQL 5.5和 新。
这就是你收到错误的原因。
答案 2 :(得分:0)
错误控制操作符@
是该语言的一部分。你无法禁用它。
解析错误表示格式错误。
注意:@ -operator仅适用于表达式。一个简单的经验法则是:如果你可以获取某些东西的值,你可以在它前面添加@运算符。例如,您可以将它添加到变量,函数和包含调用,常量等等。您不能将它添加到函数或类定义或条件结构(如if和foreach等)
之前
http://php.net/manual/en/language.operators.errorcontrol.php
在源代码出现之前发布了答案。请投票给AbraCadaver的答案。