0

Web サイトのディレクトリのコンテンツを表示する次の 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);
?>

これは私のウェブページです

サブディレクトリ 1 またはサブディレクトリ 2 をクリックすると、その内容 (いくつかの画像) が表示されます。次に、画像の 1 つをクリックすると、Web サイトのルート ディレクトリのコンテンツが表示されます。

訪問者が画像をクリックしたときに画像のみを表示するにはどうすればよいですか? ダウンロードしたくないことに注意してください。訪問者がクリックしたときにブラウザーに表示したいだけです。

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 に答える