Php скрипт добавления комментариев с премодерацией

Php скрипт комментариев для динамического сайта уже описан в данном разделе. Но очень часто комментарии к статьям сайта могут сопровождаться откровенным спамом или просто обсуждением вопроса не по теме. Чтобы это предупредить php скрипт добавления комментариев должен иметь возможность модерации.

Модерацию можно выполнить различными способами. Самый распространенный это постмодерирование, тоесть просмотр добавленных комментариев из админпанели сайта и удаление спама или неподходящих по содержанию комментариев. Такой способ не надежен в части появления на сайте неподходящих комментариев и их возможного нахождения там длительное время.

Исключить все возможные проблемы можно только методом премодерирования. Выполнить это будет несложно. Технология состоит в том, что сами комментарии оставленные посетителями сайта сохраняются во временном файле, а на емаил администратора сайта высылаются письма с самими комментариями и двумя ссылками "Разрешить" и "Запретить". Роль администратора состоит в том, чтобы прочитать комментарий и кликнуть по одной из ссылок.

Для того, чтобы создать php скрипт добавления комментариев с премодерацией можно использовать уже существующий скрипт нашего проекта, полный путь к которому D:/Mysitephp/php/comment/comment.php, внеся в него некоторые изменения. Изменения касаются записи комментариев не в основной файл, а во временный с отсылкой текста комментариев на почтовый ящик администратора сайта, где перейдя по одной из ссылок администратор даст команду переписать соответствующий комментарий в основной файл с которого комментарии будут отображаться на сайте. Преобразованный, таким образом скрипт представлен ниже.

<?php

// Конечный результат работы скрипта помещается в переменную $comment
// Каждая статья имеет свой текстовый файл с комментами,
// название и путь к файлу в setings.php

// Строка для уменьшения предупреждений Денвера
Error_Reporting(E_ALL & ~E_NOTICE);
// Отключить все сообщения об ошибках
error_reporting(0);
// Запись в $addition формы formcomm.html в виде строки
$addition = file_get_contents ( "templates/pages/formcomm.html" );
// Подсчет количества сообщений в $general_file
$commnum = count(file($general_file));
// Если информация из формы послана скрипту и не превышен лимит сообщений
if ($submit == 'Добавить' and $commnum < $maxcomm)
{
// Если не все поля заполнены, выводим ошибку nocomment.html
if ($comname=='' or $comtext=='' or $commail=='' or $pr!='5')
// Собщение об ошибке добавления комментов
$comment = file_get_contents ("php/comment/nocomment.html");
// Если все заполнено
else
{
$comtext = str_replace("<","&lt",$comtext);
$comtext = str_replace(">","&gt",$comtext);
$comtext = str_replace("\n","<br>",$comtext);
$comtext = str_replace("\r","",$comtext);
$today=date("Y m d h:i:s");
$inname = "||"."<p align=right>".$today."&nbsp;&nbsp;Добавил: &nbsp;&nbsp;".$comname."</p>";

// Открыть временный файл для записи немлдерированных комментов
$fp = fopen("$general_file_temp","a");
// блокировка
flock($fp,LOCK_EXT);
// Записать данные в файл
fputs($fp,"$comtext$inname");
fputs($fp,"\n");
fclose($fp, "$general_file_temp");
// Подсчет сообщений в файле
$messages=file($general_file_temp);
$mnum=count($messages);

// Получение адреса страницы для возврата на нее
$locat="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
// Посылка письма для премодерации комментов
$body = file_get_contents("php/comment/mailcomm.html");
//email, тот куда будет приходить сообщение
$user = $eadmin;
//откуда сообщение
$newm = $turl;
//перемещение данных в собщении
$body = str_replace ("%comname%",$comname,$body);
$body = str_replace ("%today%",$today,$body);
$body = str_replace ("%comtext%",$comtext,$body);
$body = str_replace ("%commail%",$commail,$body);
$body = str_replace ("%newm%",$newm,$body);
$good = "<a href=$turl/index.php?page=$page&permit=good&mcount=$mnum>Разрешить</a>";
$body = str_replace ("%good%",$good,$body);
$bad = "<a href=$turl/index.php?page=$page&permit=bad&mcount=$mnum>Запретить</a>";
$body = str_replace ("%bad%",$bad,$body);
//добавим $headers для правильного отображения в html
$headers = "Content-Type: text/html; charset=UTF-8\n";
$headers.= "From: ".$user;
//посылка письма
@mail ($user,$newm,$body,$headers);
// Сообщение после добавления комментов
$comment = "<b>Ваш комментарий принят для премодерации <br>
Он будет размещён на сайте несколько позднее <br><br>
Спасибо Вам за интерес к затронутой теме</b>
<br><p class=sideBarText><a href=$locat>Вернуться к статье</a></p>";
// временные тестовые ссылки для премодерации
$comment .= "<br> $good <br> $bad";
}
}

elseif(is_file($general_file_temp))
{
// Премодерация и запись разрешенных комм. в основной файл
if($permit == "good" and $commnum < $maxcomm)
{
$messages=file($general_file_temp);
$rmline=explode("||",$messages[$mcount - 1]);
$smline=implode("||",$rmline);
// Открыть файл для записи
$fp = fopen("$general_file","a");
// блокировка
flock($fp,LOCK_EXT);
// Записать данные в файл
fputs($fp,"$smline");
fclose($fp, "$general_file");
}

if(is_file($general_file))
{
$messages=file($general_file);
$filecount=count($messages);
$messagess=array_reverse($messages);
for($i= 0; $i < $filecount; $i++)
{
$mline=explode("||",$messagess[$i]);
$commenttb = "<div id=comment align=justify>$mline[0]<br/>$mline[1]</div><br>";
$comment = $commenttb. $comment;
}
if($filecount >= $maxcomm)
{
// Комментарии, конечная строка
$comment = $comment."<br>"."Всего комментариев:&nbsp;".$filecount."<br><br>"."<div align=center><font color=000080 size=3><u>Комментарии больше не принимаются !</u></font></div>";
}
else
$comment = $comment."<br>"."Всего комментариев:&nbsp;".$filecount."<br><br>";
}
else
// Нет комментов
$comment = $comment."<br>"."К данной статье нет комментариев";
}
else
// Нет комментов
$comment = $comment."<br>"."К данной статье нет комментариев";

?>

Данный код необходимо скопировать и заменить им код в файле comment.php. Кроме этого необходимо внести некоторые корректировки в файл установок setings.php и файл перехода по ссылкам move.php. Будет полезно проделать эти операции самостоятельно внимательно изучив, что необходимо добавить или изменить в файлах setings.php move.php для нормальной работы скрипта добавления комментариев с премодерацией. Кроме того полезно самостоятельно создать html контейнер который будет посылаться на емаил админа с комментарием и всей необходимой информацией внутри. Такой файл можно создать средствами Dreamweaver на базе уже существующего файла mail.html, который находится в папке mail и используется для совместной работы со скриптом php отправка почты и сохранить под именем mailcomm.html. Полный путь к файлу будет D:/Mysitephp/php/comment/mailcomm.html.

При самостоятельном внесении изменений, о которых шла речь выше, могут быть допущены ошибки. Чтобы выяснить в чем, можно скачать проект с обновленным php скриптом добавления комментариев с премодерацией и для устранения разночтений заменить им предыдущий, внимательно изучив изменения проведенные в скриптах. Далее все как обычно, выполнив синхронизацию, запустить локальный сервер, набрать в браузере mysitephp.ru и поработать с формой для добавления комментариев. Для проверки работы скрипта comment.php ссылки для разрешения и запрещения добавления комментариев, которые приходят в почтовом сообщении на емаил администратору сайта, выставлены на самой странице с комментариями. Кликая по ним можно разрешать или запрещать публикацию комментария прямо с этой страницы. В дальнейшем при проверке работоспособности нашего проекта php сайта на реальном хостинге ссылки можно будет убрать.

Top.Mail.Ru