0

我有以下 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);
?>

这是我的网页

当我点击 subdirectory1 或 subdirectory2 时,我会得到它的内容(一些图像)。然后当我点击其中一张图片时,我会得到我网站根目录的内容。

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

4

2 回答 2

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);
}
于 2012-10-11T22:48:31.503 回答
0

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

因为$value包含您可以end(explode('.',$value));用来查找分机的文件的名称。文件(php、jpg、gif、png)。对这条信息使用另一个条件,您可以识别它是否是图片。

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

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

我希望你明白了。

于 2012-10-11T20:32:36.727 回答