I have a text file in the same folder as the script 开发者_StackOverflow中文版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.
You can improve this code in many ways:
- Use
file
instead offile_get_contents
to have the lines put into an array automatically - Use
strpos
instead ofsubstr
-- more efficient - Use
strrpos
to get the file extension -- faster and foolproof, as know exactly how it behaves - You should be using
rawurlencode
instead ofrawurldecode
because you are creating urls, not reading them - The
if
conditionals for the extensions should be replaced by an array lookup
Making 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)));
}
$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
精彩评论