Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] funkcja get_headers - dziwny problem
Forum PHP.pl > Forum > Przedszkole
Oswaldo Sánchez
Witam,
Mam problem z funkcja get_headers(), otoz gdy podam get_headers('jakis_link'); to wszystko jest gitara a gdy link mam w tablicy i podam get_headers($zmienna[0][0]); to wyskakuje mi blad ze tam musi byc URL i co teraz zrobic moi drodzy?

Saludo y gracias, Oswaldo.
MateuszS
zrób echo $zmienna[0][0] i sprawdz co wypluje.
Oswaldo Sánchez
'wyskakuje normalny URL, http://...html i jak go skopiuje i podam tam w get_headers('tutaj_ten_link') to wszystko git.
MateuszS
a nie mozesz zrobic tak?

$zmienna = $tablica[0][0];
get_headers($zmienna);
Oswaldo Sánchez
dalej blad wyskakuje, a czy moze jakos przeleciec ten tekst jakas funkcja trzba?
MateuszS
pokaz kod i dokladna tresc bledu
Oswaldo Sánchez
preg_match_all("#http(.*)[^\s]#i", $zmienna, $link);

$test = get_headers($link[0][0]);
print_r($test);

gdzie $zmienna to jakis tekst gdzie sa URL'e, a blad:
[phpBB Debug] PHP Notice: in file (...): get_headers() [function.get-headers]: This function may only be used against URLs.

ktory wskazuje na linie:
$test = get_headers($link[0][0]);




problem naprawde bardzo dziwny... moze da sie jakos wyciagnac "HTTP/1.1 200 OK" cos takiego w inny sposob?
MateuszS
u mnie to normalnie dziala ;P moze ten preg_match_all cos psuje ;P
Oswaldo Sánchez
byc moze...
moze jakos podzialac na ten url jeszcze jakas funkcja i dopiero wtedy wrzucic w get_headers() questionmark.gif
MateuszS
no ale skoro wyświetliłeś ten link i jest w dobrym formacie czyli np. http://google.pl to powinno byc OK, sprobuj dla testu wlepic gdzies

  1. <?
  2. $zmienna[1][2] = "http://google.pl";
  3. $test = get_headers($zmienna[1][2]);
  4.  
  5. print_r($test);
  6. ?>


i powiedz co ci wywala, nie bawilem sie nigdy specjalnie ta funkcja wiec moze cos mi umyka
Oswaldo Sánchez
tak jak podajesz to dziala, czyli preg_match_all cos psuje;/
MateuszS
nie mozesz go... wywalic? Co on ma robic, bo nie znam sie na tych wyrazeniach regularnych i preg_matchach ;P
Oswaldo Sánchez
mam jakis tekst i chce zeby preg_match_all wyciagnal mi url'e z tego tekstu i wrzucic w te funkcje... dziwne bo niby wszystko dobrze a nie dobrze;/
MateuszS
print_r($link) jeszcze powiedz co wywala, (wklej)
Oswaldo Sánchez
ok juz chyba wiem;d poprostu jak ktos koduje link to zostaje na koncu [/code]tongue.gif teraz jak madrze sie tego pozbyc? explode?biggrin.gif


ale mimo wszystko dalej blad wyskakuje jednak;/
MateuszS
  1. $link[0][0] = str_replace("[/code]","", $link[0][0]);
Oswaldo Sánchez
dalem teraz printa i:


Array
(
[0] => Array
(
[0] => http://x7.to/b0dsgsc/nazwa.htm
)
)


zmienilem ten url zeby nie bylo ze lamie regulamin czy cos, ale gwarantuje ze dziala


moze ktos jakos pomoc??:/

Prosze o pomoc naprawde, jak to zrobic? dlaczego url nie jest urlem? sad.gif
Moze bys my sie cos napili
przyznam, ze tez mam podobny problem i nie wiem jak go rozgryzc.
Oswaldo Sánchez
a probowales juz jakichs metod? ja nie wiem juz co zrobic zeby bylo dobrze;/ to jest paranoja url nie jest url;/
pyro
A może tak: Jaki błąd wywala?
MateuszS
pokaz plik z linkami. (zamiesc na jakims serwerze)
mortus
Witam,
pokaż co kryje $zmienna i co kryje $link, zaraz po wywołaniu preg_match_all
  1. preg_match_all("#http(.*)[^\s]#i", $zmienna, $link);
  2. print_r($zmienna);
  3. print_r($link);
To może wtedy do czegoś dojdziemy.
Oswaldo Sánchez
a wiec tak - na forum mam post o tresci takiej:

CODE
[code.]http://onet.pl[/code.]



odczytuje go z bazy i tutaj pomijam, bo po co opisywac...


nastepnie dzialam na ten tekst (niech bedzie zmienna $text) funkcją preg_match_all, czyli:

CODE
preg_match_all("#http(.*)[^\s]#i", $text, $linki);



Z print_r($text) mam oczywiscie:

CODE
[code:2q1n14j1]http://onet.pl[/code:2q1n14j1]



natomiast z $linki mam:

CODE
Array
(
[0] => Array
(
[0] => http://onet.pl[/code:2q1n14j1]
)

[1] => Array
(
[0] => ://onet.pl[/code:2q1n14j1
)

)


nastepni[/html]e tworze zmienna, na przyklad:

CODE
$test = linki[0][$x]; // w tym wypadku $x = 0
$test = substr($test, 0, -16);



i dzialam potem funkcja:

CODE
get_headers($test);



i otrzymuje blad:

CODE
[function.get-headers]: This function may only be used against URLs.




PS. Ja mysle ze to moze byc zwiazane z kodowaniem. Tzn ze moze ja widze normalny link ale np w funkcji get_headers() jest zamiast dwukropkow itd, gdyz w phpmyadmin tresc posta wyglada tak:

CODE
[code:2q1n14j1]http://onet.pl[/code:2q1n14j1]
mortus
Na początku zmień
  1. preg_match_all("#http(.*)[^\s]#i", $text, $linki);
na
  1. preg_match_all("/(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $text, $linki);
i daj znać, czy coś się zmieniło.
EDIT:
Wtedy do get_headers przekazujesz po prostu $linki[0][0]!
Oswaldo Sánchez
dalem print_r($linki):

  1. Array ( [0] => Array ( ) )
mortus
A to dziwne, bo ja dla takiego kodu:
  1. <?php
  2. $text = '[code:2q1n14j1]http://onet.pl[/code:2q1n14j1]';
  3. preg_match_all("/(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $text, $linki);
  4. echo '<pre>'; print_r($linki); echo '</pre>';
  5. ?>
dostaję

Zatem problemem jest twoja zmienna $text. Proponuję pobrać dane z bazy danych i zapisać do zmiennej np. $text i pokazać zmienną print_r($text);
Oswaldo Sánchez
dalem print_r($text) i otrzymuje:

  1. [code:2q1n14j1]http://onet.pl[/code:2q1n14j1]
mortus
To może po prostu wrzuć cały kod z pliku i wtedy znajdziemy błąd, bo skoro u mnie to działa, to dlaczego u Ciebie nie chce?
Oswaldo Sánchez
cały kod, czyli to?:

  1. $sql = "SELECT post_id, topic_id, forum_id, post_subject, post_text, bbcode_uid FROM phpbb_posts WHERE topic_id='551'";
  2.  
  3. $result = $db->sql_query($sql);
  4.  
  5.  
  6. while($row = $db->sql_fetchrow($result)) {
  7.  
  8.  
  9. $text = $row[post_text];
  10.  
  11.  
  12.  
  13. preg_match_all("/(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $text, $linki);
  14.  
  15. echo '<pre>'; print_r($linki); echo '</pre>';
  16.  
  17. }



tak btw to jak dam taki kod jak Ty:
  1. <?php
  2. $text = '[code:2q1n14j1]http://onet.pl[/code:2q1n14j1]';
  3. preg_match_all("/(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $text, $linki);
  4. echo '<pre>'; print_r($linki); echo '</pre>';
  5. ?>


to dziala, tyle ze jak pobiore ten tekst z bazy to robi sie problem. i jeszcze jedno: jak wchodze przez phpmyadmin to tresc posta wyglada tak, ze zamiast dwukropka jest: & # 5 8 ; oczywiscie bez spacji...
i moze tutaj jest problem?;/
mortus
Jeżeli tak, to poniższe powinno zadziałać:
  1. preg_match_all("/(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", html_entity_decode($text), $linki);
Oswaldo Sánchez
no jak nie jak tak:D dzieki wielkie chlopaki. teraz wszystko gra i huczy
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.