Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помощь с FTP
 
 автор: Антоха   (11.12.2006 в 05:10)   письмо автору
 
 

Привет всем!
Помогите пожалуйста!
Есть локалка:
Там открыт фаловый сервер (фильмы, клипы, музыка и т.п) через ftp
Он открыт для всех и пароля не требуется.
Но как мне с ним связаться при помощи пхп. Пробую:

<?php

$ip 
'192.168.xxx.xxx.';
$user "";
$pass "";

$fc ftp_connect($ip);
if(
$fc) echo "connect";
else echo 
"not connect";
//все ОК - (connect)

$res ftp_login($fc$user$pass);
if(
$res) echo "ok";
else echo 
"no";
// не OK - (no)
?>

Вот в ftp_login() и не получается. Я пробавал разные имена, разные пароли, разные ip вместо них подставлять, вообще без пароля, но всеравно не хочет. Так вот какой же мне пароль или имя поставить или может что-то другое надо сделать. Ведь так то я могу без пароля заходит, значит его вообще не надо. Пожалуйста подскажите, что нужно сделать, может я что-то неправильно делаю.

   
 
 автор: tuder   (11.12.2006 в 08:52)   письмо автору
 
   для: Антоха   (11.12.2006 в 05:10)
 

Если пароля нет - пользователь всё равно "anonymous"


//Соединение с сервером
   $ftp = ftp_connect($host);
   ftp_pasv($ftp, TRUE);
   $time=time();
//Авторизация на сервере.
   $ftp_flag=FALSE;
   while (!$ftp_flag) {
      $ftp1 = @ftp_login($ftp, "anonymous",'');
      if ($ftp1) {$ftp_flag=TRUE;}
      if (time()-$time>20)   {
         echo "Нет соединения";
         exit();
       }
   }
  $content=0;
//Запрашиваем список.
$buf = ftp_nlist($ftp, $dir);

   
 
 автор: cheops   (11.12.2006 в 13:47)   письмо автору
 
   для: tuder   (11.12.2006 в 08:52)
 

>Если пароля нет - пользователь всё равно "anonymous"
А в качестве пароля лучше передать произвольный e-mail, ряд FTP-серверов только при таких параметрах принимают анонимных пользователей.

   
 
 автор: Антоха   (11.12.2006 в 22:11)   письмо автору
 
   для: cheops   (11.12.2006 в 13:47)
 

Ага, на сервер я зашел, но теперь возникла проблема, как мне "просматривать" фаилы и папки.
Функция ftp_nlist() - выдает только имена файлов, а имена папок не выдает. Функция ftp_rawlist() выдает всё (точнее слишком много всего). Как мне сделать, чтобы просмотреть фаилы и каталоги, а не только файлы. Мож есть какая функция, которую можно применить? Пожалуйста подскажите что-нибудь.

   
 
 автор: Антоха   (11.12.2006 в 23:09)   письмо автору
 
   для: cheops   (11.12.2006 в 13:47)
 

Ага, на сервер я зашел, но теперь возникла проблема, как мне "просматривать" фаилы и папки.
Функция ftp_nlist() - выдает только имена файлов, а имена папок не выдает. Функция ftp_rawlist() выдает всё (точнее слишком много всего). Как мне сделать, чтобы просмотреть фаилы и каталоги, а не только файлы. Мож есть какая функция, которую можно применить? Пожалуйста подскажите что-нибудь.

   
 
 автор: cheops   (11.12.2006 в 23:34)   письмо автору
 
   для: Антоха   (11.12.2006 в 23:09)
 

А больше, к сожалению, ничего нет - извлекайте список подкаталогов и файлов из отчёта функции ftp_rawlist(), например, при помощи конструкции
<?php
    $file_list 
ftp_rawlist($ftp_handle$directory);
    foreach(
$file_list as $file_single)
    {
      
// Разбиваем строку по пробельным символам
      
list($acc,
           
$bloks,
           
$group,
           
$user,
           
$size
           
$month
           
$day
           
$year
           
$file) = preg_split("/[\s]+/"$file_single);
    }
?>

   
 
 автор: Антоха   (12.12.2006 в 05:31)   письмо автору
 
   для: cheops   (11.12.2006 в 23:34)
 

Млин... Опять у меня проблема. Как мне вывести у определенного каталога все его файлы, под каталоги и файлы в подкаталогах? Делаю вот так, но не получается:

<?php
$dir 
"./Фильмы";
function 
scann($dir) {
   GLOBAL 
$ftp;
   
$buf ftp_rawlist($ftp$dir);
   foreach(
$buf as $f) {
      list(
$acc
           
$bloks
           
$user
           
$group
           
$size,  
           
$month,  
           
$day,  
           
$year,  
           
$file) = preg_split("/[\s]+/"$f);
           
// Предположим, что если $size = 0, то это скорее всего каталог
      
if($size == 0) {
         if(
$file != "." && $file != "..") {
            
scann($dir."/".$file);
         }
      }
   }
}
scann($dir);
?>

Не могу понять как мне всё правильно сделать и где собственно ошибка.

   
 
 автор: tuder   (12.12.2006 в 07:10)   письмо автору
 
   для: Антоха   (12.12.2006 в 05:31)
 

Вот темы
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=20562&page=1
А тут скрипт
http://softtime.ru/forum/read.php?id_forum=1&id_theme=19721&page=1

   
 
 автор: Антоха   (12.12.2006 в 10:05)   письмо автору
 
   для: tuder   (12.12.2006 в 07:10)
 

Посмотрел, не че не понял. Какой-то скрипт, у меня не работает (точнее выдает не то), вроде все подправил в нем и че то там много лишнего всего. Мне же нужно, чтобы просто выдавался список всех файлов и каталогов.
В той теме кто-то написал: для того, чтобы узнать файл это или каталог применяется функция ftp_size() если выдает -1 значит каталог, но у меня это не работает (везде выдается -1). Но в принципе можно сделать так:

<?php
  
// Код продолжается (смотрите предыдущий код)
  
if(preg_match("/^d/"$acc)) echo $file." = katalog<br>";
?>

Так вроде работает, но суть не в этом. Мне надо просто как-нибудь пробежатся по нужной директории и получить желаемый результат. Вот как мне это сделать? Подскажите плиз...

   
 
 автор: tuder   (12.12.2006 в 13:25)   письмо автору
 
   для: Антоха   (12.12.2006 в 10:05)
 

Размер будет, вроде, выдаваться на юниховых хостингах, в Виндовсе -1

Скрипт, да, маленько для другого пердназначен, но тоже должен показывать каталоги с файлами, да ещё перемещаться по ним.

Дан в качестве примера.

   
 
 автор: Антоха   (12.12.2006 в 23:57)   письмо автору
 
   для: tuder   (12.12.2006 в 13:25)
 

Еще раз попробовал этот скрипт всеравно не работает. Просто я в пхп на нулевом уровне, так что твой скрипт не совсем понимаю. Он вроде работает по определению функции ftp_size(), (это как я понял), но т.к эта функция у меня везде выдает -1, то скорее всего по этому и не работает. А мне нужен скрипт который я бы понимал. "Мой" скрипт выше вроде нормально работает , просто там ошибка где-то. Допустим:
ищем в корневой директории (".") - он всё нормально проходит, узнает файлы и каталоги, но вот как дальше мне по найденым каталогам пробежатся? Я уже разное пробовал, но у меня почему то получается если он заходит в первый найденый каталог, он там тоже всё находит, но зацикливается в нем и не может вырватся. Скорее всего ошибка получается в - пути, который передается функции. Пожалуйста скажите, как правильно всё сделать.

   
 
 автор: Антоха   (13.12.2006 в 02:38)   письмо автору
 
   для: Антоха   (12.12.2006 в 23:57)
 

Вот, кое-как, что-то сделал:

<?php
function scann($dir) {
   GLOBAL 
$ftp;
   
$buf ftp_rawlist($ftp$dir);
   foreach(
$buf as $f) {
      list(
$acc$bloks$user$group
           
$size$month$day$year,
           
$file) = preg_split("/[\s]+/"$f);
      if(
preg_match("/^d/"$acc)) {
         if(
$file != "." && $file != "..") {
            echo  
$dir."/".$file."<br>";
            
scann($dir."/".$file);
         }
      }
      else {
         echo 
$file."<br>";
      }
   }
}
scann($dir);
?>

но не могу рассортировать всё это. Нужно чтобы было как есть - идут каталоги в алф. порядке, потом файлы в алф. порядке. Перепробовал все (sort, ksort, rsort и т.п) разные флаги (SORT_[REGULAR],[NUMERIC],[STRING]), нет желаемого результата. Значит, наверное функцию надо переделывать, вот только не знаю как. Может кто-нить поделится скриптом или поможет исправить этот! Плиз. ПАМАГИТЕ.

   
 
 автор: tuder   (13.12.2006 в 10:16)   письмо автору
 
   для: Антоха   (13.12.2006 в 02:38)
 

У тебя тут многое не понятно.

Что за $f в foreach?
Что находится в $dir передаваемой функции?

То, что функция зацикливается - это понятно. У тебя в ней рекурсивный вызов самой себя:
scann($dir."/".$file);

И всё-таки что в итоге требуется? Отразить единственный каталог? Или сделать этакий файл-менеджер, позволяющий в бровзере "гулять" по каталогам фтп?

   
 
 автор: Антоха   (13.12.2006 в 19:47)   письмо автору
 
   для: tuder   (13.12.2006 в 10:16)
 

Извени, не знаю конечно, что тебе здесь не понятно.
Что находится в $dir передаваемой функции?
Можно и самом интуитивно догадатся что там находится, конечно же имя директории, которую мы сканируем, а можно было бы и выше посмотреть код, который я там писал, нашел бы
$dir = "./Фильмы";
Что за $f в foreach?
Почему тебе не понятно? Функция ftp_rawlist() помещает все результаты в массив $buf, дальше мы пробегаемся по этому массиву циклом foreach

<?php
foreach($buf as $f) \\ где перемунную $f можно назвать как угодно это же значение
?>

Т.к. ftp_rawlist() выдает слишком много всего лишнего, то мы при помощи и preg_split() разбиваем $f, на "блоки" list(переменные) - последняя переменная $file будет содержать имя файла или каталога, а самая первая переменная $acc будет содержать либо drw-rw-rw- (если это каталог), либо -rw-rw-rw- (если это файл), вот тут то мы и проверяем:

<?php
//если $acc начинается на "d", то значит это каталог,
if(preg_match("/^d/"$acc))
// вызываем рекурсивно функцию и передаем ей $dir."/".$file
scann($dir."/".$file);
?>

И если ты не заметил, то у меня вроде худо-бедно, получилось как то пробежатся по нужно директории, но я написал вопрос, как мне рассортировать все это, чтобы было как есть. Сначала каталоги идут в алф. порядке, потом файлы в алф. порядке.
Спасибо.

   
 
 автор: Антоха   (13.12.2006 в 20:19)   письмо автору
 
   для: Антоха   (13.12.2006 в 19:47)
 

А еще, хотел собственно сказать для чего вообще мне это всё надо.
Дело в том, что я и так могу просмотреть в браузере всё это. А я в основном ищу фильмы и скачиваю их. Но большую часть уже просмотрел. И т.к файловый сервер пополняется фильмами, искать новые фильмы (а их более 900), согласитесь не очень удобно. Вот с вашей помощью я и хочу написать скриптик, который бы делал разные манипуляции с поиском. Надеюсь вы мне поможите.
Спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования