![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Potrzebuję funkcję która sprawdzi czy podany adres URL jest poprawny, i czy nie odpowiada pod nim 404. Wziąłem taki kod, na oko wydaje się poprawny Kod function is_valid_url ( $url ) { $url = @parse_url($url); if ( ! $url) { return false; } $url = array_map('trim', $url); $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port']; $path = (isset($url['path'])) ? $url['path'] : ''; if ($path == '') { $path = '/'; } $path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : ''; if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) ) { if ( PHP_VERSION >= 5 ) { $headers = get_headers("$url[scheme]://$url[host]:$url[port]$path"); } else { $fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30); if ( ! $fp ) { return false; } fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n"); $headers = fread ( $fp, 128 ); fclose ( $fp ); } $headers = ( is_array ( $headers ) ) ? implode ( "\n", $headers ) : $headers; return ( bool ) preg_match ( '#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers ); } return false; } Próbuję go oszukać: $adres=('http://onet'); Kod if(!is_valid_url($adres)) { print('Nie można pobrąć pliku, podany adres URL jest nie poprawny...'); exit(); } else { print('Poprawny'); } Kretyn daje się jednak zrobić w konia i wywala Cytat Poprawny Jakiś pomysł ? Nie ma takiej domeny, więc nie powinno prawa zwrócić true :/ Ten post edytował ahold 23.06.2009, 14:13:31 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 12 Pomógł: 1 Dołączył: 6.08.2008 Skąd: Gostyń Ostrzeżenie: (0%) ![]() ![]() |
Chyba można by do tego użyć CURL-a
http://pl.php.net/manual/en/function.curl-init.php tutaj jest jakiś przykład nawet ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Gdzie masz ten przykład ?
Nie chce pobierać całej strony WWW, bo mi padnie serwer. Wystarczy nagłówek, by sprawdzić czy apache pracuję. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
No to daj fsockopen" title="Zobacz w manualu PHP" target="_manual.
i później tylko nagłówki wyciągasz
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dobra Panowie,
Wracamy do curla:
Teraz mamy taką sytuację, apachowi brakuje zasobów. I odpowiedz trwa, trwa, trwa, trwa trwa. Skrypt wyłącza się po 30 sekundach jako phptimeout. Pytanie, można dać jakąś flagę dla curl-a pt "max wait". Po czym zerwie oczekiwanie ? (zakładamy, że adres jest poprawny. Ale apache może być przeciążony, ale nie do tego stopnia by wywalić np 505 lub inną interialkę). Taki timeout... po którym sprawdza -> odebrałem jakieś dane ? ok nie odebralem w tym czasie ? -> kill Proszę o pomoc, nie mogę się nigdzie tej flagi doszukać. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedź na pytanie: flaga CURLOPT_CONNECTTIMEOUT
Poza odpowiedzią na pytanie: @ahold, Twoje komentarze w kodzie są głupie. Rób to po ludzku. W niektórych przypadkach debilem to trzeba być, żeby nie używać kompresji strony. Cytat //juzer ejdżent jako fejk To TaKiE EmO... ![]() -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Przepraszam za komentarze, nie tylko ja edytuję kod ![]() Faktycznie, o tę flagę mi chodziło. Jak ustawię na 2 sekundy, to jak ją zinerpretuje ? Jak pobierze w 2 sekundy 100% = ok, a jak nie pobierze $data = 0 ? Czy jak nie pobierze w 2 sekundy, to przerywa, i $data = połowa strony ? [do momentu pobierania] ? Kompresowanie strony jest nierozsądne, ciągnie procesor, no chyba że prowadzimy stronę typu Wikipedia gdzie 90 % contentu to tekst. Poza tym zamierzasz przez PHP kompresować, fragmenty tekstu który bedzie dynamicznie pobierany z bazy SQL ? To było fajne 5 lat temu, kiedy witryny były w HTML. Teraz witryna to PNG + dynamiczny content |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kompresowanie strony jest nierozsądne, ciągnie procesor, no chyba że prowadzimy stronę typu Wikipedia gdzie 90 % contentu to tekst. Poza tym zamierzasz przez PHP kompresować, fragmenty tekstu który bedzie dynamicznie pobierany z bazy SQL ? To było fajne 5 lat temu, kiedy witryny były w HTML. Teraz witryna to PNG + dynamiczny content Właśnie miałem na myśli sytuacje typu wikipedia. Wtedy kompresowanie poprawia wydajność. Co do flagi: o ile dobrze pamiętam $content == false gdy potrwa to więcej niż wskazany czas, ale od kiedy ktoś Ci zabronił tego osobiście sprawdzić ![]() ![]() -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 27.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ustawiłem na 2 sekundy. Ale nie mogę znaleźć nigdzie serwera który odpowiada dłużej.
Przeleciałem wszystkie typu - wp - hoga Działa ![]() Wrzuciłem jeden fake serwer który ma awarie (całkowicie padł, apache dogorywa ) - po 2 sekundach ładnie zwrociło fail. Dokładnie to o co mi chodziło. Nie przewidziałem takiej sytuacji. 1) sprawdzam IP -> domena - ip 2) curlem No i wrzuciłem mu domene gdzie leżał apache. Ale mówił że działa. Czyli nie dawał drop-a połączenia. Bo przy dropie CURL wywala od razu fail że nie połączył się na 80 dziesiątym. Pierwszy test przeszło, zabrało się za drugi. I po 30 sekundach po mojej stronie timeout. Naewt nie zalogowało do bazy danych awarii. Za pierwszym razem aż serwer rebootłem, jak zobaczyłem interialkę. Nie przewidziałem takiego scenariusza. Człowiek się uczy całe życie. A co do kompresji, myślisz że można (zapisać stronę www do pliku, dać prawy kompresuj jako tag.gz) i porównać ? Będzie taki sam stopień kompresji, jak przy module mod_gzip ? Chciałem z Ciekawości, ile zaoszczędził bym przy moich witrynach, no a nie będę teraz rebootować apache, wyczerpałem dzienny limit restartów ![]() Ten post edytował ahold 24.06.2009, 18:09:10 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kompresowanie jest wskazane jedynie tam, gdzie jest `dużo w źródle strony`. W miejscach, gdzie cały kod strony zajmuje 40 linijek kompresowanie może co najwyżej zaszkodzić.
-------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 18:09 |