Мне нужно загрузить файл резервной копии с одного веб-сервера на другой, используя curl. Но у меня есть некоторые ограничения:
- У меня нет доступа к shell и / или ftp ни к одному из серверов.
- Это решение должно работать, даже если домен не указанисходный сервер
Вот пример того, о чем я говорю:
давайте предположим, что 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;
}