我有以下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时,我会得到它的内容(一些图像)。然后当我点击其中一个图像时,我会得到我网站根目录的内容。
如何在访问者点击图片时仅显示图片?请注意,我不想下载它或任何内容 - 我只想在访问者点击它时在浏览器中显示它。
答案 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>
我希望你明白了。