За последние 24 часа нас посетили 99436 программистов и 6347 роботов. Сейчас ищут 1612 программистов ...

FTP

Тема в разделе "PHP для новичков", создана пользователем Артёмка, 24 апр 2016.

Метки:
  1. Артёмка

    Артёмка Новичок

    С нами с:
    24 апр 2016
    Сообщения:
    3
    Симпатии:
    0
    Пытаюсь скачать с ftp сервера (ftp://ftp.zakupki.gov.ru/fcs_regions/) файлы.
    Возникает ошибка PHP Warning: ftp_get(): Opening BINARY mode data connection for notification_Adygeja_Resp_2015101600_2015101700_003.xml.zip (12140 bytes). Причём файлики почти всегда разные.
    Подскажите в чём проблема?
    Вот код скрипта (запускаю через консоль под ubuntu):
    Код (Text):
    1. <?php
    2.     define("num_regions",86); //num of regions in RF
    3.     $ftp_server = "ftp.zakupki.gov.ru";
    4.     $ftp_user_name = $ftp_user_pass = "free";
    5.     $conn_id = ftp_connect($ftp_server) or die("Can not connect to $ftp_server");
    6.     if (!ftp_login($conn_id, $ftp_user_name, $ftp_user_pass)) {
    7.         echo "Can not login by $ftp_user_name\n";
    8.         exit(1);
    9.     }
    10.    
    11.     ftp_pasv($conn_id, true);
    12.     ftp_chdir($conn_id, "/fcs_regions/");
    13.     $regions = ftp_nlist($conn_id, ".");
    14.    
    15.     array_splice($regions, num_regions); //take only folders for regions. There's still some - what I've found (the old sample , probably)
    16.    
    17.     chdir('../../tmp/'); //folder for download
    18.     $zip = new ZipArchive;
    19.     foreach ($regions as $region) {
    20.        
    21.         ftp_chdir($conn_id, $region."/notifications/currMonth/");
    22.         mkdir($region); //create folder for region
    23.         chdir($region); //go to folder for region
    24.         echo $region."\n";    
    25.         $notifications = ftp_nlist($conn_id, ".");
    26.         foreach ($notifications as $notification) {
    27.             if(ftp_get($conn_id, $notification, $notification, FTP_BINARY)){
    28.                 $dir = substr($notification,0,strlen($notification)-7); //folder for contracts from downloaded file
    29.                 mkdir($dir);
    30.                 if ($zip->open($notification)) {
    31.                     $zip->extractTo($dir);
    32.                     $zip->close();
    33.                 } else {
    34.                     echo "Ошибка $notification";
    35.                 }      
    36.             }
    37.             unlink($notification); //delete downloaded file
    38.         }
    39.         echo "end $region\n";
    40.         chdir("../");
    41.         ftp_chdir($conn_id, "../../../");
    42.     }
    43.     ftp_close($conn_id);
    44. ?>
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Эта проблема возникает иногда или всегда? Попробуй качать через cURL.
     
  3. Артёмка

    Артёмка Новичок

    С нами с:
    24 апр 2016
    Сообщения:
    3
    Симпатии:
    0
    Проблема возникает только на рабочей машине. на домашнем вроде неплохо работает.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    В документации в комментариях к функции ftp_pasv пишут, что ошибки возникают в случайном порядке. Попробуй обновить версию PHP на рабочей машине, перейти на linux и cURL.
     
  5. Артёмка

    Артёмка Новичок

    С нами с:
    24 апр 2016
    Сообщения:
    3
    Симпатии:
    0
    php -v выдаёт такое:
    PHP 5.5.9-1ubuntu4.14 (cli) (built: Oct 28 2015 01:34:46)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

    как тут php обновить, не подскажите?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    @Артёмка руками собрать. или репозиторий сторонний использовать.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    @denis01 попробуй переписать на cURL или чтобы тех поддержка хостинга помогла разобраться
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    @denis01 мило сам с собой беседу ведешь
     
    mahmuzar и denis01 нравится это.