Autor Zpráva
PetraPP
Profil
Pro 99% stáhnutí obrázku používám Curl, který obrázek natáhne do stringu, který pak ukládám do souboru. V tomto uloženém souboru pak obrázky dál upravuji (ořezávání apod.). Script ale pracuje dlouho a tak bych se chtěla zeptat na případnou optimalizaci.
Uložení do souboru obrazek_xml.dat dělám záměrně. Zpočátku jsem zjišťovala příponu obrázku (.jpg, .png), ale nebylo to příliš efektivní, protože někdy URL byla vedena na obrázek v PHP, tak že string obrázku ukládám jako obrazek_xml.dat

Zde je script:
foreach ($xml_data as $data)
{
$image_url = $data["obrazek_url"];

// nacteme pozadovany obrazek z URL adresy
$header=array(
  'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0',
  'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language: cs,en-us;q=0.7,en;q=0.3',
  'Accept-Charset: ISO-8859-1,windows-1250,utf-8;q=0.7,*;q=0.7',
  'Keep-Alive: 115',
  'Connection: keep-alive',);

$ch = curl_init($image_url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_ENCODING, '' );
  $image_file = curl_exec($ch);
curl_close($ch); 


// ulozime soubor do cache NEpřímo
unlink ("../cache/obrazek_xml.dat");
file_put_contents("../cache/obrazek_xml.dat", $image_file);

// následuje script na načtení souboru a zpracování obrázku
}
Tori
Profil
if (@imagecreatefromjpeg($file) === FALSE) { 
  // obrázek není JPEG
} elseif (@imagecreatefrompng($file) === FALSE) {
  // obrázek není PNG
}
anebo otočit podmínky a zjišťovat, který formát projde. Koukněte se do manuálu na příbuzné funkce pro jiné formáty. Zavináč je kvůli tomu, že pokud to není správný formát, funkce vyhazují E_WARNING.

Potřebujete mít obrázky zpracované hned po stažení, nebo to počká pár hodin? Dalo by se oddělit stahování (ručně) a zpracování (CRONem někdy v noci, s použitím set_time_limit), akorát ty ještě nezpracované soubory zaberou dočasně místo na disku.
juriad
Profil
Tori:
Lepší je otevřít ten soubor pomocí fopen a přečíst si prvních pár bytů (hexadecimálně):
jpeg začíná: ff d8 ff e0 xx xx 4a 46 49 46 00
png začíná: 89 50 4e 47 0d 0a 1a 0a

A pro tento test není nutné soubor ani ukládat do souboru; to lze zjistit přímo z toho stringu.

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: