Autor | Zpráva | ||
---|---|---|---|
kikinet Profil |
Zdravím,
mám skript, který zpracovává fotky, ukládá jméno do db atd. Všechno funguje do doby, kdy měním velikost obrázku a ukládám ho do adresáře. Někde v vtom momentě je chyba, protože fotky se v adresáři neukážou. Položky jako ['tmp_name'], ['url'], $name se načítají bez problémů. $photos[$keys[$i]]['url']['url_orig'].$name vypíše slozka/slozka2/nazev.jpg (u "slozka2" je nastaven chmod 777). Nevím jak mám ale odzkoušet nahrávání a resamplování fotek...
//zmenšení nejdelší strany na 600px $size = getImageSize($photos[$keys[$i]]['tmp_name']); //size[0] = width, size[1] = height $ratio = $size[1]/$size[0]; //poměr stran $img = imageCreateFromJpeg($photos[$keys[$i]]['tmp_name']); //načtení původního obrázku if ($size[1]>=$size[2]) { $imgorig = imageCreateTrueColor(600/$ratio,600); //pro zmenšenou fotku $imgthumb = imageCreateTrueColor(150,150); //pro miniaturu fotky $imgorig = imagecopyresampled($imgorig, $img, 0, 0, 0, 0, 600/$ratio, 600, $size[0], $size[1]); //zmenšený $imgthumb = imagecopyresampled($imgthumb, $imgorig, 0, 0, 0, ($size[1]-150)/2, 150, 150, 600/$ratio, 600); //miniatura } else { $imgorig = imageCreateTrueColor(600,600*$ratio); $imgthumb = imageCreateTrueColor(150,150); $imgorig = imagecopyresampled($imgorig, $img, 0, 0, 0, 0, 600/$ratio, 600, $size[0], $size[1]); $imgthumb = imagecopyresampled($imgthumb, $imgorig, 0, 0, 0, ($size[0]-150)/2, 150, 150, 600/$ratio, 600); }; //uložení fotek do adresáře move_uploaded_file($imgorig, $photos[$keys[$i]]['url']['url_orig'].$name); move_uploaded_file($imgthumb, $photos[$keys[$i]]['url']['url_thumb'].$name); imageDestroy($imgorig); //uvolnění systémové paměti imageDestroy($imgthumb); EDIT: Sekne se to hned v začátku. $img = imageCreateFromJpeg($photos[$keys[$i]]['tmp_name']); . Z nějakého důvodu to nezobrazí fotku, tudíž zbytek scriptu už je k ničemu. Ví někdo proč?
|
||
WertriK Profil |
#2 · Zasláno: 27. 3. 2014, 21:48:32
$img = imageCreateFromJpeg($photos[$keys[$i]]['tmp_name']); //načtení původního obrázku Ten původní obrázek je co za obrázek? |
||
kikinet Profil |
#3 · Zasláno: 27. 3. 2014, 22:06:50
WertriK:
to je myšleno jako nahraná fotka. Ta původní od uživatele, kterou chci já zmenšit a uložit |
||
WertriK Profil |
#4 · Zasláno: 27. 3. 2014, 22:21:17
Zkus nejdříve fotku přesunout na místo a potom změnit.
$img = imageCreateFromJpeg($photos[$keys[$i]]['tmp_name']); Fce move_uploaded_file prauje právě s touto složkou pro dočasné soubory. Tohle je taky dle mě blbost. move_uploaded_file($imgorig, $photos[$keys[$i]]['url']['url_orig'].$name); |
||
kikinet Profil |
WertriK:
Taky se teď dívám, že to všichni řeší nejdřív přesunem. Už to tu zkouším, ale ani tak nedostanu k tomu, aby se obrázek nahrál aspoň v původní velikosti do adresáře. Mm to teď zapsané takto (zbytek zakomentovaný) $dest = "/".$photos[$keys[$i]]['url']['url_orig'].$name; move_uploaded_file($photos[$keys[$i]]['tmp_name'], $dest); Ale nic se neděje No a ještě: ImageJPEG přece jen zobrazí obrázek v prohlížeči ne? |
||
Alphard Profil |
#6 · Zasláno: 27. 3. 2014, 22:46:08
Spíš by bylo zajímavější vypsat tu zdrojovou cestu. Indexování $keys se mi zdá podezřelé. To je hromadný upload?
|
||
kikinet Profil |
Alphard:
Ano je to hromadný upload. Načítají se fotky do pole + kategorie fotky do jiného pole. Když to projedu Foreach() s tím, že prázdné soubory nemá ukládat, uloží se mi to na přeskáčku - Např: odešlou se tři inputy, ale prostřední nebude obsahovat fotku, což znamená, že se uloží 2 fotky - první s indexem 0 a druhá s indexem 2. Nevím jestli to je pochopitelné, proto tu dám ještě kód. foreach ($photo as $key => $values) { foreach ($values as $i => $value) { // i = pořadí souboru if ($photo['name'][$i] != '') { //ošetření prázdných polí, proběhne 5x <-- $counter = $counter+1; //počítadlo pro počet nahraných souborů $photos[$i][$key] = $value; $photos[$i]['group'] = $groups[$i]; //přiřazení kategorie }; }; }; $counter = $counter/5; //výsledek počítadla vydělen 5 -------------^ $keys = array_keys($photos); Možná složité řešení, ale i výpis zdrojové cesty funguje |
||
Alphard Profil |
#8 · Zasláno: 27. 3. 2014, 22:59:19
Viz cz2.php.net/manual/en/features.file-upload.multiple.php
Pole pojmenovat stylem <input name="photo[]" type="file" /><br /> <input name="photo[]" type="file" /><br /> A potom foreach ($_FILES['photo']['tmp_name'] as $key => $file) { move_uploaded_file($_FILES['photo']['tmp_name'][$key], $dest); // pro demonstraci, jak se dostat k dalším polím, jinak samozřejmě move_uploaded_file($file, $dest); } Jestli je to určeno na nahrávání datově velkých fotek, není to úplně šťastné. Lepší je nasadit javascript a uploadovat po jednotlivých fotkách, tyto velké dávky často padají na nastavených limitech. |
||
WertriK Profil |
#9 · Zasláno: 27. 3. 2014, 23:07:20
kikinet:
http://cz1.php.net/manual/en/function.imagejpeg.php Parametr "filename" - "The path to save the file to...". Zkus tohle $dest = $_SERVER["DOCUMENT_ROOT"]."/".$photos[$keys[$i]]['url']['url_orig'].$name; move_uploaded_file($photos[$keys[$i]]['tmp_name'], $dest); |
||
kikinet Profil |
#10 · Zasláno: 27. 3. 2014, 23:08:21 · Upravil/a: kikinet
Alphard:
Formulář mám udělaný tím stylem. Moc to nechci přepisovat, navíc to řazení polí mi opravdu funguje jak má. Jen se nedostanu k tomu uložení. Javascript neovládám a v momentálním presu by se spíš hodilo jen nějak vyřešit ten problém v php. Nevím, zdá se mi to prostě bez chyby, výpisy atd... WertriK: taky nic. Jak se teď ale dívám, už se mi jeden upload povedl, avšak 2 hodiny zpátky, jen mi to commander nezobrazil. Teď by mě fakt zajímalo, která verze skriptu to byla... |
||
WertriK Profil |
#11 · Zasláno: 27. 3. 2014, 23:18:51
Tak si zkus ještě vypsat chyby.
Úplně na začátek dej error_reporting(E_ALL); A po pokusu o upload musím obnovit v commandrovy obsah - možná bude fungovat ctrl + r (nevím jistě). |
||
kikinet Profil |
#12 · Zasláno: 27. 3. 2014, 23:28:43
Funguje tohle
$dest = "./".$photos[$keys[$i]]['url']['url_orig'].$name; move_uploaded_file($photos[$keys[$i]]['tmp_name'], $dest); Pak už ale zase dále nefunguje zmenšení fotky |
||
Časová prodleva: 10 let
|
0