2012-08-29 1 views
0

Целью является использование php для FTP на сервере и получение списков каталогов. Единственная проблема заключается в том, что мне нужно использовать абсолютный путь для доступа к каталогу.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 дает мне точную проблему напротив:

opendir("ftp://userA:[email protected]:21/home/userA/logs"); //works 
opendir("ftp://userA:[email protected]:21/logs"); //does not work 

Поскольку пользователь/каталог введенная пользователь, я не обязательно буду знать, хотят ли они использовать абсолютный или относительный (домашний каталог) путь. Я мог бы использовать простую strstr, чтобы проверить, является ли первый символ в пути «/» и выбирает, с каким способом идти, но тогда я бы в итоге написал вдвое больше кода.

Должен быть более простой способ получить некоторый метод для работы как с абсолютными, так и с относительными путями. Я надеюсь, что это просто, что я просто не замечаю.

Thanks

+0

Это звучит как проблема с вашим FTP-сервером. Я попробовал это на пару серверов, к которым у меня есть доступ, и он отлично работал в любом случае. Вы можете проверить введенный пользователем путь и посмотреть, начинается ли он с текущего каталога ('ftp_pwd ($ connection)')? Если это так, удалите начало пути. – mcrumley

+0

'ftp_pwd ($ connection)' возвращает "/" только. Я ожидал возвращения «/ home/userA». Я не могу придумать другой способ найти домашний каталог пользователя по умолчанию через ftp. По общему признанию, я не администратор сервера. У меня также нет доступа к изменению чего-либо на ftp-сервере и, к сожалению, у меня есть только этот тест. – user1052474

+0

К сожалению, я не нашел хорошего решения, поэтому я написал два класса: один для абсолютных путей и один для относительных путей. – user1052474

ответ

0

Похоже, что пользователь FTP не определен правильно. Не можете ли вы связаться с администраторами ftp? Вы не писать под какой ОС работает FTP работает и который FTP службы, вот два примера того, как установить домашние директории:

Linux с VSFTP

Создать пользователя и установить его домашний каталог , чем редактировать /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-сер ver и предоставить этому пользователю разрешение на полный доступ и настроить домашнюю страницу для пользователя:

  1. В панели управления откройте «Администрирование».
  2. Дважды щелкните Управление компьютером.
  3. Разверните локальные пользователи и группы, нажмите «Пользователи», щелкните имя пользователя правой кнопкой мыши и выберите «Свойства».
  4. Перейдите на вкладку Профиль.
  5. Убедитесь, что в разделе Домашняя папка выбран Локальный путь, а затем введите соответствующий путь в поле Локальный путь. Например, введите путь как d: \ Ftp \ FolderName.
0

Открыть vsftpd.conf файл в/ECT/VSFTPD: Вставить строку:

anon_root= /var/www/html