Autor Zpráva
Mesiah
Profil
Dobrý den,
trochu si hraju s php na windows a tedkom pracuju s nahravanim souboru na server.
script postupuje takto:
Je admin?
Je velikost menší než 500?
Je nahraný na server?
Povedlo se přesunout z tempu tam kam má?
echo "jo, tak to by bylo.";

Ale problem je v tom, že při testování, zda je soubor nahraný na server mi vyhodi, ze neni nahrany. (vypisuje chybu "2" (pomocí $_FILES['picture']['error']))
k testování jestli je nahraný na server používám: "if ( is_file($_FILES['picture']['tmp_name']) )".

A dál by mě zajímalo: kam php ukládá dočasné soubory? koukal jsme do php.ini a tam se mi to nepodařilo najít.
Takže, poradí mi někdo prosim ? :)

PS:
PHP si ze me dela srandu?
Nevim, jak vy, ale ja si pod
if ($_FILES['picture']['size']<500000)
predstavim to, ze pustim jen ten soubor, ktery ma mensi velikost nez 500kb, ale moje PHP 5 si to asi nemysli...
Takže přidávám celý script, první je pro zobrazeni formu a druhy je jeho zpracovani.
Můžete m říct, kde že je ta chyba? :-(

function FormPridejObrazek($vstup)
{
  $dotaz = mysql_query("SELECT
    produkty.IDProduktu AS IDProduktu,
    kategorie.TextKategorie AS Kategorie,
    skupiny.`Text` AS Skupina
    FROM
    produkty
    Inner Join kategorie ON produkty.IDKategorie = kategorie.IDKategorie
    Inner Join skupiny ON produkty.IDSkupiny = skupiny.IDSkupiny
    WHERE
    produkty.IDProduktu = ".$vstup);
  if ($dotaz)
  {
    $pristup = mysql_fetch_array($dotaz);
    echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\"> \n";
    echo "<form method=\"POST\" ENCTYPE=\"multipart/form-data\" action=\"pridejobrazek.php\"> \n";
    echo "<tr> \n<td> Obrázek (maximálně 500kb): </td> \n";
    echo "<td> \n";
    echo "<input type=\"hidden\" name=\"skupina\" value=\"".$pristup['Skupina']."\"> \n";
    echo "<input type=\"hidden\" name=\"kategorie\" value=\"".$pristup['Kategorie']."\"> \n";
    echo "<input type=\"hidden\" name=\"idproduktu\" value=\"".$pristup['IDProduktu']."\"> \n";
    echo "<input type=\"HIDDEN\" name=\"MAX_FILE_SIZE\" value=\"500\"> \n";
    echo "<input type=\"file\" name=\"picture\" ACCEPT=\"image/*\"> \n";
    echo "</td> \n</tr> \n<tr> \n";
    echo "<td colspan=\"2\"> <input type=\"submit\" value=\"Odeslat\"> </td> \n";
    echo "</tr> \n</form> \n</table> \n";
  }
}


<?php
include("opendb.php");
include("public.php");
include("fce.php");

if ( JeAdmin() )
{
  if ($_FILES['picture']['size']<500000)
  {
    // maximalní velikost obrázku je 500kb, pokud je menší, tak pokračuji ve scriptu
    if ( is_file($_FILES['picture']['tmp_name']) )
    {
      // soubor se dostal na server...
      if ( move_uploaded_file($_FILES['picture']['tmp_name'], "./picture_product/".$_POST['skupina']."/".$_POST['kategorie']."/".$_POST['idproduktu']."/".$_FILES['picture']['name']) )
      {
        // podařilo se překopírovat uploadovaný soubor do slozky:
        // ./picture_product/skupina/kategorie/idproduktu/soubor.jpg
        echo "Obrázek se podařilo úspěšně nahrát na server.";
      }
      else
      {
        echo "Bohužel, nepodařilo se přesunout soubor tam, kam patří.";
      }
    }
    else
    {
      echo "Žádný soubor jste neuploadovali.<br />";
      echo "Chyba: ".$_FILES['picture']['error'];
    }
  }
  else
  {
    echo "Soubor je příliš velký.";  
  }
}
else
{
  echo "Musíte být přihlášen.";
}
?>
AM
Profil *
většinou do c:\windows\temp

UPLOAD_ERR_FORM_SIZE

Value: 2; The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.

Jestli zadáváš maxfilesize="500", tak to znamená 500 bytů ;) a to asi nebude dobře. Jinak to není bezpečný způsob - uživatel si může HTML změnit, pro bezpečnou kontrolu velikosti musíš provést kontrolu na serveru (php.ini upload_max_filesize nebo přes $_FILES['sbr']['size'];
Mesiah
Profil
AM
aha, diky za radu ohledně chyby 2 :)
ale další věc je to, že mě php nema rado.

if ($_FILES['picture']['size']<500000)
rekl bych, ze pusti jen ten soubor, ktery ma mensi velikost nez 500kb, ale moje PHP 5 si to asi nemysli...

ach jo. :-(

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: