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

Форум PHP

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

 

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

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

тема: Чтение листинга удаленной директории посредством fsockopen();
 
 автор: amigo62   (16.08.2007 в 23:26)   письмо автору
 
 

Всем доброго времени суток! Сейчас на многих серверах с рнр 5 почему-то косят функции ftp_*list();, и приходится искать альтернативу. Одну уже нашел- curl =), но дело вот в чем. Собираюсь доработать публичный скрипт WAP-ftp, который зачастую ставят админы на халявных хостингах, а на них cURL бывает реже, чем рнр 5 ;). Следовательно, fsockopen рулит)) Буду благодарен за любую инфу о том, как правильно отправить запрос на получение "сырого" листинга, т.к. ничего об этом не знаю...
ps честно юзал поиск, но толку мало, слово "ftp" не ищется :(

   
 
 автор: kasmanaft   (16.08.2007 в 23:32)   письмо автору
 
   для: amigo62   (16.08.2007 в 23:26)
 

Ищите на яндексе "протокол FTP".. Прочитайте.. Потом "пуск-выполнить-telnet".. Попробуйте там то, о чем прочитали. А потом и с fsockopen() проблем не будет никаких..

   
 
 автор: amigo62   (17.08.2007 в 08:41)   письмо автору
 
   для: kasmanaft   (16.08.2007 в 23:32)
 

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

   
 
 автор: Faraon   (17.08.2007 в 09:16)   письмо автору
 
   для: amigo62   (17.08.2007 в 08:41)
 

http://www.softtime.ru/forum/srchform.php?id_forum=1&name=fsockopen+&numberthemes=30&srchwhere=1&id_forum=1&logic=1&send=%CD%E0%E9%F2%E8

   
 
 автор: amigo62   (17.08.2007 в 12:48)   письмо автору
 
   для: Faraon   (17.08.2007 в 09:16)
 

Спасибо, но все эти темы я смотрел еще вчера.... Там в основном о http и немного о smtp :(

   
 
 автор: amigo62   (17.08.2007 в 12:57)   письмо автору
 
   для: Faraon   (17.08.2007 в 09:16)
 

Вобщем, я попытаюсь составить запрос из того что понял, а вы меня поправите, если что то не сработает, ок? надеюсь на вас :)

   
 
 автор: amigo62   (17.08.2007 в 15:31)   письмо автору
 
   для: Faraon   (17.08.2007 в 09:16)
 

Ну как и следовало ожидать- не работает... Сервер не отвечает на обращение к скрипту
<?php
$user
="login";
$password="password";
$fp=fsockopen("wen.ru",21,$errno,$errstr,30);
if(!
$fp) echo"$errstr($errno)";
else
{
 
$line="";
 
fwrite($fp,'USER '.$user);
 while(!
feof($fp)){$line.=fgets($fp,1024);}
 
fwrite($fp,'PASS '.$password);
 while(!
feof($fp)){$line.=fgets($fp,1024);}
 
fwrite($fp,'CWD /javamids/');
 while(!
feof($fp)){$line.=fgets($fp,1024);}
 
fwrite($fp,'PASV');
 while(!
feof($fp)){$line.=fgets($fp,1024);}
 
fwrite($fp,'LIST');
 while(!
feof($fp)){$line.=fgets($fp,1024);}
 
fwrite($fp,'QUIT');
 while(!
feof($fp)){$line.=fgets($fp,1024);}
 
fclose($fp);
 echo 
$line;
}
?>
может, команды надо пучком слать через \r\n ?

   
 
 автор: Unkind   (17.08.2007 в 15:37)   письмо автору
 
   для: amigo62   (17.08.2007 в 15:31)
 

1. Не "пучком" (это сессионый протокол), но переводы строк всё равно нужны.
2. Почему Вы обращаетесь к 30-ому порту? Там стандартно 21-ый.

   
 
 автор: amigo62   (17.08.2007 в 16:04)   письмо автору
 
   для: Faraon   (17.08.2007 в 09:16)
 

Не к 30му, к 21му. 30 это таймаут

   
 
 автор: Unkind   (17.08.2007 в 23:25)   письмо автору
 
   для: amigo62   (17.08.2007 в 16:04)
 

Да, не туда посмотрел.

   
 
 автор: amigo62   (17.08.2007 в 16:25)   письмо автору
 
   для: Faraon   (17.08.2007 в 09:16)
 

добавил \r\n, не идет все равно

   
 
 автор: amigo62   (17.08.2007 в 18:20)   письмо автору
 
   для: Faraon   (17.08.2007 в 09:16)
 

Люди добрыя, неужели не знает никто?! =0

   
 
 автор: Trianon   (18.08.2007 в 00:47)   письмо автору
 
   для: amigo62   (17.08.2007 в 18:20)
 

протокол FTP

   
 
 автор: amigo62   (18.08.2007 в 16:21)   письмо автору
 
   для: Trianon   (18.08.2007 в 00:47)
 

Ура, заработало!!! Правда, немного косячно =) вот это я написал:
<?php
$user
="user";
$password="****";
$fp=fsockopen("wen.ru",21);
if(
$fp)
{
 
$line="Begin: ";
 
$line.=fread($fp,1024)."<br />";
 
fwrite($fp,"USER ".$user."\r\n");
 
$line.="USER answer: ".fread($fp,1024)."<br />";
 
fwrite($fp,"PASS ".$password."\r\n");
 
$line.="PASS answer:".fgets($fp,1024)."<br />";
 
fwrite($fp,"CWD /javamids/\r\n");
 
$line.="CWD answer:".fgets($fp,1024)."<br />";
 
fwrite($fp,"PASV\r\n");
 
$line.="PASV answer:".fgets($fp,1024)."<br />";
 
fwrite($fp,"LIST\r\n");
 
$line.="LIST answer:".fgets($fp,1024)."<br />";
 
fwrite($fp,"QUIT\r\n");
 
fclose($fp);
 echo 
$line;
}else{echo 
"failed";}
?>
а вот это результат:
Begin: 220 -WEN.RU 
FTPD 1.0 

USER answer:  220 
81.222.134.82  FTP 
server ready 

PASS answer:331 
Password required 
for.... 
Возник ряд вопросов:
- почему в данном случае сервер "не успел"с ответом (так бывает не всегда)?
-почему я так и не дождался ни разу ответа на команду list?
-почему скрипт жутко тормозит (работает раз в 10 медленнее аналогов на curl или стандартных функциях ftp)?
-почему иногда приходит ответ, что кол-во подключений по данной учетке больше одного (это максимум для wen.ru)?
-и самое главное, что исправить, чтобы чтобы скрипт работал не хуже, чем на стандартных функциях ftp?

   
 
 автор: amigo62   (18.08.2007 в 16:54)   письмо автору
 
   для: Trianon   (18.08.2007 в 00:47)
 

oops, насчет LIST я уже сам понял: CWD /javamids/ - слеш в конце лишний...

Блин и без него не отвечает...

   
 
 автор: interest_quastion   (20.08.2007 в 05:35)   письмо автору
 
   для: amigo62   (18.08.2007 в 16:54)
 

Замени эту строку:

fwrite($fp,"CWD /javamids/\r\n"); 


на эту:

fwrite($fp,"CWD javamids/\r\n"); 

   
Rambler's Top100
вверх

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