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?
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 />
";
}
?>
If it is the same server you are running your PHP on, you can use opendir() and readdir().
You can use regex to take urls from listing. (No you can't use DOMDOCUMENT as it's not a valid HTML)
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
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
\f])<a href="([^"]+)">[^<]*<\/a>(?:[\w
\f])<\/td>/i', $html, $files);
// 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("
", $files);
var_dump($files);