2009-07-29 14 views
5

Pobieranie niektórych informacji za pośrednictwem PHP ze strony internetowej przy użyciu simple_php_dom i curl. Problem polega na tym, że strona nie jest poprawnie zbudowana, więc obiekt DOM zawiera błędne informacje.Jak mogę uzyskać stronę HTML jako ciąg znaków przez PHP?

Jak mogę uzyskać plik HTML jako ciąg w PHP var, aby można było uruchomić przez niego wyrażenie regularne?

Zwinięcie nie działa, ponieważ ignoruje złą część.
simple_html_dom.php ma ten sam problem.
wget nie działa, ponieważ nie mam uprawnień do niego na serwerze.

Odpowiedz

12

file_get_contents - Czyta całą zawartość pliku do łańcucha

string file_get_contents ( 
    string $filename [, int $flags= 0 [, resource $context [, int $offset= -1 [, int $maxlen= -1 ]]]] 
) 

z podręcznika:

Funkcja ta jest podobna do pliku(), z tym że file_get_contents() zwraca plik w ciąg, począwszy od określonego przesunięcia do maksymalnie bajtów. W przypadku niepowodzenia, file_get_contents() zwróci FALSE.

file_get_contents() jest preferowanym sposobem odczytywania zawartości pliku w łańcuchu. Będzie korzystać z technik mapowania pamięci, jeśli jest obsługiwany przez system operacyjny w celu zwiększenia wydajności.

Działa zarówno na stronach internetowych, jak i plikach. Możesz pobrać HTML, po prostu używając "http://whatever.com/page.html" jako $ filename.

+0

To właśnie sugeruję. – Christian

+2

Działa tylko wtedy, gdy włączone jest allow_url_fopen. Naprawdę nie ma powodu, żeby to działało również z curl. –

+1

Ignoruje również część pliku: S Jedynym, który do tej pory naprawdę poprawnie odczytuje plik, jest wget, którego nie mogę użyć: S – fmsf

0

użyłem cURL pobierz plik do ciągu (simple_html_dom :: load_file po prostu opakowuje file_get_contents), a następnie za pomocą metody load_html_dom load (from string) do parsowania. Działa to w przypadku niektórych adresów URL, ale w tym przypadku nie działa, gdy adres URL zawiera ciąg parametrów. Adres URL jest pobierany tak, jakby nie zawierał ciągu parametrów. Ustawiłem agenta z curl, aby podszywać się pod przeglądarkę, ale nie ma kości.

Niestety, to nie jest prawdziwa odpowiedź, ale może użycie curl zadziała dla niektórych osób, dla których ustawienie fopen stanowi problem.

Powiązane problemy