Некоторые файлы не загружаются полностью при использовании curl - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно загрузить файл резервной копии с одного веб-сервера на другой, используя curl. Но у меня есть некоторые ограничения:

  1. У меня нет доступа к shell и / или ftp ни к одному из серверов.
  2. Это решение должно работать, даже если домен не указанисходный сервер

Вот пример того, о чем я говорю:

давайте предположим, что example.com существует на сервере с IP-адресом: 1.1.1.1, а сам домен указанна другой IP-адрес (скажем, 2.2.2.2).

Я знаю, что на сервере 1.1.1.1 в папке example.com есть какой-то архив

Я создал некоторый тестовый код, который, кажется,работает для файлов, занимающих несколько сотен КБ, но не работает для файлов, которые занимают ~ 600 МБ, и я не могу обнаружить проблему.

В этом случае curl загружает файл в ОЗУ или считывает данные порциямикак функция копирования? Если он сначала загружает данные в оперативную память, есть ли какие-то решения для точного выполнения этого wget: "wget ​​--header = 'Host: example.com' http://1.1.1.1/a.tar"?

function get_file( $domain, $path_to_remote_file, $ip, $f_out )
{
    $url = "http://" . $domain . "/" . $path_to_remote_file;
    $handle = fopen($f_out, "w");
    $ch = curl_init( $url );

    curl_setopt( $ch, 
           CURLOPT_RESOLVE, 
           array (
                    $domain . ":80:" . $ip,
                    "www." . $domain . ":80:" . $ip
        ) 
    );

    curl_setopt( $ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
    curl_setopt( $ch, CURLOPT_FILE, $handle );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 300);

    $result = curl_exec( $ch );
    curl_close( $ch );
    fclose( $handle );

    echo $result;
}

1 Ответ

0 голосов
/ 10 ноября 2019

Ваша проблема не с curl, wget, dns или размером файла. Возможно, это время вашего скрипта PHP.

Вы можете попробовать включить журналы PHP и проверить, почему ваш скрипт останавливается. Затем вы можете попробовать использовать set_time_limit(0). Будьте осторожны, если вы используете общий хостинг, возможно, администраторы предупреждают вас о времени.

Хорошее решение вашей проблемы: используйте работу работника или cron. Например, в plesk и cpanel есть режимы для запуска PHP с php-cli, без каких-либо запросов http.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...