我目前正在学习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 );
您应该找到(未测试(您可以提供部分名称,它将匹配与正则表达式匹配的所有文件