Я работаю над веб-сайтом, который будет действовать как онлайн-клиент SFTP для моей домашней машины. Решение, которое у меня есть до сих пор, представляет собой индексный (основной) файл php, который содержит пользовательский интерфейс сайта, и удобный класс SFTP PHP, который подключается к phpseclib, диспетчеру соединений SFTP.
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
- Делайте запросы к этому синглтону
- Представление результатов в пользовательском интерфейсе
Я планирую показать таблицу с интерактивными строками, представляющими различные элементы в каталоге на сервере. Когда пользователь щелкает одну из этих строк, я хочу, чтобы система возвращала новый список элементов для того каталога и соответствующим образом обновляла пользовательский интерфейс. Чтобы добиться этого, я попытался добавить скрытое поле в каждую строку таблицы, чтобы хранить имя списка для этой ячейки. Когда ячейка щелкнута, мне нужно будет извлечь значение этого скрытого поля и сбросить таблицу с новым каталогом. Тогда возникает вопрос о замене таблицы на экране, а не просто повторении новой.
Поэтому мой вопрос:
Каков наилучший способ сохранить каталог, относящийся к каждой ячейке, таким образом, чтобы при щелчке по этой ячейке синглтон SFTP сбрасывал таблицу one на основе нового каталога?
Обратите внимание, что приведенный выше код, вероятно, содержит логические ошибки, которые могут показаться новичку малопонятными, так как было предпринято много разных попыток. Кроме того, чтобы было ясно, я ищу методологическую точку в правильном направлении, а не кого-то, кто напишет за меня код.
Заранее спасибо.