如何创建一个搜索工具,通过在 php/html 中输入部分文件名将文件夹中的文件显示为可下载链接?



我目前正在学习PHP,HTML,MySQL(作为一种爱好(,最近我试图在网页中创建搜索工具时遇到了困难,您可以在其中输入文件名的一部分,它将匹配的结果显示为可下载的链接

由于我只学习/学习HTML和PHP来创建网页,我尝试了一些我知道的东西,但没有一个按照我想要的方式工作。然后我开始谷歌搜索并找到了一些代码。

这是我尝试过的一个:

<?php
$dir = "uploads/../";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file == $_POST['file_name']){
echo('<a href="'.$dir . $file.'">'. $file .'</a>'."n");
}
}
closedir($dh);
}
}
?>

它可以工作,但您必须输入确切的文件名(扩展名和全部(才能获得任何结果。这对于我想要的东西是不切实际的,因为我只记得文件名的一部分

如果要组合glob以在目录中查找文件,preg_grep使用如下所示的正则表达式来匹配数组中的项目

if( isset( $_POST['file_name'] ) ){
$dir='uploads/../';
$pttn=sprintf( '@(%s)@', preg_quote( $_POST['file_name'] ) );
$files=preg_grep( $pttn ,glob( $dir . '*.*' ) );

if( count( $files ) > 0 ){
foreach( $files as $file ){
printf('<a href="%2$s%1$s">%1$s</a>', $file, $dir );
}
}
}

为了避免 url 中的完整路径,请尝试沿着这些行。您可以使用pathinfo获取文件 + 扩展名,并将其与$dir变量结合使用

$basename=pathinfo( $file, PATHINFO_BASENAME );
printf('<a href="%2$s%1$s">%2$s%1$s</a>', $basename, $dir );

您应该找到(未测试(您可以提供部分名称,它将匹配与正则表达式匹配的所有文件

最新更新