Autor Zpráva
Slower
Profil *
Dobrý den,

jsem začátečník v php, tak se předem omlouvám za stupidní chyby...

potřeboval bych pomoci s obrázkem, který chci nahrát na web a zobrazit. Například určitě všeci známe z praxe, Když si chci nahrát profilovou fotku tak se zobrazí a když nenahraji tak nebude žádný obrázek...

kde je problém: když dám VYBRAT soubor a po zmáčknutí tlačítka formuláře ODESLAT se mi zobrazí hláška:
Objekt nenalezen!
Požadované URL nebylo na tomto serveru nalezeno...

zkouším to na localhostu ve winu (Apache, MySQL,PHP) balíček XAMPP...

Tady mam kod:
 <div>
  <?php

 IF (ISSET($_FILES["fupload"]))
   {
PRINT "nazev: ". $_FILES['fupload']['name'] ."<br />" ;
PRINT "velikost: ". $_FILES['fupload']['size'] ."bajtu<br />" ;
PRINT "umisteni: ". $_FILES['fupload']['tmp_name'] ."<br />" ;
PRINT "typ: ". $_FILES['fupload']['type'] ."<br />"  ;
PRINT "chyba: ". $_FILES['fupload']['error'] ."<br />" ;
IF ($_FILES['fupload']['type'] == "image/pjpeg" )
{
  $nazev_souboru = $_FILES['fupload']['tmp_name'];
  $cil= "soubory/". $_FILES['fupload']['name'];
  move_uploaded_file($nazev_souboru, $cil)
  OR DIE ("nelze");
  
 $size = getImageSize($cil);
  $html_img_str = "<p><img width=\"$size[0]\" height=\"$size[1]\"";
  $html_img_str .= "src=\"$cil\"alt=\"preneseny obrazek\" /></p>";
  print $html_img_str;                              
}
}
?> 
</div>
<form enctype="multipart/form-data" action="<?php print $_SERVER['PHP_SELF']?> method="post">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="25600" />
<input type="file" name="fupload" style="width: 500px; " /><br />
<input type="submit"  value="Odeslat soubor" />
</p>
</form>
Děkuji

Moderátor Davex: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
nethor
Profil
Zrada je tady:
action="<?php print $_SERVER['PHP_SELF']?>" method="post">
(chybí uvozovky)

A druhá zrada bude pravděpodobně číhat v použití $_SERVER['PHP_SELF'] - tady záleží, jestli máš bastaveno <base>
zkus action nastavit manuálně.
Slower
Profil *
nethor:
jo bylo to tím, že mi tam chyběla uvozovka díky:) ale ještě se mi nezobrazí obrázek na té stránce a nevím proč...

jenom tohle:

nazev: obrazek.jpg
velikost: 9662bajtu
umisteni: C:\xampp\tmp\php3D3C.tmp
typ: image/jpeg
chyba: 0

*****A zde by měl být náhled toho obrázku ne?****
* *
******************************************
nethor
Profil
Zkus si script naechovat - a vystopovat chybu, našel bys ji.. ;-)

IF ($_FILES['fupload']['type'] == "image/pjpeg" )
typ: image/jpeg
Keeehi
Profil
nethor:
To není chyba, takto to odesílá IE.

Slower:
Není to bezpečné. Hodnotu v $_FILES['fupload']['type'] vytváří prohlížeč, takže se dá podvrhnout. Pokud to zkoušíš lokálně, tak OK, ale veřejně to umístit nesmíš.
nethor
Profil
Keeehi:
To není chyba, takto to odesílá IE.
Jestě, že je to chyba: není to ošetřené va scriptu a proto mu script nefunguje.

image/pjpeg , image/jpeg, ... záleží na způsobu uložení jpegu.
řešil bych to přes getimagesize().
Keeehi
Profil
nethor:
Stačí změnit prohlížeč a už to funguje. To co jsi napsal ty, zase nebude fungovat v IE, takže to je vlastně dle tvé logiky taky chyba.
Tohle už by mohlo být správně:
IF (in_array($_FILES['fupload']['type'], array("image/pjpeg","image/jpeg") )

řešil bych to přes getimagesize()
Zabezpečení? To nestačí!
Slower
Profil *
Keeehi:

tak jsem změnil typ na image/jpeg a vypíše mi to chybu níže uvedenou:

Warning: move_uploaded_file(soubory/6ab49dfe4a61396ef2c79f0092d39d34.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\www\upload.php on line 15

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\phpC19D.tmp' to 'soubory/6ab49dfe4a61396ef2c79f0092d39d34.jpg' in C:\www\upload.php on line 15
nelze


a ani nejde pomoci array

Parse error: syntax error, unexpected T_ARRAY in C:\www\upload.php on line 11

Porad se mi nezobrazi obrazek co bych chtěl...
jenikkozak
Profil
Slower:
tak jsem změnil typ na image/jpeg
Vyrazil jsi klín klínem, teď ti to nebude fungovat v IE.

a ani nejde pomoci array
Uprav tu část, kterou napsal Keeehi, takto:
IF (in_array($_FILES['fupload']['type'], array("image/pjpeg","image/jpeg") ))
Keeehi
Profil
Slower:
V "array" jsem měl překlep. Už je to opraveno.

Ta první chyba souvisí s něčím jiným. Existuje složka C:\www/soubory/? Má script právo do ní zapisovat?
nethor
Profil
Keeehi:
To co jsi napsal ty, zase nebude fungovat v IE
Nepsal jsem řešení, jen jsem upozornil na chybu. Tak se uklidni.

Slower:
1) Zkontroluj, jestli tam máš adresář 'soubory'. Případně nastavení chmod - na serveru.

2) Parse error: syntax error ... Chybí čárka mezi parametry viz in_array
Slower
Profil *
Děkuji, už to frčí! díky moc:) opravil jsem chybu, chyběla tam opravdu čárka:)
Keeehi
Profil
nethor:
Jak psal jenikkozak, něco jsi opravil, ale něco zase rozbil. Pokud chceš chybu, tak chyba je toto: k "image/pjpeg" tam chybí "image/jpeg". Ne že tam pjpeg nemá co dělat.
kikakov
Profil
Slower:
ako potom ma vyzerat zdrojak bez chyb? uz som z toho pometena, dakujem

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: