我在与我正在尝试运行的脚本相同的文件夹中有一个文本文件。它在新行上有几个URL链接,如下所示:
hxxp://www.example.com/example1/a.doc
hxxp://www.example.com/example2/b.xls
hxxp://www.example.com/example3/c.ppt
我正在尝试链接这些文件,但它只列出列表中的最后一个文件。
这是我的代码:
<?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 />';
}
}
}
?>
*注意:我也尝试过使用文件功能,结果相同。
答案 0 :(得分:1)
您可以通过多种方式改进此代码:
file
代替file_get_contents
将行自动放入数组strpos
代替substr
- 更高效strrpos
获取文件扩展名 - 更快更准确,因为确切知道它的行为方式rawurlencode
代替rawurldecode
,因为您正在创建网址,而不是正在阅读if
条件应由数组查找替换进行所有这些更改后,我们有:
$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)));
}
答案 1 :(得分:0)
$getLinks = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/links.txt');
$files = explode("\r\n", $getLinks);
我假设你在窗户上,和我一样。
\n
不是整个Windows新行字符使用\r\n
当我用\ r \ n替换\ n时,它按预期工作