ftp_connect глючит после пары тысяч коннектов

AlekSilverstone

Новичок
ftp_connect глючит после пары тысяч коннектов

Доброго времени суток всем!
Есть следующий код:
PHP:
<?php
  set_time_limit(0);
  $i=1;

  while (TRUE)
  {
    $date=date('H:i:s');
    $ftp=ftp_connect('127.0.0.1',21,10);
    if ($ftp) $login=ftp_login($ftp,'anonymous',$i);
    if ($ftp && $login)
    {
      if (($i % 100) === 0) echo "[$date] $i - online.\n";
    }
    else
    {
      echo "[$date] $i - offline.\n";
      break;
    }
    @ftp_close($ftp);
    $i++;
  }
?>
Скрипт запускается под PHP-cli 5.1.6. После некоторого количества коннектов (от 300 до 3000 - зависит от IP (localhost, LAN или Internet), FTP-сервера и фазы луны) происходит неконнект. :( Я даже думал, что это баг PHP - но сказали, что нет.

UPD
Ограничений на количество коннектов на сервере нет. Раскиданные по скрипту sleep(1) проблему не решают.
 

donflash

Вареник клуба
Может на сервере стоит какое-то временное ограничение? Такие фишки, иногда на серваки ставят...
 

AlekSilverstone

Новичок
donflash, нет - сервер-то мой, а я знаю, что там ничего нет.
Даже так: если при ошибке не заканчивать выполнение скрипта, то после ошибки на i-том шаге он продолжит нормально подключаться - до j-того шага.
 

donflash

Вареник клуба
Забудь ты про "@", сколько же раз об этом говорили....
 

AlekSilverstone

Новичок
donflash, @ftp_close($ftp) выдаёт ошибку, если $ftp==FALSE. Вот и всё. Соединение перед ошибочным закрывается нормально.
 

hermit_refined

Отшельник
нет - сервер-то мой, а я знаю, что там ничего нет
логи ftp-сервера смотрели?..
php какие ошибки пишет? (если они отключены - включите)
и не стоит спамить bugs.php.net, им и без вас живется нелегко.
@ftp_close($ftp) выдаёт ошибку, если $ftp==FALSE
какие проблемы поставить if?
 

AlekSilverstone

Новичок
логи ftp-сервера смотрели?..
Скрипт:
Код:
[23:42:57] 16441 - offline.
Лог сервера:
Код:
[5] Wed 06Dec06 23:42:57 - (016443) Connected to 127.0.0.1 (Local address 127.0.0.1)
[5] Wed 06Dec06 23:42:57 - (016443) ANONYMOUS logged in, password: 16440
[5] Wed 06Dec06 23:42:57 - (016443) Closing connection for user ANONYMOUS (00:00:00 connected)
[5] Wed 06Dec06 23:43:13 - (016444) Connected to 127.0.0.1 (Local address 127.0.0.1)
[5] Wed 06Dec06 23:43:13 - (016444) Closing connection
Коннект есть, но PHP об этом "не знает".

php какие ошибки пишет? (если они отключены - включите)
Ошибки включены, но скрипт ничего не пишет. :\

и не стоит спамить bugs.php.net, им и без вас живется нелегко.
Я с ftp_-функциями парюсь уже недели 2. Сначала мой большой скрипт начинал глючить в разных случайных местах - при выводе списка файлов, например. Путём выкидывания из него кода я получил примерно то, что в первом посте.

какие проблемы поставить if?
Желание уменьшить скрипт перед выкладыванием на форум.
 

hermit_refined

Отшельник
Коннект есть, но PHP об этом "не знает".
судя по логам, коннекта нет, по крайней мере ftp-сервер притворяется, будто о нем не знает.

угадать невозможно, что там у вас; экспериментируйте, например, запустите ftp-демона в отладочном режиме.
но похоже всё-таки на глюк сервера.
 

AlekSilverstone

Новичок
судя по логам, коннекта нет, по крайней мере ftp-сервер притворяется, будто о нем не знает.
Последняя запись в логе - это именно "неудавшийся" коннект. Разница во времени - тайм-аут.

Я уже недели 2 экспериментирую - ставлю задержки в скрипте, ставлю разные ftp-серверы... Вывод такой: либо ошибка в PHP, либо сокетах Windows 2k/XP.
 

hermit_refined

Отшельник
Последняя запись в логе - это именно "неудавшийся" коннект. Разница во времени - тайм-аут.
хм... не знаю, вам с места событий видней, конечно. Но отладочный режим не помешает.
Ну и в конце концов - послушайте снифером, кто там кому чего шлет.
 

AlekSilverstone

Новичок
Всё-таки есть какие-то баги в PHP...
Есть скрипт, рекурсивно сканирующий ftp-сервер. Работает он, работает... И вдруг начинает писать такое:
Код:
Warning: ftp_chdir(): Opening ASCII mode data connection for /bin/ls

Warning: ftp_pwd(): Directory changed to /somedir/1

Warning: ftp_chdir(): PORT Command successful

Warning: ftp_pwd(): Directory changed to /somedir/2
При этом, например, функция ftp_pwd() возвращает пустую строку. :\
 

Никола

Новичок
у меня данный скрипт на 3960 каком-то конекте ошибается стандартно:
Warning: php_hostconnect: connect failed in "[путь]" on line 8
причём вот последний лог сервера:
[5] Thu 11Jan07 08:20:19 - (011917) Connected to 127.0.0.1 (Local address 127.0.0.1)
[5] Thu 11Jan07 08:20:19 - (011917) ANONYMOUS logged in, password: 3968
[5] Thu 11Jan07 08:20:19 - (011917) Closing connection for user ANONYMOUS (00:00:00 connected)
 

Unleashed

Новичок
скорее всего на сервере какой-то автоблокиратор.... меня выбило где-то на 5000 коннекте
 

AlekSilverstone

Новичок
Люди, если хотите помочь - пишите свою ОС и версию PHP!

У меня появилось сильно подозрение, что это ошибка в реализации WinSock. Кто-нить слышал про 4-ёх минутную паузу?
 

bakh

Абалдуй
AlekSilverstone
Win2003 EE SP1 / Serv-U FTP 6.1 / PHP 5.2.0
...
Про 4-хминутную паузуз слышу в первый раз...
 

AlekSilverstone

Новичок
Самое ужасное, что я так и не нашёл решения. :(
Сегодня потестил на другой машине - скрипт стабильно вылетает на 3974-ом коннекте. :/
 

bakh

Абалдуй
...а мы так и не узнали про твою ОС и твой ФТП-сервер...
 
Сверху