Serving Local Markdown with PHP
I’ve got a bunch of projects with README.md files. (I standardized on Markdown when I made RepoRat to self-host all of my repos.)
I haven’t had a convenient way to preview my READMEs, which has been pretty annoying.
Tonight’s hack is serve-md.php
. Entire source code below.
To be clear, what I’ve built here is a way to navigate to Markdown files and view them as rendered by an external markdown executable such as Discount (portland.or.us).
When I first visit it on my home web server, it presents all of
the markdown files (must end in .md
) in a path:

Click one, and there it is:

Source
There’s the entirety of serve-md.php
. Obviously, you’ll need to
customize the path and possibly the Markdown to HTML renderer.
(I use Discount’s markdown
, which I picked when I made RepoRat.)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Serve Markdown</title> <style> body{ background: #fdf4db; margin:40px auto; max-width:700px; line-height:1.6; font-size:18px; } .md { background: #fff; font-size: .9em; border: 1px solid #000; padding: 1em; } </style> </head> <body> <?php $path = "/home/dave/proj/"; if(isset($_REQUEST['f'])){ $file = $path . $_REQUEST['f']; echo "<a href=\"?\"><Back</a> - "; echo "<code>$file</code><br>\n"; echo "<hr>\n"; $html = shell_exec("markdown $file"); echo "<div class=\"md\">$html</div>"; } else{ echo "<h1>Pick a Markdown File</h1>"; $rdi = new RecursiveDirectoryIterator($path); foreach(new RecursiveIteratorIterator($rdi) as $file) { $short = str_replace($path, '', $file); if(preg_match('/\.md$/', $short)){ echo "<a href=\"?f=$short\">$short</a><br>\n"; } } } ?> </body></html>