标题是 iTop 新建 teemip 的 IP Subnet Block 对象时,在空表页报出的一个莫名其妙的错误。iTop 版本是 2.7.0,理论上唯一性检查应该在对象页面展示提示信息,而不是一个空白页。
搜索代码,可以知道这个信息是在 iTop 的核心词典里。
# find ./ -name "*.php" |xargs grep "错误: 该对象已被创建"
./dictionaries/zh_cn.dictionary.itop.ui.php: 'UI:Error:ObjectAlreadyCreated' => '错误: 该对象已被创建!',
继续搜索词典 Key:
# find ./ -name "*.php" |xargs grep "UI:Error:ObjectAlreadyCreated"
./dictionaries/en.dictionary.itop.ui.php: 'UI:Error:ObjectAlreadyCreated' => 'Error: the object has already been created!',
'UI:Error:ObjectAlreadyCreated' => '错误: 该对象已被创建!',
./pages/UI.php: $oP->p("<strong>".Dict::S('UI:Error:ObjectAlreadyCreated')."</strong>\n");
可以看到是在 /pages/UI.php
中调用的,因此基本可以排除是插件问题,创建一个 Server 对象,也出现这种情况,验证了这个推测。
查看 /pages/UI.php
中相关代码:
if (!utils::IsTransactionValid($sTransactionId, false))
{
$sUser = UserRights::GetUser();
IssueLog::Error("UI.php '$operation' : invalid transaction_id ! data: user='$sUser', class='$sClass'");
$oP->p("<strong>".Dict::S('UI:Error:ObjectAlreadyCreated')."</strong>\n");
}
查看 iTop 错误日志:
2020-07-15 08:09:31 | Error | UI.php 'apply_new' : invalid transaction_id ! data: user='admin', class='Server' | IssueLog
根据错误日志,搜索到相关信息[1]:
The "invalid transaction_id" is thrown in pages/UI.php if
\utils::IsTransactionValid
returns false.
This transaction_id is an anti-CSRF token.
By default they are stored on disk, but were in session before 2.5.2 or 2.6.0 (see transaction_storage configuration parameter).
这些 transaction_id
是存在 data/transactions
目录下。删除此目录,重新操作 iTop,报错无法创建 data/transactions
目录,检查 data
文件夹权限正常。接着在刷新 iTop,MySQL 就挂了,查看 MySQL 日志,才发现磁盘空间不够了:
mysqld: File './binlog.~rec~' not found (OS errno 28 - No space left on device)
腾出磁盘空间后,iTop 恢复正常。
参考资料
1. https://sourceforge.net/p/itop/discussion/922361/thread/4d09a3ff77/?limit=25
发表回复