code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Data-URL-Generator -> data-url-generator.php
md5:6fa4c599c39e64df19b13bdd7379e7ba
sha1:34417bc2e64ecd143bbb69a362f078b08dcf1df5
  1. <?php
  2. /**
  3.  * @author: Jörg Reinholz, fastix WebDesign & Consult, Kassel - http://www.fastix.org/
  4. **/
  5.  
  6. /* Konfiguration: */
  7. define ('MAX_KB', 64);
  8. define ('DEBUG', true);
  9.  
  10. /* Main */
  11. if (DEBUG) {
  12.     error_reporting(E_ALL);
  13.     ini_set("display_errors", 1);
  14. } else {
  15.     error_reporting(0);
  16.     ini_set("display_errors", 0);
  17. }
  18.  
  19. define('START_TIME', microtime(true));
  20. define ('MAX_UPLOAD_FILE_SIZE', MAX_KB * 1024);
  21.  
  22. // Leeres Formular:
  23. if ( empty($_POST['typ']) ) {
  24.     $_POST['typ']='html';
  25.     sendForm();
  26.     rm_and_exit();
  27. }
  28.  
  29. // falsche Angaben?
  30. if ( $_POST['typ'] != 'html' && $_POST['typ'] != 'css' && $_POST['typ'] != 'base64')  {
  31.     sendForm();
  32.     rm_and_exit();
  33. }
  34.  
  35.  
  36. // Übertragungsfehler?
  37. if ( $_FILES['Datei']['error'] )  {
  38.     sendForm('Sie haben keine Datei ausgewählt oder bei der Übertragung trat ein Fehler auf.');
  39.     rm_and_exit();
  40. }
  41.  
  42. // Über der eingeschränkten Dateigröße?
  43. if ($_FILES['Datei']['size'] > MAX_UPLOAD_FILE_SIZE) {
  44.     sendForm('Die gesendete Datei ist zu groß!');
  45.     rm_and_exit();
  46. }
  47.  
  48. // Mimetype holen:
  49. $mimeType = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $_FILES['Datei']['tmp_name']);
  50. if (
  51.         'image/svg+xml' != $mimeType
  52.     &&  'image/jpeg'    != $mimeType
  53.     &&  'image/jpg'     != $mimeType
  54.     &&  'image/gif'     != $mimeType
  55.     &&  'image/png'     != $mimeType
  56.     &&  'image/bmp'     != $mimeType
  57.  
  58. ) {
  59.     sendForm('Die gesendete Datei &quot;' . htmlspecialchars($_FILES['Datei']['name']) . '&quot; hat den Mime-Typ &quot;' . htmlspecialchars($mimeType) . '&quot; und somit kein in HTML zulässiges Grafikformat! (PNG, JPEG, BMP, GIF)');
  60.     rm_and_exit();
  61. }
  62.  
  63. //Aktionen:
  64. if ($_POST['typ'] == 'base64') {
  65.     header ('Content-Type: text/plain, charset=US-ASCII');
  66.     echo wordwrap(base64_encode(file_get_contents($_FILES['Datei']['tmp_name'])), 77, "\n", true);
  67.     rm_and_exit();
  68. }
  69.  
  70. if ( ! list ($width, $height, $type, $attr) = getimagesize($_FILES['Datei']['tmp_name'])) {
  71.     if ('image/svg+xml' == $mimeType) {
  72.         $width=256;
  73.         $height=256;
  74.     } else {
  75.         sendForm('Die Größe der gesendete Datei &quot;' . htmlspecialchars($_FILES['Datei']['name']) . '&quot; mit dem Mime-Typ &quot;' . htmlspecialchars($mimeType) . '&quot; konnte nicht ermittelt werden. Die Datei ist sehr wahrscheinlich fehlerhaft!');
  76.         rm_and_exit();
  77.     }
  78. }
  79.  
  80. if ($_POST['typ'] == 'html') {
  81.     $base64 = wordwrap(base64_encode(file_get_contents($_FILES['Datei']['tmp_name'])), 77, "\n", true);
  82.     $Kilobytes = '~' . round(strlen($base64)/1024) . ' KBytes';
  83.     $s = "<img width='$width' height='$height' alt='".htmlspecialchars($_FILES['Datei']['name'])."' src='data:$mimeType;base64,\n$base64'>";
  84.     $s = '<p><strong>Test:</strong></p>' . $s . "<p><strong>Ihre codierte Grafik ($Kilobytes) zum Kopieren und Einfügen: <noscript>(Mit Javascript genügt ein Klick zum Markieren!)</noscript></strong></p><div contenteditable='false' id='output'>" . str_replace("\n", '<br>', htmlspecialchars($s, ENT_QUOTES))  . '</div>';
  85.     sendForm(false, $s);
  86.     rm_and_exit();
  87. }
  88.  
  89. if ($_POST['typ'] == 'css') {
  90.     $base64=base64_encode(file_get_contents($_FILES['Datei']['tmp_name']));
  91.     $Kilobytes= '~' . round(strlen($base64)/1024) . ' KBytes';
  92.     $s = "background-image:url('data:$mimeType;base64,$base64');";
  93.     $widthpx = $width . 'px';
  94.     $heightpx = $height . 'px';
  95.     $s="<p><strong>Test:</strong></p><div style='width:$widthpx; height:$heightpx; background-image:url(\"data:$mimeType;base64,$base64\");'>&nbsp;</div><p><strong>Ihre codierte Grafik ($Kilobytes) zum Kopieren und Einfügen: <span id='noJS'>(Mit Javascript genügt ein Klick zum Markieren!)</strong></p><div contenteditable='false' id='output'>" . htmlspecialchars($s, ENT_QUOTES)  . '</div>';
  96.     sendForm(false, $s);
  97.     rm_and_exit();
  98. }
  99.  
  100. error_log('Das Skript hat unerwartet keinen Endpunkt gefunden.');
  101. echo 'Fataler Fehler: Hier lief was ganz falsch: Exit';
  102. rm_and_exit();
  103.  
  104.  
  105. /* Funktionen */
  106.  
  107. function sendForm($errorText=false, $s=false) {
  108.    header ('Content-Type: text/html, charset=utf8');
  109.    $base64Checked = '';
  110.    $htmlChecked   = '';
  111.    $cssChecked    = '';
  112.    if ('base64' == $_POST['typ']) {
  113.      $base64Checked = 'checked';
  114.    } elseif ('css' == $_POST['typ']) {
  115.      $cssChecked = 'checked';
  116.    } else {
  117.      $htmlChecked = 'checked';
  118.    }
  119. ?>
  120. <!DOCTYPE HTML>
  121. <html>
  122.   <head>
  123.     <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
  124.     <meta charset='utf-8'>
  125.     <title>Data-URI-Generator für Inline-Grafiken</title>
  126.     <script>
  127.     window.onload = function() {
  128.       if ( document.getElementById('output') ) {
  129.          document.getElementById('output').addEventListener('click',
  130.          function () {
  131.             if ( document.selection ) {
  132.                 var range = document.body.createTextRange();
  133.                 range.moveToElementText(this);
  134.                 range.select();
  135.             } else if ( window.getSelection ) {
  136.                 var range = document.createRange();
  137.                 range.selectNode(this);
  138.                 window.getSelection().addRange(range);
  139.             }
  140.          }
  141.          , false);
  142.       }
  143.     }
  144.     </script>
  145.     <link rel="stylesheet" type="text/css" href="/standard.css" />
  146.     <style type="text/css">
  147.     #content {padding:1em 1em 1em 1em;}
  148.     p.errorText {background-color:#fdd;padding:.5em;border:1px solid #a00;}
  149.     label:hover{text-decoration:underline;}
  150.     legend{font-weight:bold;font-size:90%; padding: 0 1em 0 1em; }
  151.     fieldset{border:2px solid #ddd;border-radius:.5em;width:20em;margin-bottom:.5em;}
  152.     #output {width:auto;height:auto;font-family:monospace;font-size:.95em;border:3px solid gray;padding:.5em;margin-right:1em;white-space:nowrap; overflow:scroll;}
  153.     </style>
  154.   </head>
  155.   <body>
  156.     <h1>Data-URI-Generator für Inline-Grafiken</h1>
  157.     <div id="content">
  158.     <?php if ($errorText) echo "<p class='errorText'><strong>Fehler:</strong> $errorText</p>"; ?>
  159.     <form id="myForm" action="" method="post" enctype="multipart/form-data">
  160.       <fieldset><legend>Datei: (maximal <?php echo MAX_KB ?> KibiBytes)</legend>
  161.         <input id="Datei" name="Datei" type="file" size="50" accept="image/*" required><br />
  162.       </fieldset>
  163.       <fieldset><legend>Typ:</legend>
  164.         <input type="radio" <?php echo $htmlChecked; ?> name="typ" value="html" id="getHTML"><label for="getHTML">HTML</label><br />
  165.         <input type="radio" <?php echo $cssChecked;  ?> name="typ" value="css"  id="getCSS"><label for="getCSS">CSS (als Hintergrund)</label><br />
  166.         <input type="radio" <?php echo $base64Checked;  ?> name="typ" value="base64" id="getBase64"><label for="getBase64">nur base64-codiert (Plaintext)</label><br />
  167.        </fieldset>
  168.        <button id="mySubmit" type="submit">Data-URL generieren</button>
  169.     </form>
  170.     <?php if ($s) echo $s; ?>
  171.     <?php
  172.     if ( (! empty($_SERVER['SERVER_NAME']) ) && (  false===strpos('home', $_SERVER['SERVER_NAME']) ) ) {
  173.     $t=getExecTime(START_TIME);
  174.     ?>
  175.     <p>Das Skript (<a href="https://code.fastix.org/Projekte/Data-URL-Generator/">Download</a>) hat auf einem <?php echo getCPUInfo(); ?> und PHP <?php echo phpversion(), ' etwa ', $t; ?> Millisekunde(n) benötigt.</p>
  176.     <?php } ?>
  177.     </div>
  178.   </body>
  179. </html>
  180. <?php
  181. }
  182.  
  183.  
  184.  
  185. function rm_and_exit() {
  186.     if (! empty($_FILES['Datei']['tmp_name']) ) {
  187.         if ( is_file($_FILES['Datei']['tmp_name']) ) {
  188.             unlink ($_FILES['Datei']['tmp_name']);
  189.         } else {
  190.             error_log('Scheinbar wurde das Tempfile während der Laufzeit gelöscht.');
  191.         }
  192.     }
  193.     exit;
  194. }
  195.  
  196. function getCPUInfo() {
  197.     $row =`grep -P 'model name|Processor' < /proc/cpuinfo | head -n1`;
  198.     $parts = explode(':', $row);
  199.     $typ = trim($parts[1]);
  200.     $kerne=trim(`grep  'processor' < /proc/cpuinfo | wc -l`);
  201.     if ($kerne > 1) {
  202.         return "$typ mit $kerne Kern(en)";
  203.     }
  204.     return $typ;
  205. }
  206.  
  207. function getExecTime($startTime) {
  208.    return round((microtime(true)-$startTime)*1000, 1);
  209. }