PHP ftp函数获胜';不要使用绝对路径


PHP ftp functions won't use absolute paths

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

必须有一种更简单的方法来获得一些同时使用绝对路径和相对路径的方法。我希望这是一些简单的事情,我只是忽略了。

感谢

看起来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

Windows

创建一个用户帐户,在FTP服务器中设置一个文件夹,授予该用户完全访问权限,并为该用户配置主页:

  1. 在"控制面板"中,打开"管理工具"
  2. 双击"计算机管理"
  3. 展开"本地用户和组",单击"用户",右键单击用户名,然后单击"属性"
  4. 单击"配置文件"选项卡
  5. 确保在"主文件夹"下选择了"本地路径",然后在"本地路径(Local path)"框中键入适当的路径。例如,键入路径为d:''Ftp''FolderName

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

anon_root= /var/www/html