0

自宅のマシンのオンライン SFTP クライアントとして機能する Web サイトに取り組んでいます。これまでの解決策は、サイトの 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'; 
    }
}

?>

今私が直面している問題は、循環ロジックのように見えるものの 1 つです。私の最初の考えは、次のように機能するシステムを用意することでした。

  1. SFTP へのシングルトン接続を確立する
  2. そのシングルトンに対してクエリを実行する
  3. 結果を UI に表示する

サーバー上のディレクトリ内のさまざまなアイテムを表すクリック可能な行を含むテーブルを表示する予定です。ユーザーがこれらの行の 1 つをクリックすると、システムがそのディレクトリの項目の新しいリストを返し、それに応じて UI を更新するようにします。これを実現するために、テーブルの各行に隠しフィールドを追加して、そのセルのリストの名前を保持しようとしました。セルがクリックされたら、その非表示フィールドの値を抽出し、新しいディレクトリでテーブルをリセットする必要があります。次に、新しいテーブルをエコーアウトするだけでなく、画面上のテーブルを置き換えるという問題が発生します。

したがって、私の質問は次のとおりです。

そのセルがクリックされると、SFTP シングルトンが新しいディレクトリに基づいて1 つのテーブルをリセットするような方法で、各セルに関連するディレクトリを保存する最良の方法は何ですか?

多くの異なる試行が行われたため、上記のコードには、新しい視聴者にはほとんど意味をなさない論理エラーが含まれている可能性があることに注意してください。また、明確にするために、私はコードを書いてくれる人ではなく、正しい方向への方法論的なポイントを探しています。

前もって感謝します。

4

1 に答える 1