我正在使用 Joomla 运行一个网站!2.5.9 7 个月。直到本周一切都很好。周一和今天(周五)网站因****_session
表格损坏而无法运行。我没有机会查看有关错误的日志。
无论如何,我星期一修好了桌子,直到今天一切正常。今天它重复了同样的错误。然后我又修了。我不想桌子坏了,也不想再修了。
我想知道 Joomla 是否存在漏洞!或者服务器端还有其他东西。
出于某种原因,我有时会收到此错误,因此我使用 cron 作业自动修复:
<?php
$sites = array('http://www.yoursite.com', 'http://www.yourothersite.com');
foreach($sites as $site) {
$content = file_get_contents($site);
if (strpos($content, 'error') !== false) {
mail('myself@myself.com', 'Error found: '.$site,
$site.' reported an error:<br/><br/>'.$content,
'From: Myself <myself@myself.com>');
}
if (strpos($content, 'jtablesession::Store Failed') !== false) {
// run repair table
$con = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('yoursite_db_name', $con);
// you might want to add an if here, if you have many sites to check
mysql_query('REPAIR TABLE `yourprefix_session`', $con);
mysql_close($con);
mail('myself@myself.com', 'Repaired #__session', 'From: Myself <myself@myself.com>');
}
}
?>
请记住,我仅将它用于 Joomla 1.5 站点。如果 2.5 或 3.0 搜索的错误不同,您可能需要更改它们。
我制作了一个页面,可以在崩溃时手动修复表格。
<?php
//file = repair/index.php
include '../configuration.php'; //has JConfig class
$cfg = new JConfig();
$mysqli = new mysqli($cfg->host, $cfg->user, $cfg->password, $cfg->db);
if($mysqli->query('REPAIR TABLE prefix_session'))
echo 'Hey!';
else
echo 'An error occured call zkanoca';
?>
当我调用http://example.com/repair时,它就可以了。
我还因为 MySQL 中损坏的“会话”表而丢失了一个站点。对于一个非常简单且可预测的问题,我发现的解决方案都太复杂了,如此处所述:
https://www.akeebabackup.com/documentation/admin-tools/database-tools.html
简单地说,会话表需要定期清理。一旦崩溃,就无法再使用PHPmyAdmin访问(由于表崩溃,无法访问)。由于该表已损坏,并且无法访问该站点,因此您也无法访问管理工具。
因此,通过 cpanel,使用 PHPmyAdmin,在数据库部分,在站点数据库的 SQL 选项卡中,我键入:
REPAIR TABLE [prefix]_session
然后点击Go
问题解决了。网站再次出现。