0

目標は、PHP を使用してサーバーに FTP し、ディレクトリ リストを取得することです。唯一の問題は、ディレクトリにアクセスするために絶対パスを使用する必要があることです。

例:

$host = "example.com";
$port = 21;
$connection = ftp_connect($host, $port);

ftp_login($connection, "userA", "password");
ftp_pasv($connection, true);

//user's home directory is /home/userA
print_r( ftp_nlist($connection, "logs")); //works as intended
print_r( ftp_nlist($connection, "/home/userA/logs")); //does not work

本当に紛らわしい部分は、ファイルシステム関数を ftp URL で使用すると、正反対の問題が発生することです。

opendir("ftp://userA:password@example.com:21/home/userA/logs"); //works
opendir("ftp://userA:password@example.com:21/logs"); //does not work

ユーザー/ディレクトリはユーザーによって入力されるため、ユーザーが絶対パスまたは相対 (ホーム ディレクトリ) パスを使用するかどうかは必ずしもわかりません。単純な strstr を使用して、パスの最初の文字が「/」であるかどうかを確認し、使用する方法を選択することもできますが、2 倍のコードを書くことになります。

絶対パスと相対パスの両方で機能するメソッドを取得する簡単な方法が必要です。私が見落としているのは単純なことだと思っています。

ありがとう

4

2 に答える 2

0

FTPユーザーが正しく定義されていないようです。ftp管理者に連絡できるチャンスはありませんか?FTPが実行されているOSとFTPサービスを記述していません。ホームディレクトリを設定する方法の2つの例を次に示します。

VSFTPを使用したLinux

編集するよりも、ユーザーを作成してホームディレクトリを設定します/etc/vsftpd/vsftpd.conf

# Uncomment this to allow local users to log in.
local_enable=YES

[[ snip ]]

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list

ウィンドウズ

ユーザーアカウントを作成し、FTPサーバー内にフォルダーを設定し、そのユーザーにフルアクセスのアクセス許可を与え、ユーザーのホームページを構成します。

  1. コントロールパネルで、管理ツールを開きます。
  2. [コンピューターの管理]をダブルクリックします。
  3. [ローカルユーザーとグループ]を展開し、[ユーザー]をクリックし、ユーザー名を右クリックして、[プロパティ]をクリックします。
  4. [プロファイル]タブをクリックします。
  5. [ホームフォルダ]で[ローカルパス]が選択されていることを確認し、[ローカルパス]ボックスに適切なパスを入力します。たとえば、パスをd:\ Ftp\FolderNameと入力します。
于 2012-08-29T18:49:29.047 に答える
0

/ect/vsftpd にある vsftpd.conf ファイルを開きます: 次の行を挿入します。

anon_root= /var/www/html
于 2013-04-12T06:39:02.063 に答える