#+title: Roll Your Own Static Commenting System in PHP #+date: 2021-04-23 #+description: A simple guide to creating a commenting system in PHP. #+filetags: :dev: * The Terrible-ness of Commenting Systems The current state of affairs regarding interactive comment systems is, well, terrible. It is especially awful if you're a privacy conscious person who does not generally load third-party scripts or frames on the websites you visit. Even further, many comment systems are charging exorbitant fees for something that should be standard. Of course, there are some really terrible options: - Facebook Comments - Discourse There are some options that are better but still use too many scripts, frames, or social integrations on your web page that could impact some users: - Disqus - Isso - Remark42 Lastly, I looked into a few unique ways of generating blog comments, such as using Twitter threads or GitHub issues to automatically post issues. However, these both rely on external third-party sites that I don't currently use. * Stay Static with Server-Side Comments The main issue for my personal use-case is that my blog is completely, 100% static. I use PHP on the back-end but website visitors only see HTML and a single CSS file. No external javascript and no embedded frames. So, how do we keep a site static and still allow users to interact with blog posts? The key actually pretty simple - I'm already using PHP, so why not rely on the classic HTML =
= and a PHP script to save the comments somewhere? As it turns out, this was a perfect solution for me. The second issue for my personal use-case is that I am trying to keep the contents of my website accessible over time, as described by [cite/t:@brandur], in his post entitled [[https://brandur.org/fragments/graceful-degradation-time][Blog with Markdown + Git, and degrade gracefully through time]] . This means I cannot rely on a database for comments, since I do not rely on a database for any other part of my websites. I blog in plain Markdown files, commit all articles to Git, and ensure that future readers will be able to see the source data long after I'm gone, or the website has gone offline. However, I still haven't committed any images served on my blog to Git, as I'm not entirely sold on Git LFS yet - for now, images can be found at [[https://img.cleberg.net][img.cleberg.net]]. Saving my comments back to the Git repository ensures that another aspect of my site will degrade gracefully. * Create a Comment Form Okay, let's get started. The first step is to create an HTML form that users can see and utilize to submit comments. This is fairly easy and can be changed depending on your personal preferences. Take a look at the code block below for the form I currently use. Note that == is replaced automatically in PHP with the current post's URL, so that my PHP script used later will know which blog post the comment is related to. The form contains the following structure: 1. == - This is the form and will determine which PHP script to send the comment to. 2. =