0

NAS 用の Web ベースの FTP クライアントを開発しようとしています。NAS 上のすべてのファイルのリストを取得しようとすると、スクリプトが永遠に読み込まれます。代わりに PHP を使用して Web ホストに接続しようとすると、すべて問題なく、すべてのファイルのリストを取得できます。Mac OS のターミナルからスクリプトを実行すると、NAS 上のファイルのリストを問題なく取得できます。

NAS 上のファイルのリストを取得できない理由を誰か教えてもらえますか? 自分の IP アドレス (もちろんローカル IP ではありません :-)) に接続し、ポートがデフォルトの 21 ではなく 2121 であることは重要ですか?

以下は私のスクリプトです。

// Set IP and port
define("FTP_CONNECT_IP", "");
define("FTP_CONNECT_PORT", "");

// Set username and password
define("FTP_LOGIN_USER", "");
define("FTP_LOGIN_PASS", "");

// Set directory to open
$dir = ($_GET['dir']) ? $_GET['dir'] : ".";

// Connect to FTP server
$conn = ftp_connect(FTP_CONNECT_IP, FTP_CONNECT_PORT); // Timeout is not set, default is 90 seconds

// Log into FTP srever
$login_result = ftp_login($conn, FTP_LOGIN_USER, FTP_LOGIN_PASS);

// Print details about directory
// Set what directory name to show
$dir_name = ($dir == ".") ? "/" : "/" . $dir;

echo "Current dir: " . $dir_name . "<br /><br />";

foreach (ftp_nlist($conn, $dir) as $element) {
    $element_name = str_replace($dir . "/", "", $element);

    // Check if element is a file or a directory
    // If size is -1 then the element is a directory
    if(ftp_size($conn, $element) == -1) {
        echo "<a href=\"index.php?dir=" . $element . "\">" . $element_name . "</a><br />";
    }
    else {
        echo "<a href=\"http://" . $element . "\" target=\"_blank\">" . $element_name . "</a><br />";
    }
}

// Close connection
ftp_close($conn);
4

1 に答える 1

0

おそらくあなたのNASにはファイアウォールがあります。以下を使用してパッシブモードを有効にしてみてください。

ftp_pasv($conn, true);

後に

ftp_login(...)
于 2011-07-17T10:22:26.010 に答える