使用PHP& amp ;;在XAMPP中几乎浏览Windows文件系统htaccess的

时间:2013-05-14 18:50:06

标签: php .htaccess

我正在开发一个应用程序,以便在Web浏览器中浏览Windows文件系统。这最初被设想为允许我的妻子查看存储在连接到运行XAMPP的网络计算机的外部硬盘驱动器上的照片的解决方案,从而减少安装任何软件的需要。我继续使用各种技术来观看电影,浏览音乐等来提供内容。哇噢!

使用httpd.conf(Apache Config)中的以下内容访问文件系统没有问题:

<Directory "H:/">
Require all granted
Allow from all
RewriteEngine On
RewriteOptions Inherit
</Directory>
Alias /ExternalDrive "H:/"

最初,我使用URL中的查询字符串创建了一个文件夹参数:

index.php?q1=Pictures

然后创建$ path变量:

if (isset($_GET['q1'])) {
$q1=($_GET['q1']);
$path=$q1."/";
}

然后将$ path变量输入scan_dir:

$scan_dir="H:/$path";
$files_or_folders = scandir($scan_dir); 

然后遍历结果,将$ file_or_folder变量与一些额外的逻辑(未包含)更改为文件链接或文件夹链接:

foreach($files_or_folders as $key => $file_or_folder){
// if files
// display pictures or other content
<a href="<?= $file; ?>"><?= $file ?></a>
// if folders
// display a link to the folder
<a href="index.php<?= $query."=".$folder; ?>"><?= $folder ?></a>
}

它工作得很好,但是当文件或文件夹有几个层次时,查询字符串变得非常难看,例如:

index.php?q1=level_A&q2=level_B&q3=level_C

并且解析文件路径所需的代码更糟糕:

if (isset($_GET['q1']) && isset($_GET['q2']) && !isset($_GET['q3'])){
$q1=($_GET['q1']);
$q2=($_GET['q2']);
    $q3=($_GET['q3']);
$path=$q1."/".$q2."/".$q3;
$query="?q1=$q1&q2=$q2&q3";
}

我认为使用.htaccess重定向请求不是以这种方式获取文件路径,而是更优雅。因此,我修改了代码,以便将“/ level_A / level_B / level_C”重定向到index.php,并以这种方式创建要提供给scan_dir()的路径信息:

#get uri (everything after www root)
$request = $_SERVER['REQUEST_URI'];

#explode the path by '/'   
$folders  = explode("/", $request); 

ob_start();
#loop through the results
foreach ($folders as $folder) {
echo $folder;
echo "/";
}
#save ob results in variable
$path = ob_get_clean();

所以,文件夹链接现在看起来像这样:

<a href="<?= $path.$folder ?>">$folder/a>

这很有效,但只有两个层次。在第三级,重复第一个文件夹。换句话说,诸如“level_A / level_B / level_C /”的链接被发送到浏览器作为“level_A / level_A / level_B / level_C /”。我错过了一些东西,可能很简单,但我找不到它。

提前感谢任何愿意解决我复杂问题的人。

0 个答案:

没有答案