Autor Zpráva
Trax
Profil
Ahojte, řeším několik zajímavých problému spojených se správou galerie a už jsem vyzkoušel několik řešení, ale stále se zasekávám v jediným kroku. Popíšu zde tedy pár problémů a přiložím zdroják. Doufám, že se nějaká rada najde. :)

K následujícím problémům bych napřed rád poznamenal, že na lokální sítí mi vše funguje.



Problémy:

1. Prvně jsem testoval web na webzdarma.cz kde mi všechno prvně fungovalo, ale když jsem tu správu galerie dotáhl ke konci, tak jsem zjistil, že mi nefunguje funkce getimagesize() a na základě této chyby, se nevytvořila miniatura nahrávané fotky. (Respektive se vytvořila, ale obrázek se již nepřekopíroval, protože neměl k dispozici originální výšku a šířku.) getimagesize() je na řádku 59.

2. Pro nahrávání jsem zkusil funkci copy() i move_uploaded_file(), ale nemělo to na to žádný vliv. (move_uploaded_file() mi nefunguje na lokální sítí, což mě ale ani tolik neudivuje.)

3. Jelikož tyhle webové stránky poputujou k praktickým maturitám, tak jsem to zkoušel prokonzultovat s jedním vyučujícím, který učí programování (já jsem zaměřenej na grafiku a php se učím sám, především z této diskuze :] ) a ten mi řekl, že to je pravděpodobně hostingem. Zkusil jsem tedy web na doméně druhého řádu, kde mi všechno funguje až na nahrávání fotek. Zde se mi ukázal celkem zvláštní problém, kde mi formulář s inputem typu file neuloží žádnou informaci o souboru do žádné proměnné. Přeskočí celou hiearchii příkazů počínaje řádkem 42 a zastaví se na řádku 114.


Zdroják:
<?php
  $akce = @$_POST['act'];
  $vyber = @$_POST['galerie'];
  $nahrano = @$_POST['soubor'];
?>

   <form method="post" action="index.php?p=xgallery&amp;act=06" enctype="multipart/form-data" style="display: inline-block; width: 500px; padding: 0px;">
  <input name="act" type="hidden" value="pridat_fotku">
  <label for="nahrat" class="label" style="width: 110px !important; float: none !important; padding: 0px !important;">Nahrát fotku:</label>
  <input type="file" name="soubor" id="nahrat" class="form" style="width: 323px !important; display: inline-block; float: none !important; margin: 0px 0px 10px 0px !important;">
  <label for="vyber" class="label" style="width: 110px !important; float: none !important; padding: 0px !important;">Do galerie:</label>
  <select name="galerie" id="vyber" class="form" style="width: 210px !important; margin: 0px !important;">
    <option></option>
    <?php 
      $vysledek = mysql_query ("SELECT * FROM `galerie` ORDER BY `id` DESC");
      while ($zaznam = MySQL_Fetch_Array($vysledek))
        {echo "<option value='".$zaznam["id"]."'>".$zaznam["nazev"]."</option>";}
    ?>
  </select>
  <input type="submit" value="Nahrát" class="but" style="width: 110px !important; display: inline-block; float: none !important; margin: 0px !important; padding: 1px 0px 1px 0px !important;">
</form>
<br><br>
<? 
  if ($akce=="" or $akce=="smazat_galerii" or $akce=="vytvorit_galerii")
    {echo "";}
  elseif ($akce=="pridat_fotku" and $vyber=="")
    {echo "<div class='red' style='float: none; margin: 0px 0px -28px 0px !important;'>Nezadali jste název galerie!</div>";}
  elseif ($akce=="pridat_fotku" and $vyber!="")
    {
      $vysledek_galerie = mysql_query ("SELECT `nazev` FROM `galerie` WHERE `id`='".mysql_real_escape_string($vyber)."'");
      $zaznam = MySQL_Fetch_Array($vysledek_galerie);
      
         $galerie_jmeno = $zaznam["nazev"];
      $galerie_jmeno_znaky = url_zmena_znaku($galerie_jmeno);
      
         $soubor_jmeno = $soubor_name;
      $soubor_jmeno_znaky = url_zmena_znaku($soubor_jmeno);
      $soubor_typ = $soubor_type;
      $soubor_velikost = $soubor_size;      
      
         echo "soubor=".$soubor."";
      if ($soubor_typ=="image/jpeg" or $soubor_typ=="image/jpg" or $soubor_typ=="image/pjpeg")
        {
          if (!is_dir("./galerie/".$galerie_jmeno_znaky.""))
          {
            echo "<div class='red' style='float: none; margin: 0px 0px -28px 0px !important;'>Galerie neexistuje!</div>";
          }
          
             else
          {
            if (!is_dir("./galerie/".$galerie_jmeno_znaky."/miniatury"))
            {
              mkdir("./galerie/".$galerie_jmeno_znaky."/miniatury", 0777); 
              chmod("./galerie/".$galerie_jmeno_znaky."/miniatury", 0777);
            }
            
               if (copy($soubor, "./galerie/".$galerie_jmeno_znaky."/".$soubor_jmeno_znaky."")) 
              {
                $velikost = getimagesize($soubor);
                  $sirka = $velikost[0]; //přiřadí se šířka obrázku
                  $vyska = $velikost[1]; //přiřadí se výška obrázku
                  
                     echo"sirka=".$sirka."<br>vyska=".$vyska."<br>";
                  
                   if ($sirka < $vyska)
                  {
                    $sirka_miniatury = 100;
                    $vyska_miniatury = 150;
                  }
                  elseif ($sirka > $vyska)
                  {
                    $sirka_miniatury = 150;
                    $vyska_miniatury = 100;
                  }
                  else
                  {
                    $sirka_miniatury = 120;
                    $vyska_miniatury = 120;
                  }
                  
                   //vytvorime novy obrazek pozadovane vysky a sirky
                $vytvorit_obrazek = imagecreatetruecolor($sirka_miniatury, $vyska_miniatury);
    
                   //otevreme puvodni obrazek se souboru
                $obrazek = imagecreatefromjpeg("./galerie/".$galerie_jmeno_znaky."/".$soubor_jmeno_znaky."");
    
                   //a okopirujeme zmenseny puvodni obrazek do noveho
                imagecopyresampled(
                  $vytvorit_obrazek, 
                  $obrazek, 0, 0, 0, 0, 
                  $sirka_miniatury, $vyska_miniatury, 
                  $sirka, $vyska
                  );
    
                   //a ulozime 
                imagejpeg($vytvorit_obrazek, "./galerie/".$galerie_jmeno_znaky."/miniatury/".$soubor_jmeno_znaky."", 100);
                  
                   //kotrola a zápis do DB
                $vysledek_fotky = mysql_query("SELECT `nazev` FROM `fotky` WHERE galerie='".mysql_real_escape_string($vyber)."' AND nazev='".mysql_real_escape_string($soubor_jmeno)."' LIMIT 1");
                if (mysql_num_rows($vysledek_fotky)==0)
                  {
                    mysql_query("INSERT INTO `fotky` (`datum`,`galerie`,`nazev`,`nazev_znaky`,`sirka`,`vyska`) VALUES (NOW(), '".mysql_real_escape_string($vyber)."', '".mysql_real_escape_string($soubor_jmeno)."', '".mysql_real_escape_string($soubor_jmeno_znaky)."', '".mysql_real_escape_string($sirka)."', '".mysql_real_escape_string($vyska)."')");
                    
                       echo "<div class='green' style='float: none; margin: 0px 0px -28px 0px !important;'>Soubor <b>".$soubor_jmeno."</b> o velikosti <b>".$soubor_velikost."</b> bajtů byl úspěšně nahrán na server.</div>";
                  }
                else
                  {echo "<div class='red' style='float: none; margin: 0px 0px -28px 0px !important;'>Fotografie již existuje!</div>";}
                  
                
                 }
            }
        }
      elseif ($soubor_type=="")
        {echo "<div class='red' style='float: none; margin: 0px 0px -28px 0px !important;'>Nezadali jste soubor!</div>";}
      else 
         {echo "<div class='red' style='float: none; margin: 0px 0px -28px 0px !important;'>Soubor není požadovaného formátu!</div>";}
    }
  else
    {echo "<div class='red' style='float: none; margin: 0px 0px -28px 0px !important;'>Nastala chyba!</div>";}
?>

Díky za rady. :)
Davex
Profil
ad 1) Na Webzdarma je zakázána funkce copy() a rozměry obrázku bys měl zjišťovat z obrázku na novém umístění, protože po move_uploaded_file() z dočasného zmizí.

ad 2) „move_uploaded_file() mi nefunguje na lokální sítí, což mě ale ani tolik neudivuje.
Aby to ve Windows fungovalo spolehlivě, tak musí být dočasný adresář pro upload (upload_tmp_dir) na stejném disku jako je adresář s nahranými obrázky.

ad 3) Nespoléhej na zapnuté register_globals a informace o nahraném souboru čerpej z pole $_FILES.
Trax
Profil
Davex:
Díky. :) Ano, $_FILES už používám. A už funguje v podstatě všechno. Problém byl právě jen v tomto. Na WZ zřejmě nefunguje ani move_uploadedfile(), tak jsem to dal na doménu druhého řádu. A co se týče toho zjišťování šířky a výšky, tak to mi funguje v pohodě i tak, jak je to v tom zdrojáku. Jde mi jen o to, vytvořit podle rozměrů miniaturu a pak ty vlastnosti uložit ještě do DB.
Davex
Profil
Trax:
Na WZ zřejmě nefunguje ani move_uploadedfile()
Ve jménu funkce ti chybí podtržítko move_uploaded_file(), a tato na WZ funguje.
Trax
Profil
Davex:
To byl jen překlep.. Ale nešlo mi to. Možná jen nějakej renonc. Každopádně díky, problém jsem vyřešil.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0