Implement routing
authorJacob Casper <dev@jacobcasper.com>
Sun, 26 Jun 2022 19:29:29 +0000 (14:29 -0500)
committerJacob Casper <dev@jacobcasper.com>
Sun, 26 Jun 2022 19:34:19 +0000 (14:34 -0500)
I want to have kind of a rest-like `/pic/{id}` structure, and so finally
outgrew filesystem hierarchy based routing and needed to implement it in
the app.

README.md
app.php [new file with mode: 0644]
index.php
upload.php

index 20c3320..ac493ed 100644 (file)
--- a/README.md
+++ b/README.md
@@ -3,3 +3,6 @@ Requirements:
 - php-imagick
 - php-xml
 - sqlite3
+
+Run it behind something and `mod_rewrite` all requests to `index.php`.
+Pinhole `style.css` and `rss.xml`.
diff --git a/app.php b/app.php
new file mode 100644 (file)
index 0000000..a3f2597
--- /dev/null
+++ b/app.php
@@ -0,0 +1,41 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css">
+<link rel="alternate" title="Pics dot JC" type="application/rss+xml" href="/rss.xml">
+</head>
+
+<body>
+<main>
+<a href='upload'>Upload</a>
+<?php
+
+require_once __DIR__ . '/db.php';
+
+$db = get_db();
+$posts = $db->query('SELECT
+  p.ID, p.TIMESTAMP, pi.MIME_TYPE, pi.PIC_B64, c.BODY
+  FROM posts p
+  JOIN pics pi on p.id = pi.post_id
+  JOIN comments c on p.id = c.post_id
+  ORDER BY p.TIMESTAMP DESC');
+while ($post = $posts->fetchArray()) {
+  $mime_type = $post['MIME_TYPE'];
+  $file_b64 = $post['PIC_B64'];
+  $post_id = $post['ID'];
+  $comment_text = $post['BODY'];
+  $img = new Imagick();
+  $img->readImageBlob(base64_decode($file_b64));
+  $img->setImageCompressionQuality(85);
+  $img->adaptiveResizeImage(480, 0);
+  $compressed_b64 = base64_encode($img->getImageBlob());
+
+  echo "<div id='post-{$post_id}'>";
+
+  echo "<img src='data:{$mime_type};base64,{$compressed_b64}' alt='$'/>";
+  echo "<p>{$comment_text}</p>";
+  echo '</div>';
+}
+?>
+</main>
+</body>
+</html>
index c8f23f5..0928d93 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,41 +1,19 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css">
-<link rel="alternate" title="Pics dot JC" type="application/rss+xml" href="/rss.xml">
-</head>
-
-<body>
-<main>
-<a href='upload.php'>Upload</a>
 <?php
 
-require_once __DIR__ . '/db.php';
-
-$db = get_db();
-$posts = $db->query('SELECT
-  p.ID, p.TIMESTAMP, pi.MIME_TYPE, pi.PIC_B64, c.BODY
-  FROM posts p
-  JOIN pics pi on p.id = pi.post_id
-  JOIN comments c on p.id = c.post_id
-  ORDER BY p.TIMESTAMP DESC');
-while ($post = $posts->fetchArray()) {
-  $mime_type = $post['MIME_TYPE'];
-  $file_b64 = $post['PIC_B64'];
-  $post_id = $post['ID'];
-  $comment_text = $post['BODY'];
-  $img = new Imagick();
-  $img->readImageBlob(base64_decode($file_b64));
-  $img->setImageCompressionQuality(85);
-  $img->adaptiveResizeImage(480, 0);
-  $compressed_b64 = base64_encode($img->getImageBlob());
-
-  echo "<div id='post-{$post_id}'>";
+// May contain query params
+$request_uri = explode('?', $_SERVER['REQUEST_URI'], 2);
 
-  echo "<img src='data:{$mime_type};base64,{$compressed_b64}' alt='$'/>";
-  echo "<p>{$comment_text}</p>";
-  echo '</div>';
+switch ($request_uri[0]) {
+    case '/':
+        require './app.php';
+        break;
+    case '/upload':
+        require './upload.php';
+        break;
+    case '/unauthorized':
+        require './unauthorized.php';
+        break;
+    default:
+        header('HTTP/1.0 404 Not Found');
+        die('404 Not Found');
 }
-?>
-</main>
-</body>
-</html>
index 65edac0..456cde7 100644 (file)
@@ -76,7 +76,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
 echo '
   <html>
     <body>
-      <form enctype="multipart/form-data" method="POST" action="upload.php">
+      <form enctype="multipart/form-data" method="POST" action="upload">
        <label>Pick Images:<input type="file" id="upload" name="image[]" multiple>
         </input></label>
         <br/>