저는 가정용 컴퓨터의 온라인 SFTP 클라이언트로 작동 할 웹 사이트에서 작업하고 있습니다. 내가 지금까지 가지고있는 솔루션은 사이트의 UI를 포함하는 색인 (주) PHP 파일과 phpseclib 인 SFTP 연결 관리자 인 SFTP PHP 편의 클래스입니다. PHP SFTP 명령과 상수 연결
<?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.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>
index.php
UI
- 는 단일 연결을 설정 : 내 초기 생각은 다음과 같은 방식으로 작동하는 시스템을 가지고 있었다 서버의 디렉토리에있는 여러 항목을 나타내는 클릭 가능한 행이있는 테이블을 표시합니다. 사용자가 해당 행 중 하나를 클릭하면 디렉토리의 새 항목 목록을 반환하고 그에 따라 UI를 업데이트하기를 원합니다. 이를 달성하기 위해 각 테이블 행에 숨겨진 필드를 추가하여 해당 셀의 목록 이름을 유지하려고했습니다. 셀을 클릭하면 해당 숨겨진 필드의 값을 추출하고 새 디렉터리로 테이블을 다시 설정해야합니다. 그런 다음 화면을 교체하고 새 메시지를 반향 출력하지 않는 문제가 발생합니다.
따라서, 내 질문은 :
해당 셀을 클릭하면 SFTP 싱글을 기반으로 한 테이블을 다시 설정하는 방식으로 각 셀에 관한 디렉토리를 저장하는 가장 좋은 방법은 무엇입니까 새 디렉토리?
위의 코드에는 여러 가지 시도가 있었기 때문에 새로운 뷰어에게는 거의 이해할 수없는 논리 오류가있을 수 있습니다. 또한, 명확하게하기 위해, 나는 올바른 방향으로 방법 론적 관점을 찾고 있으며 누군가 나를위한 코드를 작성하는 것이 아닙니다.
미리 감사드립니다.
내가 원하는 복잡성에 따라 * 할 방법이 하나 있다고 생각하지 않습니다. AJAX를 통해 SFTP 클래스를 호출하여 폴더 트리를로드하고 JSON 데이터로 반환합니다. 나머지는 Javascript (jquery 또는 다른 lib가 DOM 수정에 도움이 됨)에 의해 처리됩니다. 따라서 언제든지 폴더를 클릭하면 AJAX 요청이 트리를 가져옵니다 (많은 폴더/파일이있는 경우 2-3 개의 하위 디렉토리가있을 수 있습니다). 또한 자바에서이 트리를 캐시하고 "일부 제한 시간 또는 기타"로직이 충족되면 AJAX 만 호출합니다. – JScoobyCed
AJAX 옵션을 탐색했습니다. 내가 겪었던 문제는 SFTP 명령이 AJAX를 통해 실행하는 방법을 파악할 수없는 클래스의 일부로 존재한다는 것입니다 (즉, 싱글 톤에 대한 액세스를 얻고 메서드를 호출 함). 그렇지 않으면, 방금 메서드를 호출하는 일반적인 PHP 스크립트를 작성하면, 이는 싱글 톤 개념을 파괴하고 모든 명령으로 서버에 다시 연결한다는 의미입니다. AJAX를 통해 싱글 톤 클래스에서 메서드를 호출하는 방법을 알고 있습니까? –
좋아, 나는 어떻게 든 당신의 대답을 기대하고 있었다. 나는이 상황을 결코 만날 수 없기 때문에 나는 도울 수 없다. 나는 누군가 대답을 기다리고있을거야 :) – JScoobyCed