Autor Zpráva
freedavi
Profil *
Ahoj, mám problém s uložením obrázku.
Když ho zmenším a dám uložit funkcí ImageJpeg ($resized_img_hlavni,"./clanky-profilu/nastenka-download/$file_name"); tak je všechno v pohodě, ale já ten obrázek potřebuju zmenšit a uložit na externí ftp.
Takže mám funkci na zmenšení která končí imagecopyresampled($resized_img_hlavni, $new_hlavni, 0, 0, 0, 0, $hlavni,800, $width, $height);
ta funkce funguje, ale pak výsledek odesílám na ftp funkcí ftp_put($conn_id, $path."/".$file_name, $resized_img_hlavni, $transfer_mode);
a v tom je ta chyba že nevím, jak zmenit, nebo co udělat, aby proměná $resized_img_hlavni se dala poslat přes ftp jako hotovej obrázek, nebo jak bych to vysvětlil...
Chybová hláška - Warning: ftp_put() expects parameter 3 to be a valid path, resource given in /www/...
Keeehi
Profil
1. Zmenšit
2. Zmenšeninu uložit
3. Uložený soubor (zmenšeninu) poslat

Podle té chybové hlášky to vypadá, že jsi vynechal krok 2.
freedavi
Profil *
to asi jsem vynechal, to jo, protože tu zmenšeninu potřebuju rovnou uložit na externí ftp, nebo jak jinak to uložit bez toho, abych to ukládal na web hosting, kde je místo jen na pár fotek...
Nebo to musím nejdřív uložit funkcí ImageJpeg ($resized_img_hlavni,"./clanky-profilu/nastenka-download/$file_name");
pak to ve scriptu zas vytáhnout a uložit na ftp a tu uloženou fotku scriptem zase smazat?
Keeehi
Profil
Ano, pokud tam nemáš dostatek místa tak to po nahrání zase smaž.
FTP je velmi primitivní protokol. Umí víceméně jen posílat soubory, takže to uložit musíš.
freedavi
Profil *
To mi přijde takový neefektivní a těžkopádný :-) Ale objevil jsem ještě toto, to by bylo asi to co hledám
ob_start();
ImageJPEG($resized_img_hlavni);
$image_buffer = ob_get_contents();
ob_end_clean();
ImageDestroy($resized_img_hlavni);
//Create temporary file and write to it
$fp = tmpfile();
if (fwrite($fp, $image_buffer)) {
rewind($fp);
//Upload new image 
        
        
        ftp_put($conn_id, $path."/".$file_name, $fp, $transfer_mode);
      }
Jen to ještě asi nějak vychytat, protože mi to ted hlásí chybu Warning: ftp_put() expects parameter 3 to be a valid path, resource given in /ww...
a to ted taky nevím, z jakýho důvodu...
juriad
Profil
Použij: tempnam. To vrací název souboru namísto filehandlu.
freedavi
Profil *
Opravdu nevím, pořád ta samá chyba... A s tím tempnam si nevím už vůbec rady, to by mělo vytvořit unikátní jméno souboru, název souboru mám už ve $file_name, tak nevím, jestli to tam mám někam přidat...
Keeehi
Profil
freedavi:
Dle dokumentace očekává funkce ftp_put v třetím parametru "The local file path." Ne žádná data ale jméno souboru. Takže ten soubor bude muset vždy fyzicky existovat.

Existuje však funkce ftp_fput která očekává v třetím parametru ukazatel na otevřený soubor což je v tvém případě právě $fp.

To mi přijde takový neefektivní a těžkopádný :-)
Ale je to jediné možné řešení. I funkce tmpfile ten soubor na disku fyzicky vytvoří. Jen se o to vytvoření a mazání nemusíš starat ale výsledek bude stejný.
freedavi
Profil *
Keeehi:
Děkuju moc, to je ono, už to frčí konečně, ta změna ftp_put na ftp_fput pomohla :-)
Mě šlo právě o to, abych se o ty dočasně uložený soubory nemusel starat a přidávat kvůli tomu další řádky kodu, takže jsem rád, že to šlo i takhle :-)
Keeehi
Profil
freedavi:
Zase nemáš kontrolu nad tím, kde se ten soubor vytváří a jestli se opravdu smazal, ale když používáš ftp, tak ti na tom asi záležet nebude.

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: