Shamoon
Shamoon

Reputation: 43639

How can I read the directory contents on a remote server with PHP?

I have a url, http://www.mysite.com/images and the images directory allows Directory Listings. How can I get the files in that directory with PHP?

Upvotes: 5

Views: 11696

Answers (5)

kirkoov
kirkoov

Reputation: 1

// tho a late-comer, this one seems a bit more reader-friendly if not faster

$url = 'http://whatevasite/images/';
$no_html = strip_tags(file_get_contents($url));
$arr = explode('Parent Directory', $no_html);
$files = trim($arr[1]);
$files = explode("\n ", $files);
var_dump($files);

Upvotes: 0

andym2009
andym2009

Reputation: 51

I know this question is very old, but just to get me into the swing of using this forum I thought I'd add my view. I found the following happened (referring to the original answer to use regex.

My html turned out to be formatted like this:

<td>
<a href="bricks.php">bricks.php</a>
</td>

So I ended up using this:

$count = preg_match_all('/<a href=\"([^\"?\/]+)">[^<]*<\/a>/i', $html, $files);

I wanted to use the following (which tested ok in the online generator testers, but it failed to find a match in the php code):

$count = preg_match_all('/<td>(?:[\w\n\f])<a href="([^"]+)">[^<]*<\/a>(?:[\w\n\f])<\/td>/i', $html, $files);

Upvotes: 2

genesis
genesis

Reputation: 50982

You can use regex to take urls from listing. (No you can't use DOMDOCUMENT as it's not a valid HTML)

Upvotes: 1

drew010
drew010

Reputation: 69977

Here is an example if you need to read the images over HTTP and the server is Apache:

<?php
$url = 'http://www.mysite.com/images';

$html = file_get_contents($url);

$count = preg_match_all('/<td><a href="([^"]+)">[^<]*<\/a><\/td>/i', $html, $files);

for ($i = 0; $i < $count; ++$i) {
    echo "File: " . $files[1][$i] . "<br />\n";
}

?>

If it is the same server you are running your PHP on, you can use opendir() and readdir().

Upvotes: 8

Shackrock
Shackrock

Reputation: 4701

You need FTP access (an FTP account to that URL). If you have this, then you can log into the server with FTP and use:

opendir()

and

readdir()

to accomplish what you are trying to do.


If you do not have access to the server, you will need to scrape the site's HTML, and it gets more complex -> so I can let somebody else tackle that one... but google search "scrape html site" or something similar, there are plenty of pre-written functions that can do similar things.

i.e. http://www.thefutureoftheweb.com/blog/web-scrape-with-php-tutorial

http://www.bradino.com/php/screen-scraping/

Upvotes: 1

Related Questions