Tori

upload obrazku s popisy (bez DB)

Feb 26th, 2012
96
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. /* nastavení: */
  4. $adresar = 'foto'; // adresář, kam se ukládají fotky (relativní cesta od tohoto skriptu)
  5. $popisyFotek = 'popisy.ini'; // soubor pro popisky k fotkám
  6.  
  7. /*--------------*/
  8. $adresarCesta = dirname(__FILE__).'/'.trim($adresar, '/'); // absolutní cesty, není potřeba měnit.
  9. $popisyFotek = dirname(__FILE__).'/'.trim($popisyFotek, '/');
  10.  
  11. /* pokud byl odeslaný formulář, uložíme soubor a popisek. */
  12. if (isset($_POST['upload']))    {
  13.    
  14.     $chyba = '';
  15.     /* soubor bude uložen pod bezpečným jménem (bez diakritiky, mezer apod.) */
  16.     $noveJmeno = preg_replace('~[^a-z0-9_.-]+~i', '', $_FILES['soubor']['name']);
  17.    
  18.     /* zjistíme, jestli byl vybraný soubor a nedošlo k chybě při uploadu */
  19.     if ($_FILES['soubor']['error'] !== UPLOAD_ERR_OK)   {
  20.    
  21.         switch ($_FILES['soubor']['error']) {
  22.             case UPLOAD_ERR_INI_SIZE:
  23.             case UPLOAD_ERR_FORM_SIZE:
  24.                 $chyba = 'Soubor je příliš velký.';
  25.                 break;
  26.             case UPLOAD_ERR_PARTIAL:
  27.                 $chyba = 'Soubor se nenahrál celý, zkuste to znova.';
  28.                 break;
  29.             case UPLOAD_ERR_NO_FILE:
  30.                 $chyba = 'Nebyl vybraný žádný soubor.';
  31.                 break;
  32.             default:
  33.                 $chyba = 'Při nahrávání souboru došlo k chybě serveru.';
  34.         }
  35.        
  36.     /* nebyl soubor podvržený? */
  37.     } elseif (! is_uploaded_file($_FILES['soubor']['tmp_name'])) {
  38.         $chyba = 'Při nahrávání souboru došlo k chybě.';
  39.    
  40.  
  41.     } elseif (! is_dir($adresarCesta))  {
  42.         $chyba = 'Adresář, kam se mají fotky ukládat, je zadaný chybně.';
  43.  
  44.     } elseif (! is_writeable($adresarCesta))    {
  45.         $chyba = 'Skript nemá oprávnění ukládat soubory do zvoleného adresáře. Prosím, změňte přístupová práva.';
  46.    
  47.     } elseif (file_exists($adresarCesta.'/'.$noveJmeno))    {
  48.         $chyba = "Soubor s tímto názvem ($noveJmeno) už na serveru existuje.";
  49.  
  50.    
  51.     /* soubor je v pořádku, uložíme ho */
  52.     } else {
  53.        
  54.         if (move_uploaded_file($_FILES['soubor']['tmp_name'], $adresarCesta.'/'.$noveJmeno)) {
  55.            
  56.             /* uložení popisu. Pokud soubor .ini neexistuje, skript se ho pokusí vytvořit. */
  57.             if ($_POST['popis'] !== '')     {
  58.                 $text = 'popisy["'.$noveJmeno.'"] = "'.addslashes($_POST['popis']).'"'."\n";
  59.                 if (! file_put_contents($popisyFotek, $text, FILE_APPEND | LOCK_EX))    {
  60.                     $chyba = 'Soubor byl uložený v pořádku, ale nepodařilo se uložit jeho popis.';
  61.                 }
  62.             }
  63.         } else {
  64.             $chyba = 'Při nahrávání souboru došlo k chybě.';
  65.         }
  66.     }
  67.    
  68.    
  69.     echo (!empty($chyba) ? "<p style='color: red;'>$chyba</p>" : "<p>Soubor byl uložen v pořádku.</p>");
  70.    
  71. }
  72.  
  73.  
  74. /* Zobrazení uložených obrázků */
  75.  
  76. echo '<h2>Nahrané obrázky</h2>';
  77.  
  78. /* načteme popisy k obrázkům */
  79. $data = parse_ini_file($popisyFotek);
  80. $popisy = $data['popisy'];
  81. unset($data);
  82.  
  83. $d = opendir($adresarCesta);
  84. while ($d !== false && ($soubor = readdir($d)) !== false) {
  85.  
  86.     if ($soubor != "." && $soubor != "..") {
  87.         /* pokud k této fotce existuje popis, zobrazíme ho */
  88.         $titulek = (isset($popisy[$soubor]) ? $popisy[$soubor] : 'Popis fotky nebyl zadaný.');
  89.        
  90.         echo "<a href='$adresar/$soubor' title='$titulek'><img src='$adresar/$soubor' title='$titulek'></a>\n";
  91.     }
  92. }
  93.  
  94. closedir($d);
  95.  
  96. /* formulář pro přidávání fotek */
  97. ?>
  98.  
  99. <hr size="1" noshade>
  100. <h2>Přidejte další obrázek</h2>
  101. <form action="" method="post" enctype="multipart/form-data">
  102. <table>
  103.     <tr><td>Zadejte popis obrázku:</td><td><input type="text" name="popis"></td></tr>
  104.     <tr><td colspan="2"><input type="file" name="soubor" accept="image/*"></td></tr>
  105.     <tr><td colspan="2"><input type="hidden" name="upload" value="ok"><input type="submit" value="Nahraj"></td></tr>
  106. </table>
  107. </form>
RAW Paste Data