Reputation: 873
I have a text file in the same folder as the script I'm trying to run. It has several URL links each on a new line like so:
hxxp://www.example.com/example1/a.doc
hxxp://www.example.com/example2/b.xls
hxxp://www.example.com/example3/c.ppt
I'm trying to link these files but it only lists the last file in the list.
Here is my code:
<?php
$getLinks = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/links.txt');
$files = explode("\n", $getLinks);
foreach ($files as $file) {
if (substr($file, 0, 23) == 'hxxp://www.example.com/') {
$ext = pathinfo(strtolower($file));
$linkFile = basename(rawurldecode($file));
if ($ext['extension'] == 'doc') {
echo '<a href="' . $file . '"><img src="images/word.png" /> ' . $linkFile . '</a><br />';
} elseif ($ext['extension'] == 'xls') {
echo '<a href="' . $file . '"><img src="images/excel.png" /> ' . $linkFile . '</a><br />';
} elseif ($ext['extension'] == 'ppt') {
echo '<a href="' . $file . '"><img src="images/powerpoint.png" /> ' . $linkFile . '</a><br />';
}
}
}
?>
*note: I've tried using the file function as well with the same results.
Upvotes: 2
Views: 1957
Reputation: 437336
You can improve this code in many ways:
file
instead of file_get_contents
to have the lines put into an array automaticallystrpos
instead of substr
-- more efficientstrrpos
to get the file extension -- faster and foolproof, as know exactly how it behavesrawurlencode
instead of rawurldecode
because you are creating urls, not reading themif
conditionals for the extensions should be replaced by an array lookupMaking all these changes, we have:
$lines = file($_SERVER['DOCUMENT_ROOT'] . '/links.txt');
$extensions = array(
'doc' => 'word.png',
'xls' => 'excel.png',
'ppt' => 'powerpoint.png',
);
foreach ($lines as $file) {
if (strpos($file, 'hxxp://www.example.com/') !== 0) {
continue;
}
$ext = strtolower(substr($file, strrpos($file, '.') + 1));
if (empty($extensions[$ext])) {
continue;
}
printf('<a href="%s"><img src="images/%s" /> %s</a><br />',
$file, $extensions[$ext], rawurlencode(basename($file)));
}
Upvotes: 1
Reputation: 1620
$getLinks = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/links.txt');
$files = explode("\r\n", $getLinks);
I'm assuming you're on windows, the same as me.
\n
isn't the whole windows new line character Use \r\n
When I replaced \n with \r\n it worked as expected
Upvotes: 0