Skocz do zawartości

[PHP] file_get_contents () dynamiczne adresy url


PYJTER

Rekomendowane odpowiedzi

Witam serdecznie od razu na wstępie napisze iż w php jestem zupełnym laikiem i mam problem z takim kodem:


<?php
$a = file( './plik.txt' );

foreach ($a as $t)
{
$s = file_get_contents( $t );
preg_match_all( '#<td>(.*?)</td>#is', $s, $b, PREG_PATTERN_ORDER );

$string = implode(";", $b[1]);
}


file_put_contents('asd.txt',$string);
?>

Skrypt ma za zadanie pobieranie z pliku plik.txt adresów URL (zapisane są w formacie 1 adres url 1 wiersz) następnie wczytuje adres url i szuka wyrażenia regularnego jak znajdzie zapisuje do pliku.

Jednak po wykonaniu takiego skryptu zapisuje mi jedynie dane z ostatniego adresu URL mam ich w pliku załużmy 120 to tylko z tego 120 pobierze dane i zapisze do pliku. Dla reszty otrzymuje błąd:

Warning: file_get_contents(https://www.jakisadres.pl/produkt/eadad/3324.html) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/jail/.../public_html/tabela3.php on line 6

Warning: file_get_contents(https://www.jakisadres.pl/produkt/esad/344.html ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/jail/.../public_html/tabela3.php on line 6

Czy ktoś mi może powiedzieć gdzi mam szukać błędu??

Pozycjonuję dla zabawy tylko swoją stronę o ile to można nazwać pozycjonowaniem raczej jest to błądzenie ślepego we mgle ;)

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
$a = file( './plik.txt' );
$ile=count($a);
for($i=0;$i<$ile;$i++){
$s = file_get_contents( $a[$i] );
preg_match_all( '#<td>(.*?)</td>#is', $s, $b, PREG_PATTERN_ORDER );
$string = "".implode(";", $b[1])."\n";
file_put_contents('asd.txt',$string, FILE_APPEND | LOCK_EX);
}
?>

Odnośnik do komentarza
Udostępnij na innych stronach

No przecież masz jasny komunikat:

request failed! HTTP/1.1 404 Not Found

wiec w czym problem ?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

No przecież masz jasny komunikat:

request failed! HTTP/1.1 404 Not Found

wiec w czym problem ?

Ja wiem że nie znaleziono wystarczy że zamienie adresy url kolejnością i dalej czyta tylko ostatni nawet jakbym miał ich 100 w pliku zapisanych. Te adresy są prawidłowe i istnieją.

Poniżej stworzyłem przykładowe pliki na szybko tak żeby widzieć że są utworzone i działają a jednak znowu czyta tylko ostatni url z pliku.

<?php
$a = file( './plik.txt' );
$ile=count($a);
for($i=0;$i<$ile;$i++){
$s = file_get_contents( $a[$i] );
preg_match_all( '#<td>(.*?)</td>#is', $s, $b, PREG_PATTERN_ORDER );
$string = "".implode(";", $b[1])."\n";
file_put_contents('asd.txt',$string, FILE_APPEND | LOCK_EX);
}
?>

Dalej mam to samo czyta tylko ostatni url....

Stworzyłem sobie 3 pliki teraz i zapisałem adresy www do pliku plik.txt

Można zerknąć jaką mają strukturę:

https://pyjter.host.sk/przyklad.html

https://pyjter.host.sk/przyklad2.html

https://pyjter.host.sk/przyklad3.html

I teraz chce wyciągnąć z nich wyrażenie zawierające się między znacznikami <td> ale niestety pobiera i zapisuje mi do pliku tylko ostatni url... zamienię je kolejnością to dalej tylko z url;a któy jest ostatni pobiera wyrażenie.

Kombinuje i nie kumam tego ;/

Warning: file_get_contents(https://pyjter.host.sk/przyklad.html ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/jail/.../public_html/tabela4.php on line 5
Warning: file_get_contents(https://pyjter.host.sk/przyklad2.html ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/jail/.../public_html/tabela4.php on line 5

Pozycjonuję dla zabawy tylko swoją stronę o ile to można nazwać pozycjonowaniem raczej jest to błądzenie ślepego we mgle ;)

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
$a = file( './plik.txt' );
$ile=count($a);
for($i=0;$i<$ile;$i++)
{$s = file_get_contents(trim($a[$i]));
preg_match_all( '#<td>(.*?)</td>#is', $s, $b, PREG_PATTERN_ORDER );
$string = "".implode(";", $b[1])."<hr>\n";
file_put_contents('asd.txt',$string, FILE_APPEND | LOCK_EX);}
?>

sprawdziłem u siebie na lokalu i pobiera ze wszystkich trzech adresów.

Odnośnik do komentarza
Udostępnij na innych stronach

Przecież znowu masz to samo failed to open stream: HTTP request failed! HTTP/1.1 404 N wiec nadal błędne adresy.

$arrDane = file('plikadresow.txt');
foreach($arrDane AS $adres)
{
$dane = @file_get_contents($adres);
/// tutaj operacje na zawartości zmiennej $dane
}

A tu masz dodatkowo obsługę nagłówków z żądania HTTP https://php.net/manual/en/reserved.variables.httpresponseheader.php

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności