PHP skript: ověření existence obrázku

Nokiacek

PHP skript: ověření existence obrázku
« kdy: 24. 02. 2014, 09:58:20 »
Dobry den.

Potreboval by som poradit. Mam databazu v nej v premennej obrazok.
Ako napisat v php script tak aby overoval ci existuje dany obrazok ?
Nieako som sa zasekol a neviem si dobre predstavit ako to napisat.
Dakujem
« Poslední změna: 24. 02. 2014, 12:58:42 od Petr Krčmář »


DK

Re:PHP script ako overit
« Odpověď #1 kdy: 24. 02. 2014, 10:10:25 »
obrazek je lokalne? http://cz2.php.net/file_exists
pokud je to url, tak file_get_contents, nebo pouzit curl, nicmene tohle bude dost pomale

Karel

Re:PHP script ako overit
« Odpověď #2 kdy: 24. 02. 2014, 10:52:06 »
Uplne neni rozumet tvemu problemu.

Nokiacek

Re:PHP script ako overit
« Odpověď #3 kdy: 24. 02. 2014, 11:35:23 »
obrazok je niekde na webe.
V databaze je www.xxx.xy/obrazok.png a neviem si poradik ako ho overit ci existuje alebo nie.

DK

Re:PHP script ako overit
« Odpověď #4 kdy: 24. 02. 2014, 11:57:07 »
tak pomoci curl zkontrolovat hlavicku serveru (status code a content-type), nicmene zde vznika problem, protoze server muze odpovidat i nekolik sekund, takze to spis do nejakeho extra jobu


tonda_

Re:PHP script ako overit
« Odpověď #5 kdy: 24. 02. 2014, 12:09:54 »
php ma funkci, nepotrebujes curl/wget - ale jak rika DK muze to chvilku trvat
http://us2.php.net/manual/en/function.fopen.php

<?php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
?>

Nokiacek

Re:PHP script ako overit
« Odpověď #6 kdy: 24. 02. 2014, 12:39:31 »
no to je ten problem v db je cca 10.000 + zaznamov a viac krat do dna sa menia. Ja potrebujem overit ci dany obrazok existuje ak nie drop udaj. problem je prave v tom ze neviem ako to efektivne okodovat ci tam obrazok je a co nie...

DK

Re:PHP script ako overit
« Odpověď #7 kdy: 24. 02. 2014, 12:51:08 »
tonda_: tady by dle me mohl nastat problem kdy dany soubor vrati obsah, ale bude to treba stranka, neco nejaka hlaska

Nokiacek: no pokud to nepotrebujes realtime, tak to spust v cronu/cli, bude to trvat dlouho, ale nebude to zpomalovat web (a pokud nemas vlastni server, tak tam bude i problem s max_execution_time

Nokiacek

Re:PHP script ako overit
« Odpověď #8 kdy: 24. 02. 2014, 12:55:38 »
No a nebolo by lepsie cakat na to co vrati server ?

Napriklad takto ?
$filePath = "http://www.xyz.xz/xxx.png"
if ((is_file($filePath)) && (file_exists($filePath))) {
    return true;
}
else {
    return false;
}

rozmyslam ze to hodim do cronu a bude kazdych 5 minut kontrolovat DB. Ale nezda sa mi to efektivne..

DK

Re:PHP skript: ověření existence obrázku
« Odpověď #9 kdy: 24. 02. 2014, 13:08:09 »
Nokiacek: podle mych zkusenosti tohle nebude vubec fungovat presne... na tohle by slo pouzit http://cz1.php.net/get_headers (ani jsem nevedel, ze takova funkce je), misto file_exists, protoze budes moct zkontrolovat, jestli to je fakt obrazek, nebo jenom nejaka chybova hlaska

nejlepsi je dle me porad curl, muzes tam nastavit timeout a tim vyradit obrazky, ktere sice budou existovat,b ale nacitat se budou pomalu

pokud to potrebujes pravidelne, asi by bylo nejlepsi vytvorit si index proscanovanych souboru (treba zaznamenat jenom posledni ID, pokud tam mas autoincrement) a v cronu to pak poustet jenom pro nenaindexovane soubory... do toho treba v nekdy noci kontrola vsech obrazku, jestli stale existuji, ale pri velkem poctu to muze byt celkem problem



nicmene, pokud nejde o verejny web (tj pristupuje k nemu jenom mala skupina lidi), je mozne udelat tu kontrolu synchronne pri kazdem nacteni obrazku, sice by to bylo pomalejsi, ale zase by to bylo presne


no a posledni moznost je to resit na strane klienta -> nulova rezie ze strany serveru, pres ajax pozadavek na smazani souboru, ale zase ti nejaky klient muze smazat celou databazi/zahltit server (pri kombinaci obojiho -> pokud se klientovi obrazek nenacte, ajax pozadavek, ktery zkontroluje, zda obrazek vazne neexistuje) :)

Re:PHP skript: ověření existence obrázku
« Odpověď #10 kdy: 24. 02. 2014, 13:22:44 »
- do cronu urcite, idealne to poustet pres CLI
- nekam si zapisuj last checked id. nebo si pri kazdem check aktualizuj timestamp zaznamu v DB. kazde muze mit vyhody i nevyhody.
- checkuj jen hlavicky (co kdyz bude kazda fotka 5MB?)
Děkuji za možnost editace příspěvku.

tonda_

Re:PHP script ako overit
« Odpověď #11 kdy: 24. 02. 2014, 13:41:48 »
tonda_: tady by dle me mohl nastat problem kdy dany soubor vrati obsah, ale bude to treba stranka, neco nejaka hlaska

Nokiacek: no pokud to nepotrebujes realtime, tak to spust v cronu/cli, bude to trvat dlouho, ale nebude to zpomalovat web (a pokud nemas vlastni server, tak tam bude i problem s max_execution_time

co rikas je samozrejme dobre ;-)
mozna tedy toto http://us3.php.net/get_headers
ale zase jsem videl ze nekdo ma stranku a generuje dynamicke obrazky a muze vygenerovat obrazek a hlavicky a ten obrazek bude prazdny.


takze bude neljepsi si definovat co budes acceptovat za OK and co za FAIL a napsat mozna kombinaci obojeho..

Nokiacek

Re:PHP skript: ověření existence obrázku
« Odpověď #12 kdy: 24. 02. 2014, 14:49:39 »
Takze viac do obrazu.
Jeden script pridava - upravuje uz existujuce zaznamy. Teda ak ma klient upravu / zmeneny parameter zasle len na server poziadavku a ten spracuje jeho feed. Raz moze pridat xy poloziek alebo moze niektore odmazat / zmenit parameter. Toto sa deje aktualne asi 5x do dna ale pocita sa s cca 100 - 200 x do dna. potom je dalsia skupina ktora sice nic neneni ale nikde nie je napisane ze ten jeho obrazok medzi casom nezmeni stav na 404. Preto potrebujem prechadzat DB a taketo zaznamy bez obrazka dropovat. DB resp. jej index sa upravuje . Ide mi o to ako najlepsie porovnam ci dany obrazok existuje a musim kontrolovat uz aj existujuce obrazky ci este stale existuju.

 Stale sa bavime o php.k dispozicii je este CRON a limita  namax_execution_time je len 60s. Tahat obrazky k sebe na server porovnat ci to je obrazok a s5 mi nepride velmi efektivna. Ma s tym niekto skusenost ako to efektivne "skenovat" a upravovat?

DK

Re:PHP skript: ověření existence obrázku
« Odpověď #13 kdy: 24. 02. 2014, 14:57:17 »
nemusis obrazky tahat, jenom zjistovat http hlavicku... pokud je status code 200 a content-type je obrazek, tak by to melo byt ok

meno

Re:PHP skript: ověření existence obrázku
« Odpověď #14 kdy: 24. 02. 2014, 15:28:27 »
Nokiacek: podle mych zkusenosti tohle nebude vubec fungovat presne... na tohle by slo pouzit http://cz1.php.net/get_headers (ani jsem nevedel, ze takova funkce je), misto file_exists, protoze budes moct zkontrolovat, jestli to je fakt obrazek, nebo jenom nejaka chybova hlaska

Preco by nemalo is_file fungovat presne?