Autor | Zpráva | ||
---|---|---|---|
Radim24 Profil |
#1 · Zasláno: 4. 7. 2009, 22:07:15 · Upravil/a: Radim24
Zdravím
mám jen dotaz k tomuto návodu: http://php.vrana.cz/ukladani-souboru-od-uzivatele.php?new=8647#new je třeba na serveru nastavit cestu k adresáři s dočasnými soubory? Dostávám hlášku, přenos se nezdařil. Asi bude špatná cesta k souboru s adresářem, ne? Dá se toto nastavit třeba pomocí nějaké direktivy v .htaccess? Dík |
||
Jan Tvrdík Profil |
#2 · Zasláno: 5. 7. 2009, 10:07:40
Radim24:
„je třeba na serveru nastavit cestu k adresáři s dočasnými soubory“ Ne, není. „Dostávám hlášku, přenos se nezdařil“ Pošli sem celé znění chybové hlášky. |
||
Radim24 Profil |
#3 · Zasláno: 5. 7. 2009, 14:34:51
Vkládám sem výstup i s debugem:
print_r($_POST); <P>Array ( [MAX_FILE_SIZE] => 2000000 [recipient] => webhope@centrum.cz [env_report] => REMOTE_HOST,HTTP_USER_AGENT [phone_no] => [email] => [Dotaz_na_nás] => [Submit] => Odeslat ) <P>print_r($_FILES); <P>Array ( [document] => Array ( [name] => +třídy.doc [type] => application/msword [tmp_name] => /tmp/phpQn7PrF [error] => 0 [size] => 178688 ) ) <P><b>Nepodařilo se přesunout uploadovaný soubor. /<b> ?> |
||
Radim24 Profil |
#4 · Zasláno: 5. 7. 2009, 14:46:40
$koncovky = array('jpg', 'jpeg', 'png', 'gif', 'doc'); $image_transfer = false; // nejde o přesun obrazu, nemusím kontorlovat velikost obrazu $chyba = ""; if (!$_FILES || $_FILES["document"]["error"] == UPLOAD_ERR_INI_SIZE) { $chyba = "Soubor je příliš velký, maximální velikost je " . ini_get('upload_max_filesize') . ".\n"; } elseif ($_FILES["document"]["error"] == UPLOAD_ERR_NO_FILE) { $chyba = "Nevybrali jste soubor, který chcete nahrát.\n"; } elseif ($_FILES["document"]["error"]) { $chyba = "Soubor se nepodařilo nahrát, kontaktujte prosím správce serveru.\n"; } elseif (!in_array(strtolower(pathinfo($_FILES["document"]["name"], PATHINFO_EXTENSION)), $koncovky)) { $chyba = "Koncovka souboru musí být jedna z: " . implode(", ", $koncovky) . ".\n"; } elseif ($image_transfer && !($imagesize = getimagesize($_FILES["document"]["tmp_name"])) || $imagesize[2] > 3) { $chyba = "Typ obrázku musí být JPG, PNG nebo GIF.\n"; } elseif (!@move_uploaded_file($_FILES["document"]["tmp_name"], "/" . $_FILES["document"]["name"])) { $chyba="Nepodařilo se přesunout uploadovaný soubor.\n"; } echo "<b>".$chyba."/<b>"; |
||
Jan Tvrdík Profil |
#5 · Zasláno: 5. 7. 2009, 15:42:12 · Upravil/a: Jan Tvrdík
Radim24:
Odstraň ten zavináč před voláním move_uploaded_file, ať se dozvíš, kde je problém. EDIT: Už ten problém pravděpodobně vidím. Pokoušíš se zapsat do rootu (/), na což téměř určitě nemáš práva. Změň to na "./" a nastav práva pro zápis do aktuální složky. |
||
Radim24 Profil |
#6 · Zasláno: 5. 7. 2009, 15:56:43
Už to funguje, díky moc :-)
|
||
Časová prodleva: 3 dny
|
|||
Radim24 Profil |
#7 · Zasláno: 8. 7. 2009, 14:45:28
Ještě jeden problém mi nastal.
Ve formuláři nastavuju nějakou hodnotu MAX_FILE_SIZE - zkoušel jsem od několika kilobyte až do 8 megabyte. <input type="hidden" name="MAX_FILE_SIZE" value="8388608"> a v PHP vracím die( ini_get('upload_max_filesize')."" ); výsledek je ale vždy stejný: Soubor je příliš velký, maximální velikost je 2M. Jak to že mi to píše takový nesmysl, když jsem nastavil "MAX_FILE_SIZE" jinak? Hodnota v PHP je: ; Maximum size of POST data that PHP will accept. post_max_size = 8M |
||
Jan Tvrdík Profil |
#8 · Zasláno: 8. 7. 2009, 14:56:58
Radim24:
Nastav v php.ini ještě upload_max_filesize. |
||
fopen Profil * |
#9 · Zasláno: 8. 7. 2009, 15:23:28
mne sa podari si myslim celkom zaujimavo vyriesit problem z upload_max_filesize
$UploadMaxFilesize = (integer)ini_get('upload_max_filesize')*1048576; |
||
Radim24 Profil |
#10 · Zasláno: 8. 7. 2009, 16:20:49 · Upravil/a: Radim24
Jan Tvrdík
Aha tak tuhle directivu jsem přehlédl, díky fopen Na to? Stačí tam přidat písmeno B, že je to v Megabytech. Spíše jde o to, že nevím velikost toho přeneseného souboru, abych ji zobrazil uživateli. Je tam $HTTP_POST_FILES['userfile']['size'] - to ale vrací "0". |
||
Radim24 Profil |
#11 · Zasláno: 8. 7. 2009, 16:23:22 · Upravil/a: Radim24
Jan Tvrdík
Ptal jsem se na to zda je to odesílání dat přes formulář zneužitelné a prý lehce. Jsem si totiž uvědomil, že hackerovi stačí vytvořit jakýkolik svůj vlastní formulář a může jich vytvořit kolik chce, aby zahltil server nesmyslnými daty... Případné ošetřování či kontorla proti robotům se děje až po příjmutí dat. |
||
fopen Profil * |
#12 · Zasláno: 8. 7. 2009, 23:10:00
Radim24
$UploadMaxFilesize pouzivam prave na overovanie velkosti uploadovaneho suboru a jeho hodnotu ziskavam takto z aktualnej kofiguracie php: if($_FILES['userfile']['size'] < $UploadMaxFilesize){ // upload suboru }else{ echo'File too large '.$_FILES['userfile']['size'].' bytes. Maximum is '.$UploadMaxFilesize; } |
||
Jan Tvrdík Profil |
#13 · Zasláno: 8. 7. 2009, 23:11:48 · Upravil/a: Jan Tvrdík
fopen:
Jednodušší je kontrolovat hodnotu $_FILES['userfile']['error'] (viz dokumentace). |
||
fopen Profil * |
#14 · Zasláno: 8. 7. 2009, 23:29:16
Jan Tvrdík
u mna je to dalsia podmienka: if(@is_uploaded_file($_FILES['userfile']['tmp_name'])){ // upload suboru }else{ echo'Upload error: '.$_FILES['userfile']['error']; } |
||
Alphard Profil |
#15 · Zasláno: 9. 7. 2009, 00:28:49
Radim24:
„Jsem si totiž uvědomil, že hackerovi stačí vytvořit jakýkolik svůj vlastní formulář a může jich vytvořit kolik chce, aby zahltil server nesmyslnými daty“ No nevím, jestli bude mít náladu tohle dělat :-) Ošetřete si, aby nebylo možné nahrát a spustit nějaký škodlivý kód, zbytek nechte až když bude problém. |
||
Časová prodleva: 13 dní
|
|||
Tilfio Profil * |
#16 · Zasláno: 21. 7. 2009, 20:44:35
Zdravim,
s php teprve zacinam a mam otazku. Nahravat soubory do slozky na server a pak je zobrazit na svych strankach treba v galerii jde i bez databazi? Pokud ano tak k tomu mam potrebne skripty jenze nechapu nastavovani cesty v souboru php.ini, myslel jsem ze v nem se to nastavuje pouze kdyz mi jede php na mem PC na localhost. Kde ale nastavim cestu prozatimnimu souboru a cestu kam se ma ulozit nahrany soubor kdyz vse rovnou nahravam na webzdarma? Dekuji za odpoved |
||
Tilfio Profil * |
#17 · Zasláno: 21. 7. 2009, 22:24:51
Nasel jsem asi jeden z tech spise zakladnejsich skriptu a funguje mi jen se mi soubor nahrava primo do korenoveho adresare serveru. Co do nej musim dopsat a kam abych si mohl urcit cestu do podslozky na pr.: /obr/
<?php if (isset($akce)) { if (move_uploaded_file($soubor, $soubor_name)) {echo "Soubor ".$soubor_name." o velikosti ".$soubor_size." bajtů byl úspěšně uploadnut na server<BR>";} else {echo "Při nahrávání souboru ".$soubor_name." o velikosti ".$soubor_size." bitů došlo k chybě!<BR>";} } ?> Pak jsem si nasel kod kterym si vypisu vsechny obrazky ze slozky coz by mi stacilo. |
||
Tilfio Profil * |
#18 · Zasláno: 21. 7. 2009, 22:25:15
<?php if (isset($akce)) { if (move_uploaded_file($soubor, $soubor_name)) {echo "Soubor ".$soubor_name." o velikosti ".$soubor_size." bajtů byl úspěšně uploadnut na server<BR>";} else {echo "Při nahrávání souboru ".$soubor_name." o velikosti ".$soubor_size." bitů došlo k chybě!<BR>";} } ?> |
||
Tilfio Profil * |
#19 · Zasláno: 21. 7. 2009, 22:26:51
„
Nasel jsem asi jeden z tech spise zakladnejsich skriptu a funguje mi jen se mi soubor nahrava primo do korenoveho adresare “ <?php if (isset($akce)) { if (move_uploaded_file($soubor, $soubor_name)) {echo "Soubor ".$soubor_name." o velikosti ".$soubor_size." bajtů byl úspěšně uploadnut na server<BR>";} else {echo "Při nahrávání souboru ".$soubor_name." o velikosti ".$soubor_size." bitů došlo k chybě!<BR>";} } ?> |
||
Radim24 Profil |
#20 · Zasláno: 22. 7. 2009, 13:01:51
Ještě dotaz.
Teď chci udělat formulář, kde bude moci uživatel odeslat více souborů najednou. Kladu si otázku. Max_file_size se vztahuje ke každému jednomu souboru nebo ke všem dohromady? Server na kterém jedu má nastaveno: post_max_size 64M Je to dost vysoká hodnota, ale kdyby měl nastaveno např. 8M A já bych odesílal např. 10 fotek po 1.2 MB (extrémní příklad), odeslalo by se to nebo ne? |
||
Radim24 Profil |
#21 · Zasláno: 22. 7. 2009, 18:08:22 · Upravil/a: Radim24
Tak takhle jsem to vyřešil:
$post_max_size=64; $upload_max_size=2; $file_max_count = $post_max_size/$upload_max_size; echo "Maximum souborů, které můžete odeslat je $file_max_count."; |
||
Tilfio Profil * |
#22 · Zasláno: 23. 7. 2009, 21:53:13
Mam problem:
Vytvoril jsem tuhle databázy: ALTER TABLE `fotky` CHANGE `id` `id` INT( 99 ) UNSIGNED DEFAULT '1', CHANGE `nazev` `nazev` VARCHAR( 250 ) CHARACTER SET latin2 COLLATE latin2_czech_cs DEFAULT 'fotka' kod je skopirovany az po upravach databaze proto tam neni create a pod. Je to skopirovane z weboveho rozhrani kde jsem ji vytvarel. Pak mam tento skript na ulozeni soubrou (fotky) + skript na nacteni fotek ze slozky: <?php if ($handle = opendir('./fotky/')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "<a href=\"./fotky/".$file."\"><img src=\"./fotky/".$file."\" alt=\"./fotky/".$file."\" width=\"100\" hight=\"100\" padding=\"5px\"></a></ br>"; } } closedir($handle); } ?> <BR> <? $db="nazev"; $spojeni = mysql_connect("mysql.webzdarma.cz","pokusphpecko","heslo"); mysql_select_db($db, $spojeni); $nazev= mysql_query("SELECT id,nazev FROM fotky ORDER BY id DESC"); //SQL příkaz $cislo = mysql_fetch_array($nazev); ++$cislo['id']; $cesta = "".$cislo['id'].".jpg"; $soubor = ($_FILES["soubor"]["tmp_name"]); $ok = ($_POST["ok"]); if ($ok == "Upload" && $cesta!="") { if (move_uploaded_file($soubor, "./fotky/$cesta")) { chmod ("./fotky/$cesta", 0646); echo "<br />"; echo "Fotka <u>$cesta</u> byla úspěšně <br /> nahrána na server"; $nazev= mysql_query("INSERT INTO 'fotky' (id,nazev) VALUES ('', $cesta)"); //SQL příkaz } else { echo "<b>Fotku se nepodařilo nahrát na server.</b><BR>"; } } ?> Problem je ze po nahrání fotky se mi zobrazi chyba: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/p/pokusphpecko/galerie_fotky.php on line 45 coz je radek : $cislo = mysql_fetch_array($nazev); Fotka se nahraje ale neulozi se do slozky ./fotky/ a tim padem se nenacte. Pokud fotku nahraju rucne pres FTP tak se fotka zobrazi. Pokud by mi s tim nekdo pomohl byl bych moc rad. |
||
AM_ Profil |
#23 · Zasláno: 24. 7. 2009, 08:50:19
„Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource“
viz FAQ |
||
Časová prodleva: 8 dní
|
|||
Radim24 Profil |
#24 · Zasláno: 31. 7. 2009, 22:09:23
Ta hláška pravděpodobně znamená, že není žádný výsledek, který by bylo možné zpracovávat. Musíš zkontrolovat mysql výstup v předchozím mysql příkazu. Můžeš k tomu snadno použít phpmyadmin a příkaz select.
|
||
Časová prodleva: 15 let
|
0