Autor | Zpráva | ||
---|---|---|---|
boss Profil * |
#1 · Zasláno: 14. 6. 2010, 14:50:51
Dobrý den, chci se zeptat jestli se dá zjistit pomocí php existence souboru na jiné doméně. Děkuju
|
||
fuckin Profil |
#2 · Zasláno: 14. 6. 2010, 14:59:01
Ano, zjistíš si hlavičku a dle ní poznáš zda existuje.
|
||
boss Profil * |
#3 · Zasláno: 14. 6. 2010, 15:03:54
Jak zjistim hlavičku?
|
||
nightfish Profil |
#4 · Zasláno: 14. 6. 2010, 15:17:41
|
||
boss Profil * |
#5 · Zasláno: 14. 6. 2010, 15:20:23
Hmm, pěkný :-) nešlo by to jednodušeji?
|
||
boss Profil * |
#6 · Zasláno: 14. 6. 2010, 15:42:52
Nebo slo by jen zjistit text? Jestli existuje třeba slovo "EUR 24"
|
||
Mastodont Profil |
#7 · Zasláno: 14. 6. 2010, 15:53:54
boss:
A proč, když stačí hlavičky? |
||
boss Profil * |
#8 · Zasláno: 14. 6. 2010, 16:05:41
Bohužel tohle nefunguje.
$url = 'http://static.php.net/www.php.net/images/php.gif'; if(!empty(get_headers($url))){ echo 'existuje'; } |
||
mckay Profil |
#9 · Zasláno: 14. 6. 2010, 17:42:34
boss:
Vypiš si, co vlastně vůbec v tom get_headers(); přijímáš. print_r(get_headers($url)); |
||
fuckin Profil |
#10 · Zasláno: 14. 6. 2010, 17:59:48
Tak hlavička není nikdy prázdná.
Když soubor neexistuje vrátí 404. Takže testovat zda to nic nevrátí je blbost. |
||
DoubleThink Profil * |
#11 · Zasláno: 14. 6. 2010, 18:11:12 · Upravil/a: DoubleThink
fuckin:
„Tak hlavička není nikdy prázdná.“ Kromě situace, kdy cílový server neodpoví. Pak je hodnota get_headers FALSE a tím pádem empty TRUE. |
||
boss Profil * |
#12 · Zasláno: 15. 6. 2010, 09:48:28
Kdyz neni nikdy prazdna, tak jak mám tedy sestavit podminku? Děkuju
|
||
__construct Profil |
#13 · Zasláno: 15. 6. 2010, 10:09:11 · Upravil/a: __construct
Pokiaľ sa na servery používa mod_rewrite tak pri takomto presmerovaní (dosť bežné):
RewriteCond $1 !^(index\.php|(.*)\.(css|js|txt|xml)) #atď RewriteRule ^(.*)$ index.php/$1 [L] to nemusí správne fungovať |
||
boss Profil * |
#14 · Zasláno: 15. 6. 2010, 10:13:40
Hmm, tak pořád, ale nevím jak zjistit existenci souboru :-(
|
||
__construct Profil |
#15 · Zasláno: 15. 6. 2010, 10:31:13
Toto som skúšal a funguje to, ale som Ti už písal, mod_rewrite to oblbuje..
<?php $image = "http://nejaka-adresa.tld/subor.txt"; $handle = @fopen($image, "r"); if(strpos((string)$handle, "Resource id") !== false){ echo "Existuje"; }else{ echo "Neexistuje"; } ?> |
||
boss Profil * |
#16 · Zasláno: 15. 6. 2010, 11:11:10
JJ, tohle fachá :-) Jistější proces neni? Tohle je super, ale když se to dá oblbnout, tak se jen chci zeptat jak tomu předejít.
|
||
Mastodont Profil |
#17 · Zasláno: 15. 6. 2010, 11:47:00
fopen ovšem nebude fungovat, pokud je v php.ini vypnuto allow_url_fopen ...
|
||
Jan Tvrdík Profil |
#18 · Zasláno: 15. 6. 2010, 13:51:37
boss:
„Hmm, tak pořád, ale nevím jak zjistit existenci souboru :-(“ function url_exists($url) { $headers = @get_headers($url); return ($headers && preg_match('#^HTTP\/\d\.\d\s+(200|301|302)#', $headers[0])); } |
||
AM_ Profil |
#19 · Zasláno: 15. 6. 2010, 13:51:52
[#13] __construct: tomu se ale nijak triviálně vyhnout nedá, ne? server se pak tváří, že ten soubor prostě existuje (většinou je to dokonce žádoucí, že) a pokud při chybějícím souboru toto nedá vědět v hlavičce, je to chyba daného serveru/aplikace a je třeba ji řešit individuálně.
boss: „Jistější proces neni?“ mnohem elegantnější a jistější je get_headers(), je opravdu tak těžké si přečíst manuál a podívat se, co funkce vrací? poznáš to podle první hlavičky, pokud obsahuje 200, soubor existuje, pokud 404, soubor neexistuje, pokud něco jiného, došlo k nějakému specifickému stavu (přesměrování, chyba autentizace atd...) a ten se musíš rozhodnout, jak vyhodnotíš |
||
Časová prodleva: 4 měsíce
|
|||
Miguelos1981 Profil |
#20 · Zasláno: 6. 10. 2010, 13:43:33
Viz třída:
class UrlExists { public function __construct($url) { $this->url = trim($url); } /** * metoda kontroluje existenci url */ public function httpExistance($url) { return (($fp = @fopen($url, 'r')) === false) ? false : @fclose($fp); } /** * metoda vraci info o (ne)zadane url adrese a existenci souboru na url */ public function getUrlInfo() { // kontrolujeme zda jsem vyplnili url if(empty($this->url)) { $status['userMsg'] = 'Nezadali jste URL adresu.'; $status['url'] = false; } else { // kontrolujeme existenci if(!$this->httpExistance($this->url)) { $status['userMsg'] = 'Vámi zadaná URL neexistuje.'; $status['url'] = false; } else { $status['userMsg'] = 'Vámi zadaná URL je v pořádku.'; $status['url'] = true; } } return $status; } } v kódu to pak voláme následovně: $url = '...... tvoje url .........'; $UrlExists= new UrlExists($url); $statusUrl = $UrlExists->getUrlInfo(); var_dump($statusUrl); if($statusUrl['url']) { print 'vse ok'; } else { print 'asi je neco blbe a url je spatne'; } omlouvám se za formátování, ale začínám na tomhle fóru, tak mi to moc nejde :-D |
||
Časová prodleva: 8 dní
|
|||
haba Profil |
#21 · Zasláno: 15. 10. 2010, 01:39:52
Miguelos1981:
Ahoj, na tento problém jsem také narazil. Bohuzel fopen(); je limitován nastavením velikosti paměti v php.ini, tzn. pokud je kontrolovaný soubor větší než nastavená paměť v php.ini tak mi to nefungovalo. Musel jsem nakonec celý problém řešit přez kontrolu existence přez FTP funkce, což samozřejmně nejde použít vždy. Takže pokud někdo má zkušenost jak bez použití funkcí pro práci přez ftp, nebo ssh2.ftp (atp.) tak prosím pište. Moje situace je taková, že podle uživatelova zadání kontroluji existenci video souborů (běžně o velikostech okolo 100MB) na vzáleném stream serveru. |
||
Keeehi Profil |
#22 · Zasláno: 15. 10. 2010, 13:06:15 · Upravil/a: Keeehi
Podívej se na odkaz v příspěvku [#4]. Funkce get_headers by měla řešit tvůj problém.
|
||
Časová prodleva: 13 let
|
0