20.06.2017 08:33:16 am
В phpFOX, как и во многих социальных сетях есть возможность добавить ссылку на страницу.
Инструмент для удаления лишних записей в таблице phpfox_link (ссылок)
Написал инструмент для удаления лишних записей в таблице phpfox_link. Сценарий выбирает все записи с таблицы phpfox_link, затем делает проверку по двум таблица phpfox_feed и phpfox_pages_feed, те записи, которые не найдены в этих двух таблицах, можно будет сразу удалить, нажав на ссылку Удалить.
И так, создаем файл: tool.php с таки содержимым:
Забить переменные своими данными доступа к Базе Данных:
Залить файл tool.php в корень сайта и перейти по адресу: site.ru/tool.php. На экране появятся список таблицы phpfox_link, записи: id ссылки и Yes|No (есть или нету записи в таблицах лент новостей). Если запись о ссылке не будет найдена в таблицах лент новостей, то будет предложено удалить запись о ссылки в таблице phpfox_link, в виде ссылки Удалить рядом с информацией о записи. После нажатия на ссылку Удалить, сценарий выполнит действие по удалению записи и можно будет продолжить проверку ссылок.
По окончанию проверки, файл следует удалить с сервера, в целях безопасности.
Данным инструментом пользовался на живом сайте: https://danfa.net/, операция прошла без ошибок. Остается сделать обратную проверку записей о ссылки, то есть проверять наличие записи в таблице phpfox_link, которые есть в таблицах лент новостей. И наверно стоит сделать массовое удаление записей, что бы не "тыркаться" из-за каждой ссылки. Но это чуть позже.
Набросал ещё один инструмент для поиска "кривых" записях о ссылка, только мусор уже ищет в таблицах phpfox_feed и phpfox_pages_feed.
Для запуска проверки, создаем файл: tool.php с кодом внутри:
Заливаем в корень сайта и запускаем. Проверка будет выполнена по таблице phpfox_feed, после проверке меняем строку:
На:
И запускаем сценарий ещё раз. Мусор так же можно сразу удалить по ссылке Удалить.
Инструмент для удаления лишних записей в таблице phpfox_link (ссылок)
Написал инструмент для удаления лишних записей в таблице phpfox_link. Сценарий выбирает все записи с таблицы phpfox_link, затем делает проверку по двум таблица phpfox_feed и phpfox_pages_feed, те записи, которые не найдены в этих двух таблицах, можно будет сразу удалить, нажав на ссылку Удалить.
И так, создаем файл: tool.php с таки содержимым:
<html>
<head>
<meta charset="utf-8">
<title>Поиск лишних записей</title>
</head>
<body>
<?php
$dbhost = '';
$dbuser = '';
$dbpasswd = '';
$dbname = '';
$connect = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$connect)
{
echo 'Ошибка подключения MySQL: ' . mysqli_connect_error($connect);
exit;
}
if (isset($_GET['del']))
{
if (!$_GET['del'])
{
echo 'Ошибка GET.<br />';
}
else
{
$q = 'DELETE FROM phpfox_link WHERE link_id = ' . $_GET['del'];
$r = mysqli_query($connect, $q);
if (!$r)
{
echo 'Ошибка MySQL: ' . mysqli_error($connect) . '<br />';
}
else
{
echo 'Запись успешно удалена!<br />';
}
}
echo '<a href="tool.php">Продолжить проверку</a>.';
exit;
}
$q = 'SELECT * FROM phpfox_link';
$r = mysqli_query($connect, $q);
$list = array();
while($row = mysqli_fetch_assoc($r))
{
$list[] = $row;
}
echo '---------------<br />';
echo 'Проверка таблицы <strong>phpfox_feed</strong><br />';
echo '---------------<br />';
foreach ($list as $value)
{
if ($value['module_id'] == null)
{
$q = 'SELECT * FROM phpfox_feed WHERE type_id = \'link\' AND item_id = ' . $value['link_id'];
$r = mysqli_query($connect, $q);
if (mysqli_num_rows($r) > 0)
{
echo $value['link_id'] . ' * Yes<br />';
}
else
{
echo $value['link_id'] . ' * No | <a href="tool.php?del=' . $value['link_id'] . '">Удалить</a><br />';
}
}
}
echo '---------------<br />';
echo 'Проверка таблицы <strong>phpfox_pages_feed</strong><br />';
echo '---------------<br />';
foreach ($list as $value)
{
if ($value['module_id'] == 'pages')
{
$q = 'SELECT * FROM phpfox_pages_feed WHERE type_id = \'link\' AND item_id = ' . $value['link_id'];
$r = mysqli_query($connect, $q);
if (mysqli_num_rows($r) > 0)
{
echo $value['link_id'] . ' * Yes<br />';
}
else
{
echo $value['link_id'] . ' * No | <a href="tool.php?del=' . $value['link_id'] . '">Удалить</a><br />';
}
}
}
?>
</body>
</html>
Забить переменные своими данными доступа к Базе Данных:
$dbhost = '';
$dbuser = '';
$dbpasswd = '';
$dbname = '';
Залить файл tool.php в корень сайта и перейти по адресу: site.ru/tool.php. На экране появятся список таблицы phpfox_link, записи: id ссылки и Yes|No (есть или нету записи в таблицах лент новостей). Если запись о ссылке не будет найдена в таблицах лент новостей, то будет предложено удалить запись о ссылки в таблице phpfox_link, в виде ссылки Удалить рядом с информацией о записи. После нажатия на ссылку Удалить, сценарий выполнит действие по удалению записи и можно будет продолжить проверку ссылок.
По окончанию проверки, файл следует удалить с сервера, в целях безопасности.
Данным инструментом пользовался на живом сайте: https://danfa.net/, операция прошла без ошибок. Остается сделать обратную проверку записей о ссылки, то есть проверять наличие записи в таблице phpfox_link, которые есть в таблицах лент новостей. И наверно стоит сделать массовое удаление записей, что бы не "тыркаться" из-за каждой ссылки. Но это чуть позже.
Набросал ещё один инструмент для поиска "кривых" записях о ссылка, только мусор уже ищет в таблицах phpfox_feed и phpfox_pages_feed.
Для запуска проверки, создаем файл: tool.php с кодом внутри:
<html>
<head>
<meta charset="utf-8">
<title>Поиск лишних записей</title>
</head>
<body>
<?php
$dbhost = '';
$dbuser = '';
$dbpasswd = '';
$dbname = '';
$connect = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$connect)
{
echo 'Ошибка подключения MySQL: ' . mysqli_connect_error($connect);
exit;
}
$table = 'phpfox_feed';
if (isset($_GET['del']))
{
if (!$_GET['del'])
{
echo 'Ошибка GET.<br />';
}
else
{
$q = 'DELETE FROM ' . $table . ' WHERE feed_id = ' . $_GET['del'];
$r = mysqli_query($connect, $q);
if (!$r)
{
echo 'Ошибка MySQL: ' . mysqli_error($connect) . '<br />';
}
else
{
echo 'Запись успешно удалена!<br />';
}
}
echo '<a href="tool.php">Продолжить проверку</a>.';
exit;
}
$q = 'SELECT * FROM ' . $table . ' WHERE type_id = \'link\'';
$r = mysqli_query($connect, $q);
$list = array();
while($row = mysqli_fetch_assoc($r))
{
$list[] = $row;
}
echo '---------------<br />';
echo 'Проверка таблицы <strong>' . $table . '</strong><br />';
echo '---------------<br />';
$num = 0;
$yes = 0;
$no = 0;
foreach ($list as $value)
{
$num++;
$q = 'SELECT * FROM phpfox_link WHERE link_id = ' . $value['item_id'];
$r = mysqli_query($connect, $q);
if (mysqli_num_rows($r) > 0)
{
$yes++;
echo 'Номер: ' . $num . ' ID записи: ' . $value['feed_id'] . ' * Yes<br />';
}
else
{
$no++;
echo 'Номер: ' . $num . ' ID записи: ' . $value['feed_id'] . ' * No | <a href="tool.php?del=' . $value['feed_id'] . '">Удалить</a><br />';
}
}
echo '---------------<br />';
echo 'Всего записей <strong>' . count($list) . '</strong> | Верные записи: <strong>' . $yes . '</strong> | Мусор: <strong>' . $no . '</strong><br />';
echo '---------------<br />';
?>
</body>
</html>
Заливаем в корень сайта и запускаем. Проверка будет выполнена по таблице phpfox_feed, после проверке меняем строку:
$table = 'phpfox_feed';
На:
$table = 'phpfox_pages_feed';
И запускаем сценарий ещё раз. Мусор так же можно сразу удалить по ссылке Удалить.
- Жалоба
20.06.2017 08:37:00 am
При добавлении ссылки, как вложение, скажем в сообщение форума, без *http://, могут возникнуть проблемы при переходе по такой ссылки.

Чтобы *http:/ была у адреса в любом случаи, даже если ее не написали, я сделал так:
Открываю: module/link/include/service/process.class.php, нахожу:
Меняю на:
Готово.
Заметил, что при добавлении ссылки с протоколом HTTPS, логотип может сохраниться с протоколом HTTP.
И меняю на:
Решение временное. Делалось на скорую руку.
Названия моих переменных отличается от стандартных переменных.

Чтобы *http:/ была у адреса в любом случаи, даже если ее не написали, я сделал так:
Открываю: module/link/include/service/process.class.php, нахожу:
'link' => $this->preParse()->clean($aVals['link']['url'], 255),
Меняю на:
'link' => $this->preParse()->clean((!preg_match('#(http|https):\/\/#i', $aVals['link']['url']) ? 'http://' . $aVals['link']['url'] : $aVals['link']['url']), 1024),
Готово.
Заметил, что при добавлении ссылки с протоколом HTTPS, логотип может сохраниться с протоколом HTTP.
'image' => ((isset($vals['link']['image_hide']) && $vals['link']['image_hide'] == '1') | !isset($vals['link']['image'])? null : $this->preParse()->clean($vals['link']['image'], 1024)),
И меняю на:
'image' => ((!empty($vals['link']['image_hide']) && $vals['link']['image_hide'] == '1') | empty($vals['link']['image']) ? null : $this->preParse()->clean((preg_match('|https:\/\/|i', $vals['link']['url']) ? str_replace('http://', 'https://', $vals['link']['image']) : $vals['link']['image']), 1024)),
Решение временное. Делалось на скорую руку.
Названия моих переменных отличается от стандартных переменных.