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 来检查路径中的第一个字符是否是“/”并选择要使用的方法,但是我最终会编写两倍的代码。

必须有一种更简单的方法来获得某种方法来处理绝对路径和相对路径。我希望这是一件简单的事情,我只是忽略了。

谢谢

4

2 回答 2

0

在 /ect/vsftpd 中打开文件 vsftpd.conf: 插入行:

anon_root= /var/www/html
于 2013-04-12T06:39:02.063 回答
0

看起来 FTP 用户没有正确定义。没有机会联系 ftp 管理员?您没有写 FTP 在什么操作系统下运行以及在哪个 FTP 服务下,这里有两个如何设置主目录的示例:

带有 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 回答