Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Wyciąganie domeny z napisu
craker
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


Witam,
napisałem sobie skrypt do wyciągania domeny z podanego adresu
Kod
preg_match ('#http:\/\/(www\.)?(.+?)\/#si' , $ala, $key);

czyli w $key[2] mam domenę i skrypt radzi sobie dobrze w przypadku adresu
http://www.adres.pl i http://adres.pl, ale gdy mam adres http://cos.adres.pl i http://www.cos.adres.pl to już jest problem, próbowałem dołożyć po www, że może wystąpić ciąg liter ale wtedy mi łapie też adres jeżeli teskt będzie adres.pl.
jak przerobić to wyrażenie tak aby z linków:
Kod
http://www.adres.pl
http://adres.pl
http://www.adres.pl/cos
http://adres.pl/cos
http://www.cos.adres.pl/
http://cos.adres.pl/

i innych kombinacji zawsze dawało samo adres.pl (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Dzięki za pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
rolnix
post
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 16.04.2005
Skąd: Białowieża

Ostrzeżenie: (0%)
-----


Wskazówka: wycinaj wszystko przed drugim (bądź pierwszym) i ostatnim znakiem "/", włącznie z nim samym. Potem pokrój wszystko poza ciągami sąsiadującymi z ostatnią z kolei kropką - w tym przypadku tymi ciągami będą "adres" i "pl". Napisałbym do tego kod, ale wybacz - już praktycznie usypiam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował rolnix 2.11.2007, 23:14:10
Go to the top of the page
+Quote Post
craker
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


wybaczam, ale jak się przebudzisz i byłbyś tak miły to bardzo bym prosił o kod (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
rolnix
post
Post #4





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 16.04.2005
Skąd: Białowieża

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function wyciagaj($str) {
  3. $fslash = strpos($str, '/');
  4. if ($fslash !== false) {
  5. if ($str[$fslash+1] == '/') $fslash++;
  6. $str = substr($str, $fslash+1);
  7. $fslash = strpos($str, '/');
  8. if ($fslash !== false) {
  9. $str = substr($str, 0, $fslash);
  10. }
  11. }
  12. $m = explode('.', $str);
  13. if (count($m) > 1) {
  14. return $m[count($m)-2].'.'.$m[count($m)-1];
  15. } else return $m[0];
  16. }
  17.  
  18.  
  19. echo wyciagaj('http://www.adres.pl');
  20. echo'<br>';
  21. echo wyciagaj('http://adres.pl');
  22. echo'<br>';
  23. echo wyciagaj('http://www.adres.pl/cos/cosssss.txt?cos=cos');
  24. echo'<br>';
  25. echo wyciagaj('http://adres.pl/cos');
  26. echo'<br>';
  27. echo wyciagaj('http://www.cos.adres.pl/');
  28. echo'<br>';
  29. echo wyciagaj('http://cos.adres.pl/');
  30. echo'<br>';
  31. echo wyciagaj('http:/cos.adres.pl/');
  32. ?>


Może i lamersko, ale bez PCRE. Powyższy kod siedem razy wyprodukował napis "adres.pl".
Go to the top of the page
+Quote Post
craker
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


dzięki wielkie naprawdę
Go to the top of the page
+Quote Post
rolnix
post
Post #6





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 16.04.2005
Skąd: Białowieża

Ostrzeżenie: (0%)
-----


Nie ma za co (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Tylko nie chodzi o to, byś tylko skopiował tę funkcję; przeanalizuj sobie ją w spokoju - dobre ćwiczenie na przyszłość (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
craker
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


przepisałem trochu po swojemu, ale dziś mój system się wywalił, nie przewidziałem tego, a mianowicie jeśli mamy domenę
Kod
www.adres.com.pl
albo
Kod
adres.net.pl

to skrypt pokazuje jako domenę główną odpowiednio com.pl i net.pl co w tym wypadku jest nie do zaakceptowania. Możesz mi pomóc jeszcze z tym (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Dzięki
Go to the top of the page
+Quote Post
drPayton
post
Post #8





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Czy ten "adres" to jest zawsze jakaś konkretna wartość? Szukasz czegoś? Czy ogólnie chcesz po prostu domeny wyciągnąć? Jeśli to drugie to moim zdaniem nie da się. Co najwyżej pełną nazwę, czyli adres.pl ale i cos.adres.pl. I wtedy prosto za pomocą:
  1. <?php
  2. $domena = parse_url($adres, PHP_URL_HOST);
  3. ?>

Bo cos.adres.pl może być równie dobrze pełną nazwą jakiejś domeny, jak zmienną częścią domeny adres.pl (realizowane np przez virtual host) i skąd php ma to wiedzieć? No, chyba że dla każdej podanej wartości sprawdzał by to na serwerach dns...
Go to the top of the page
+Quote Post
craker
post
Post #9





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


musi być adres samej domeny, czyliadres.pl, adres.com.pl itp, bo najego podstawie mam napisany mechanizm sprawdzania poprawności klucza licencyjnego, który jest przypisany strikte do domeny właśnie
Go to the top of the page
+Quote Post
dadexix
post
Post #10





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


a jak byś ściągnął listę TLD i wyciągał wszystko przed tld..(pierwsze słowo przed TLD).. np skrypt z wyrażenia ala.makota.gm wyciąga tylko makota i gm(bo makota to pierwszy wyraz przed TLD) potem łączysz w całość...



Napewno gdzieś w necie będzie lista TLD...

o. np. to
http://techdictionary.com/domainlist.html
lub to:)
http://www.domainnews.pl/tld-list/
albo to
http://www.google.pl/search?q=%22lista+tld

Ten post edytował dadexix 20.11.2007, 09:01:58
Go to the top of the page
+Quote Post
drPayton
post
Post #11





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Musiałby rozbijać ciąg według kropki, a to się nie uda, bo jak napisałem nie wiem, czy cos.adres.pl to jest pełna nazwa domeny czy może 'cos' to określenie subdomeny.

Ten post edytował drPayton 20.11.2007, 11:17:09
Go to the top of the page
+Quote Post
Daimos
post
Post #12





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(drPayton @ 20.11.2007, 11:15:24 ) *
Musiałby rozbijać ciąg według kropki, a to się nie uda, bo jak napisałem nie wiem, czy cos.adres.pl to jest pełna nazwa domeny czy może 'cos' to określenie subdomeny.

no w takim wypadku, cos bedzie zawsze nazwa subdomeny, wiec nie rozumiem w czym problem ;>
Go to the top of the page
+Quote Post
drPayton
post
Post #13





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Nie wnikam w szczegóły techniczne, bo specem nie jestem, ale podam prosty przykład:
del.icio.us
Zgodnie z Tym co mówicie, @craker otrzyma jedynie icio.us, a chyba nie o to chodzi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował drPayton 20.11.2007, 14:26:24
Go to the top of the page
+Quote Post
craker
post
Post #14





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


dokładnie. problem jest w tym że jak mam adres moja-strona.net.pl, to zwróci mi samo net.pl, a w tym przypadku nie jest to adres strony. co do tld to nie bardzo to jest możliwe, bo skrypt klienta sprawdza domene z kluczem jaki dostanie ode mnie i na tej podstawie sprawdzane jest czy skrypt zostal zakupiony czy nie, calosc zakodowana jest zendem wiec nikt nic nie widzi, ale dodajac za duzo nie potrzebnie zwiekszam objetosc plikow a tutaj chodzi o cos prostego,ato jest najlepsze zabezpieczenie wg. mnie
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #15





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Taka nieśmiała prozpozycja, bo nie mam na chwilę obecną możliwości sprawdzenia czy to w ogóle ma sens, ale może jakimś wyjściem byłoby sprawdzać URL od końca pod kątem tego czy istnieje odpowiedź serwera z podanego adresu. Pierwszy argument (w URL ostatni) z góry pominąć jako TLD.

Dla przykładu sprawdznie adresu: "subdomena.domena.net.pl" wyglądałoby: Czy jest odpowiedź z "net.pl"? Jeśli nie ma to sprawdź czy jest odpowiedź z "domena.net.pl" itd. Przerwij gdy jest odpowiedź i zwróć sprawdzany adres (w tym przypadku "domena.net.pl"). Domyślam się jednak, że takie sprawdzanie (np. gethostbyname) będzie generowało pewne opóźnienie w oczekiwaniu na odpowiedź. Zawsze można to odpalać tylko raz na sesję, ale to chyba takie "zamiatanie pod dywan".

Pozdrawiam!
-- Nattfarinn
Go to the top of the page
+Quote Post
lubomir1973
post
Post #16





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.12.2007

Ostrzeżenie: (0%)
-----


Zainteresował mnie temat i napisałem takiego sprawdzacza:

Kod
function sprawdz($url) {
   $a = curl_init($url);
   curl_setopt($a, CURLOPT_NOBODY, true);
   curl_exec($a);
   $kodbledu = curl_getinfo($a, CURLINFO_HTTP_CODE);
   curl_close($a);
   return $kodbledu;
}


Widze, że działa ale pytanie czy to dobre rozwiązanie aby sprawdzić że adres istnieje?

Ten post edytował lubomir1973 16.12.2007, 11:00:38
Go to the top of the page
+Quote Post
Snowak
post
Post #17





Grupa: Zarejestrowani
Postów: 78
Pomógł: 2
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Zamiast prega możesz po prostu rozbić adres funkcją parse_url (http://pl.php.net/manual/pl/function.parse-url.php), i użyć czegoś takiego:
  1. <?php
  2. $host = parse_url('http://cos.adres.pl', PHP_URL_HOST);
  3. $rec = explode('.', $host);
  4. $domena = $rec[count($rec) - 1];
  5. $adres = $rec[count($rec) - 2];
  6. echo($adres . '.' . $domena);
  7. //Zwróci adres.pl
  8. ?>
Powód edycji: Proponuję najpierw przejrzeć poprzednie posty, bo to traktuję jako spam. @drPayton
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 19:59