目标是使用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来检查路径中的第一个字符是否为“/”并选择要使用的方法,但最后我会编写两倍的代码。
必须有一种更简单的方法来使用一些方法来处理绝对路径和相对路径。我希望这很简单,我只是在俯视。
由于
答案 0 :(得分: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 :(得分:0)
在/ ect / vsftpd中打开文件vsftpd.conf: 插入行:
anon_root= /var/www/html