- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一张列出当前目录的表格。我希望的是,当我单击该目录时,该表将刷新并加载该目录的内容,而不是转到实际目录。我应该使用的正确代码是什么?
<?php
function view_size($size)
{
if($size >= 1073741824)
{
$size = @round($size / 1073741824 * 100) / 100 . " GB";
}
elseif($size >= 1048576)
{
$size = @round($size / 1048576 * 100) / 100 . " MB";
}
elseif($size >= 1024)
{
$size = @round($size / 1024 * 100) / 100 . " KB";
}
else
{
$size = $size . " B";
}
return $size;
}
function dirlist()
{
$myDirectory = opendir(".");
while($entries = readdir($myDirectory))
{
$dirListArray[] = $entries;
}
$fileCount = count($dirListArray);
sort($dirListArray);
print("<p style='color:#CCC;padding:0px;margin:5px;'>$fileCount FILES / FOLDER FOUND</p>");
print("<table style='color:#FFF' width=100% border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<tr><th>FILE/FOLDER NAME</th><th>FILE TYPE</th><th>FILE SIZE</th></tr>");
for($index=0;$index<$fileCount;$index++)
{
print("<tr><td><a href='./$dirListArray[$index]/.'>$dirListArray[$index]</a></td>");
print("<td>");
print(filetype($dirListArray[$index]));
print("</td>");
print("<td>");
print(view_size(filesize($dirListArray[$index])));
print("</td>");
print("</tr>\n");
}
print("</table>");
}
?>
<html>
<head>
<style type="text/css">
#directory-list-container {
margin: 7px;
padding: 0px;
border: 3px solid #000;
outline: 1px solid #666;
}
#directory-list-content {
margin: 0px;
padding: 5px;
border: 2px solid #666;
}
#directory-list-content a {
color: #FFF;
text-decoration: none;
}
#directory-list-container a:link {
color: #FFF;
text-decoration: none;
}
#directory-list-container a:hover {
color: #0F0;
text-decoration: none;
}
#directory-list-container a:active {
color: #090;
text-decoration: none;
}
#directory-list-container a:visited {
color: #DDD;
text-decoration: none;
}
</style>
</head>
<body>
<div id="directory-list-container">
<div id="directory-list-content">
<?php dirlist(); ?>
</div>
</div>
</body>
</html>
它显示为一个表格,但是当我单击目录或文件时,它会转到该目录或打开文件而不是刷新表格以列出我单击的目录。
最佳答案
当您单击一个链接时,它会将您的浏览器导航到那里,除非您在服务器上设置了 URL 重写,否则该 URL 中的任何内容都将被加载。您需要使用 GET(查询)参数将您选择的目录传递给您的 PHP 文件,并在显示 anchor 时使用它。
我对下面的代码进行了一些改动,但我相信它可以满足您的要求。脚本的名称从当前 URL 中读取,从任何查询参数中剥离,并且 dir
查询参数用于将文件夹名称传递给 anchor 中的脚本。通过这些组合,URL 看起来像这样,具体取决于您如何运行它:
/folder/script.php?dir=foldername%2Ffolder2
请注意,该值是 URL 编码的,这通常是您将任意字符串作为查询参数传递时的一个好习惯。在下面的代码中,文件名输出也包含在 htmlspecialchars()
中,它转义浏览器可能识别为标记的任何 HTML 字符并尝试这样解析,导致页面崩溃。
为了增加安全性,我调用了 ini_set
来更改 open_basedir
在运行时设置为当前目录以避免目录遍历攻击,例如 ?dir=../../../../etc/passwd
可用于访问敏感系统信息。虽然不在您的原始要求中,但我认为这也应该在您的情况下处理,我强烈建议保留此安全措施。
此外,还有点文件(.
和 ..
)的一些处理,以确保当前目录未列出,并且您无法从基础目录向上导航目录。
我还使用了 HEREDOC使代码比多次调用 print
更具可读性和效率。唯一带来的不便是您不能在字符串中放置太复杂的表达式,因此您必须将它们移到上面的变量中,但我相信这也有助于提高可读性。
<?php
// Credit to http://jeffreysambells.com/2012/10/25/human-readable-filesize-php
function human_file_size($bytes, $decimals = 2) {
$size = array('B', 'KB', 'MB', 'GB');
$factor = (int)floor((strlen($bytes) - 1) / 3);
return round($bytes / pow(1024, $factor), 2).' '.@$size[$factor];
}
function dirlist() {
// Prevent malicious users from reading files in directories above
ini_set('open_basedir', __DIR__);
$baseDirectory = '.'.DIRECTORY_SEPARATOR;
// Get directory from query parameter
$directoryPath = $baseDirectory.(!empty($_GET['dir']) ? rtrim($_GET['dir'], '\\/').DIRECTORY_SEPARATOR : '');
$myDirectory = opendir($directoryPath);
$isTopLevel = $directoryPath === $baseDirectory;
while ($entry = readdir($myDirectory)){
if ($entry === '.' || ($isTopLevel && $entry === '..')){
continue;
}
$dirListArray[] = $entry;
}
$fileCount = count($dirListArray);
sort($dirListArray);
print <<<HTML
<p class="heading">$fileCount FILES / FOLDER FOUND</p>
<table width="100%" border="1" cellpadding="5" cellspacing="0" class="whitelinks">
<tr>
<th>FILE/FOLDER NAME</th>
<th>FILE TYPE</th>
<th>FILE SIZE</th>
</tr>
HTML;
// Get current URL without query parameters
// Trim everything after and including "?"
$scriptPath = strtok($_SERVER['REQUEST_URI'], '?');
foreach ($dirListArray as $indexValue){
$htmlEncodedIndex = htmlspecialchars($indexValue);
$fileType = filetype($directoryPath.$indexValue);
$fileSize = human_file_size(filesize($directoryPath.$indexValue));
if ($fileType === 'dir'){
if ($indexValue === '..'){
// Link to top level, no rectory separator in string
if (strpos($indexValue, DIRECTORY_SEPARATOR) === false)
$queryParam = '';
// Link to subdirectory
else {
$parts = explode(DIRECTORY_SEPARATOR, $indexValue);
array_pop($parts);
// Assemble query param (make sure to URL encode!)
$queryParam = '?dir='.urlencode(implode(DIRECTORY_SEPARATOR, $parts));
}
}
// Assemble query param (make sure to URL encode!)
else $queryParam = '?dir='.urlencode($indexValue);
$href = $scriptPath.$queryParam;
}
else $href = $directoryPath.$indexValue;
print <<<HTML
<tr>
<td>
<a href='$href'>$htmlEncodedIndex</a>
</td>
<td>$fileType</td>
<td>$fileSize</td>
</tr>
HTML;
}
print '</table>';
}
?>
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.heading {
color: #CCC;
padding: 0;
margin: 5px;
}
#directory-list-container {
margin: 7px;
padding: 0;
border: 3px solid #000;
outline: 1px solid #666;
}
#directory-list-content {
margin: 0;
padding: 5px;
border: 2px solid #666;
}
#directory-list-content a,
#directory-list-container a:link {
color: #00f;
text-decoration: none !important;
}
#directory-list-container a:hover {
color: #0F0;
}
#directory-list-container a:active {
color: #090;
}
#directory-list-container a:visited {
color: #DDD;
}
</style>
</head>
<body>
<div id="directory-list-container">
<div id="directory-list-content">
<?php dirlist(); ?>
</div>
</div>
</body>
</html>
关于php - 如何更改表内容而不是转到目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611420/
我已经在标准 WPF 控件中实现了一个报告,并且还实现了一个 DocumentPaginator获取这些控件并将它们转换为用于打印的文档。 我还实现了一些使用文档分页器将页面呈现为图像并使用 PDFS
在 C# 中,我有以下代码: public static string GetHashCode(string p) { var a = new SHA256Managed();
您好,我正在尝试在编码后将我的 mysqli 数据库输出到一个 js 文件,我用 json_encode 对其进行编码没有任何问题,但是如何将其放入 js 文件中(每次更新时更新) mysqli数据已
我需要将 select 从 JS 传递到 HTML。 select 应该包含来自 PHP 的 option。 所以,首先我有一个 HTML div,我将在其中添加来自 JS 的内容。
我有一个相当大且复杂的 SVG 代码,它根据页面信息使用 JavaScript 和 jQuery 动态生成。 然后我有一个 AJAX 帖子保存。 我无法将其转换为正确发布图像数据? var canva
我想将我的本地日期 ([NSDate date]) 转换为 GMT 以创建一个 JSON 字符串 (/Date(1324435876019-0000)/)。 当我将时钟设置为 EST 时区时,我的代码
1. 原始单据与实体之间的关系 可以是一对1、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章服务器五大相关基础知识【转】由作者收集整理,如果你对这篇文章有兴趣,记得
Google Apps 脚本 - Gmail 是否会实现 GmailMessage (GmailThread) .getAsPdf() 方法?预期输出与 Gmail 中可用的打印为 PDF 的输出相同
有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。 现在监控日志数据量非常大(亿级别)需要对数据按每小时、每天进行聚合,供
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章1张图看懂RAID功能,6张图教会配置服务器【转】由作者收集整理,如果你
我正在使用 FFMPeg(版本 ffmpeg-20170330-ad7aff0-win64-static)将 RTSP 转换为 .m3u8。 命令是: ffmpeg -rtsp_transport t
我有一个 JTree使用 DefaultTreeModel 的对象作为模型,我添加/删除与该模型相关的节点。 此时,我需要在图形界面中显示树结构,例如 JPanel .如何映射 DefaultTree
我当前正在接收一个文件并将其存储到 NSString 中。然后,我从字符串中创建一个数组并将其呈现在 TableView 中。这在一定程度上有效。我目前收到的数据如下: 公司名称|帐户代码\r\n公司
我需要创建 NSImage cocoa 对象的 base64 字符串表示形式。处理这个问题的最佳方法是什么,苹果文档似乎在这个主题上有点短(或者我只是找不到它)。 Base64 编码从外面看起来相当复
JS 中的 .toISOString() 函数给我这样的字符串: 2015-06-14T20:00:00:000Z 我需要它是这样的: 2015-06-14T20:00:00Z JS 中是否有其他函数
我正在尝试使用 JavaScript 转换 COLORREF: COLORREF : When specifying an explicit RGB color, the COLORREF value
我在这里遇到了这个代码的问题,只是想制作一个小计算器: 打包申请; import javafx.event.ActionEvent; import javafx.scene.control.TextF
我想要做的是能够通过本地PC上的USS通过sshfs挂载主机上的一些文件。我可以做到这一点,但 sshfs 不能直接完成从 EBCDIC 到 ascii/unicode 的转换。有没有我可以设置的标志
我正在尝试在 python 中将一堆 Visio 文件转换为 pdf。我已经引用了这个.doc to pdf using python并编写了以下代码: import comtypes.client
我是一名优秀的程序员,十分优秀!