Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*pstbn.php version 1.0.1*/
- function msg(string $msg): void{ //small message to notify user of an error or whatever else
- echo("<html><head><link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"></head><body><code>$msg</code></body></html>");
- }
- function validatePaste(): bool{
- $paste_limit = 8192;
- $desc_limit = 256;
- if($_POST["paste"]){ //check for content
- $paste_len = strlen($_POST["paste"]); //get length of paste
- $desc_len = ($_POST["desc"]) ? strlen($_POST["desc"]) : 0; //get length of description
- if($paste_len <= $paste_limit){ //validate paste length
- if($desc_len <= $desc_limit){ //validate description length
- return true;
- }
- else{
- msg("ERROR: Description limit is $desc_limit chars. Your description if $desc_len chars.");
- }
- }
- else{
- msg("ERROR: Paste limit is $paste_limit chars. Your paste is $paste_len chars.");
- }
- }
- else{
- msg("ERROR: No content found.");
- }
- return false;
- }
- function createPaste(string $paste, string $desc): ?int{
- $max_pastes = 128;
- $lastID_file = "p/lastID.dat";
- //encode into json
- if($list = json_encode(["paste" => $paste, "size" => strlen($paste), "description" => $desc, "timestamp" => time()], true)){
- if($fp = fopen($lastID_file, "r+")){ //open lastID file
- $pasteID = (int)(file_get_contents($lastID_file) + 1); //get pasteID
- if($pasteID > $max_pastes){ //check paste-count limit
- msg("Paste limit of $max_pastes pastes has been reached.");
- fclose($fp);
- return null;
- }
- fwrite($fp, (string)$pasteID); //update lastID
- fclose($fp);
- $paste_file = "p/" . $pasteID . ".json";
- if($fp = fopen($paste_file, "w")){ //create paste file
- fwrite($fp, $list); //write paste and meta-data to file
- fclose($fp);
- return $pasteID;
- }
- else{
- msg("ERROR: Failed to open paste file ($paste_file).");
- }
- }
- else{
- msg("ERROR: Failed to open lastID file ($lastID_file).");
- }
- }
- else{
- msg("ERROR: JSON parsing error.");
- }
- return null;
- }
- function viewPaste(int $pasteID): bool{
- $paste_file = "p/" . $pasteID . ".json";
- if(file_exists($paste_file)){ //check if paste exists
- if($paste_data = json_decode(file_get_contents($paste_file), true)){ //obtain paste data
- $paste = htmlspecialchars($paste_data["paste"]); //parse paste
- $description = htmlspecialchars($paste_data["description"]); //parse description
- //send web page
- echo("
- <html>
- <head>
- <link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">
- </head>
- <body>
- <h2>description</h2>
- <p>" . $description . "<p>
- <h2>paste</h2>
- <p><b>timestamp:</b> " . $paste_data["timestamp"] . " |
- <b>size:</b> " . $paste_data["size"] . " (bytes) |
- <a href=\"\">permalink</a></p>
- <pre>" . $paste . "</pre>
- </body>
- </html>
- ");
- return true;
- }
- else{
- msg("ERROR: JSON parsing error.");
- }
- }
- else{
- msg("ERROR: Failed to open paste file ($paste_file). Paste likely doesn't exist.");
- }
- return false;
- }
- /*==========Main==========*/
- if($_POST){ //check for POST
- if(validatePaste()){ //validate
- if($pasteID = createPaste($_POST["paste"], (($_POST["desc"]) ? $_POST["desc"] : ""))){ //create
- msg("Paste created.<br><a href=\"pstbn.php?" . $pasteID . "\">View paste</a>");
- }
- }
- }
- else if($_SERVER["QUERY_STRING"]){ //check for query string
- viewPaste((int)$_SERVER["QUERY_STRING"]); //display paste
- }
- else{
- msg("ERROR: No action specified.");
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment