显示文件夹的内容

时间:2012-10-11 19:59:13

标签: php ftp

我有以下PHP代码来显示我网站中目录的内容:

<?php
$conn = ftp_connect("host") or die("Could not connect");
ftp_login($conn,"username","password");

if ($_GET['dir'] != null) {
    ftp_chdir($conn, "logs/{$_GET['dir']}");
}
else
{
    ftp_chdir($conn, "logs");
}

$files = ftp_nlist($conn,"");

foreach($files as $value) {
    echo "<a href=\"test.php?dir={$value}\">{$value}</a>";
}

ftp_close($conn);
?>

This is my webpage

当我点击子目录1或子目录2时,我会得到它的内容(一些图像)。然后当我点击其中一个图像时,我会得到我网站根目录的内容。

如何在访问者点击图片时仅显示图片?请注意,我不想下载它或任何内容 - 我只想在访问者点击它时在浏览器中显示它。

2 个答案:

答案 0 :(得分:1)

您需要确定哪些返回的项目是文件,哪些是目录。为此,您最好使用ftp_rawlist,因为它允许提取更多数据。然后为每个案例创建链接,以便您可以适当地处理它们。这是一个可能的实现:

$ftpHost = 'hostname';
$ftpUser = 'username';
$ftpPass = 'password';
$startDir = 'logs';

if (isset($_GET['file'])) {
    // Get file contents (can also be fetched with cURL)
    $contents = file_get_contents("ftp://$ftpUser:$ftpPass@$ftpHost/$startDir/" . urldecode($_GET['file']));

    // Get mime type (requires PHP 5.3+)
    $finfo = new finfo(FILEINFO_MIME);
    $mimeType = $finfo->buffer($contents);

    // Set content type header and output file
    header("Content-type: $mimeType");
    echo $contents;
}
else {
    $dir = (isset($_GET['dir'])) ? $_GET['dir'] : '';

    $conn = ftp_connect($ftpHost) or die("Could not connect");
    ftp_login($conn, $ftpUser, $ftpPass);

    // change dir to avoid ftp_rawlist bug for directory names with spaces in them
    ftp_chdir($conn, "$startDir/$dir");

    // fetch the raw list
    $list = ftp_rawlist($conn, '');

    foreach ($list as $item) {
        if(!empty($item)) {
            // Split raw result into pieces
            $pieces = preg_split("/[\s]+/", $item, 9);

            // Get item name
            $name = $pieces[8];

            // Skip parent and current dots
            if ($name == '.' || $name == '..')
                continue;

            // Is directory
            if ($pieces[0]{0} == 'd') {
                echo "<a href='?dir={$dir}/{$name}'><strong>{$name}</strong></a><br />";
            }
            // Is file
            else {
                echo "<a href='?file={$dir}/{$name}'>{$name}</a><br />";
            }
        }
    }

    ftp_close($conn);
}

答案 1 :(得分:0)

您需要添加一个函数来检查我们正在处理的文件类型。 如果它是一个目录,则显示常规链接(您现在正在使用的链接)以及它是否是图像 显示与图像路径的链接。

由于$value包含文件的名称,您可以使用end(explode('.',$value));来查找分机号。的文件(php,jpg,gif,png)。 使用其他条件和信息,您可以确定它是否是图片。

为了构建图像的path,您需要使用$_GET['dir']变量的值。 例如:

<a href='<?=$_GET['dir']?>/Flower.gif'>Flower.gif</a>

我希望你明白了。