2011-07-21 11 views
6

E 'possibile analizzare l'elenco di directory di una pagina web esterna perché la pagina web è accessibile e mostra un elenco di file quando accedo. Voglio solo sapere se è possibile analizzare i file in modo dinamico in PHP e in che modo? -Thank youÈ possibile analizzare l'elenco di directory di una pagina Web esterna?

Ci scusiamo per non essere chiari. Intendo un elenco di directory come: http://www.ibiblio.org/pub/ (Indice di/..) e possibilità di leggere il contenuto come matrice o qualcosa di facile da manipolare nel mio script

risposta

4

È possibile utilizzare preg_match o DomDocument

Per il vostro caso:

$contents = file_get_contents("http://www.ibiblio.org/pub/"); 
preg_match_All("|href=[\"'](.*?)[\"']|", $contents, $hrefs); 
var_dump($hrefs); 

Se si vuole dare un'occhiata a un working demo.

0

Sì, è molto possibile. Non sono abbastanza chiaro cosa intendi per elenco di directory, ma dovresti cercare i crawler dei siti web. Questo è essenzialmente ciò che stai chiedendo ma scritto in PHP.

+0

Penso che voglia analizzare l'elenco di directory di Apache (Opzioni + indici) – genesis

+0

Voglio dire elenco di directory .. una directory contenente file (ad esempio cartella di immagini) su dominio esterno e ho bisogno di leggere le immagini sul mio script, ecc. –

0

PHP file_get_content farà il trucco per voi.

(Assumendo che la richiesta HTTP per questa pagina restituisce l'elenco dei file, come lei ha detto)

+1

Sì, sono sicuro che la pagina restituisce l'elenco dei file con l'indice di/etc ecc. Ha fatto il trucco grazie, ora un modo qualsiasi per convertire questo in array o qualcosa di leggere ogni file nella lista individualmente? –

+0

Conversione ad array ---------- Puoi dividere con un separatore, nel nostro caso il separatore sarà "\ n" credo –

2

Se stai ricevendo un elenco di directory di nuovo che è pieno di link in un documento XHTML corretto è possibile utilizzare DOMDocument , e il codice come il seguente per tornare un elenco di file:

$doc = new DOMDocument(); 
$doc->preserveWhitespace = false; 
$doc->load('directorylisting.html'); 

$files = $doc->getElementsByTagName('a'); 

$files è ora un elenco di DOMElement s che si possono scorrere e ottenere l'attributo href per ottenere un percorso completo per i file nella lista.

Si noti che questo approccio richiede un elenco di directory formato correttamente restituito dal server. Non è possibile, ad esempio, effettuare una richiesta su stackoverflow.com e ottenere un elenco di directory dei file.

Se questo non funziona (HTML malformato forse) si potrebbe usare espressioni regolari (ad esempio preg_match_all.) Per trovare <a tag, come tali:

preg_match_all('@<a href\="([a-zA-Z\.\-\_\/ ]*)">(.*)</a>@', file_get_contents('http://www.ibiblio.org/pub/'), $files); 
var_dump($files); 

$files elementi sarebbero ancora essere abbinati, solo un insieme di array.


UPDATE, ho provato con il vostro URL (http://www.ibiblio.org/pub/) e funziona bene (il metodo preg_match_all).

Problemi correlati