开发者

PHP - Read text file and output contents as links won't work

开发者 https://www.devze.com 2023-02-18 00:27 出处:网络
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:

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" />&nbsp;' . $linkFile . '</a><br />';
            } elseif ($ext['extension'] == 'xls') {
                echo '<a href="' . $file . '"><img src="images/excel.png" />&nbsp;' . $linkFile . '</a><br />';
            } elseif ($ext['extension'] == 'ppt') {
                echo '<a href="' . $file . '"><img src="images/powerpoint.png" />&nbsp;' . $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:

  1. Use file instead of file_get_contents to have the lines put into an array automatically
  2. Use strpos instead of substr -- more efficient
  3. Use strrpos to get the file extension -- faster and foolproof, as know exactly how it behaves
  4. You should be using rawurlencode instead of rawurldecode because you are creating urls, not reading them
  5. 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" />&nbsp;%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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号