我正在开发一个网站,该网站将充当我家用机器的在线 SFTP 客户端。到目前为止,我的解决方案是一个包含站点 UI 的索引(主)php 文件,以及一个与 SFTP 连接管理器 phpseclib 连接的 SFTP PHP 便利类。
index.php
<?php
require_once "php/Membership.php";
require_once "php/ssh.php";
require_once "php/sftp.php";
$sftp = new SFTP();
error_reporting(E_ALL); // will report any errors your code may have
ini_set("display_errors", 1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!ATTLIST td fileName CDATA #IMPLIED>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>SFTP</title>
<link href="index.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="index.js"></script>
</head>
<body>
<h1 id="welcome">Welcome</h1>
<div id="container">
<div id="content">
<!--SFTP Files-->
<div style="height:1000px; overflow:auto;">
<?php $sftp->set_table(NULL, NULL);?>
</div>
</div>
</div>
</body>
</html>
SFTP.php
<?php
include('Net/SFTP.php');
class SFTP {
private $sftp;
function __construct() {
$this->sftp = new Net_SFTP('99.99.9999.999');
if (!$this->sftp->login('user', 'pwd')) {
exit('Login Failed');
}
echo $this->sftp->pwd() . "\r\n";
}
function set_table($table, $directory) {
if (isset($directory)) {
$this->sftp->chdir($directory);
}
echo '<table id="sftpTable" style="border:1px solid;">';
$result = $this->sftp->nlist();
foreach ($result as $row) {
if (substr($row, 0, 1) != '.') {
echo "<tr>" . "<td class='columnSelect' id=" . $row . "><form method='post' action=''>" . $row . "<input type=\"hidden\" name=\"index\" value=\"" . $row . "\" /></form></td>";
if (strpos($row,'.') !== false)
echo '<td>'. $this->parseBytes($this->sftp->_size($row)) . '</td></tr>';
}
}
echo '</table>';
}
function parseBytes($bytes) {
if ($bytes / 1074000000 >= 1) {
return $bytes / 1074000000 . 'GB';
}
if ($bytes / 1048576 >= 1) {
return $bytes / 1048576 . 'MB';
}
if ($bytes / 1024 >= 1) {
return $bytes / 1024 . 'KB';
}
return $bytes . 'B';
}
}
?>
现在我面临的问题是似乎是循环逻辑之一。我最初的想法是建立一个以以下方式工作的系统:
- 建立到 SFTP 的单例连接
- 对该单例进行查询
- 在 UI 中显示结果
我计划显示一个表格,其中包含代表服务器目录中不同项目的可点击行。当用户单击其中一行时,我希望系统返回该目录的新项目列表,并相应地更新 UI。为了做到这一点,我尝试向每个表格行添加一个隐藏字段来保存该单元格的列表名称。单击单元格时,我需要提取该隐藏字段的值并使用新目录重置表。然后出现了更换屏幕上的表格而不只是呼应新表格的问题。
因此,我的问题是:
存储与每个单元格相关的目录的最佳方法是什么,当单击该单元格时,SFTP 单例会根据新目录重置一个表?
请注意,上面的代码可能存在逻辑错误,对于新查看者来说可能没有什么意义,因为已经进行了许多不同的尝试。另外,需要明确的是,我正在寻找正确方向的方法论点,而不是为我编写代码的人。
提前致谢。