|
minichat 2
// check to see if the user is trying to post something. if (isset($minichat_md5) && isset($minichat_nick) && isset($minichat_message)) { // replace any new line stuff with a space. $nick="strtr($nick," \r\n, ); $message="strtr($message," \r\n, ); // trim leading and trailing whitespace where necessary and remove slashes. $nick="trim(stripslashes($minichat_nick));" $message="trim(stripslashes($minichat_message));" // only proceed if the md5 hash of message is not repeated. if (md5($message) !="$minichat_md5)" { // only proceed if the user actually filled in both fields. if (strlen($nick)> 0 && strlen($message) > 0) {
// If the fields are too long, then chop them to the limits.
if (strlen($nick) > $nick_size) {
$nick = substr($nick, 0, $nick_size);
}
if (strlen($message) > $message_size) {
$message = substr($message, 0, $message_size);
}
// Remove new line characters from the input.
$nick = str_replace("\n", " ", $nick);
$message = str_replace("\n", " ", $message);
// Enforce the maximum word size by breaking up $message into lines.
$message = preg_replace("/([^\s]{20})/", "$1\n", $message);
// Now we can encode the nick and message into HTML.
$nick = htmlentities($nick);
$message = htmlentities($message);
// Now replace the new line characters in $message.
$message = str_replace("\n", " ", $message);
// The IP address of the poster, web cache or whatever.
$ip = $_SERVER['REMOTE_ADDR'];
$time = date("j M Y - G:i:s T");
// Check to see if the 'latest' and 'archive' files exist and can be written to.
if (!is_writable($latest) || !is_writable($archive)) {
// Touch both files.
touch($latest);
touch($archive);
if (!is_writable($latest) || !is_writable($archive)) {
exit("$latest or $archive is not writable. Please check your permissions and try again.");
}
}
// Read every line of the 'latest' file into an array.
$lines = file($latest);
$bottom_index = count($lines);
// Note that each entry takes up 4 lines.
$line_ip = "\n";
$line_nick = "* Posted by $nick\n";
$line_time = "on $time \n";
$line_message = "$message
\n";
$entry = $line_ip . $line_nick . $line_time. $line_message;
$already_posted = 0;
for ($i = 3; $i < $bottom_index; $i += 4) {
if ($lines[$i] == $line_message) {
$already_posted = 1;
break;
}
}
if ($already_posted == 0) {
// Now rebuild the 'latest' file.
// Start by entering the new entry at the top.
$out = fopen($latest, "w");
fwrite($out, $entry);
// Then write all other entries except the oldest.
if ($bottom_index >= $size * 4) {
$bottom_index = $size * 4 - 4;
}
for ($i = 0; $i < $bottom_index; $i++) {
fwrite($out, $lines[$i]);
}
fclose($out);
// Also append the entry to the archive file.
$out = fopen($archive, "a");
fwrite($out, $entry);
fclose($out);
}
else {
// This avoided a "probably accidental" repost.
}
}
else {
echo "You must fill in both fields
";
}
}
else {
// This avoided a deliberate repost, maybe we should say something?
}
}
// include the latest comments on the page.
if (file_exists($latest)) {
include($latest);
}
?>
|