No Image

Php загрузка файла по ссылке

СОДЕРЖАНИЕ
391 просмотров
10 марта 2020

Я использую Google Мои карты. Проблема заключается в том, что Google накладывает множество ограничений на использование своего API, что затрудняет автоматическое добавление или получение данных с карты.

У меня есть прямая ссылка на скачивание этого файла карты, который при нажатии загружает файл KML на любое устройство.

Мне нужен код на PHP, чтобы открыть эту ссылку, скачать файл KML и автоматически сохранить его на моем сервере.

я видел это в другом вопросе, но у меня это не сработало:

Я думаю, что проблема заключается в том, что моя ссылка не ссылается на файл (не заканчивается на .zip или других расширениях файла)
Это пример для моей ссылки: Вот

Решение

Ты можешь использовать file_put_contents а также file_get_contents функции, вот так:

Порой бывает необходимо загрузить тот или иной файл на сервер не с локального компьютера, а с другого сервера по ссылке. Понадобиться это может в разных ситуациях, например, при загрузке видео с Youtube, как это реализовано на Savefrom.net. Скрипт простой, и в большинстве ситуаций будет работать исправно, однако, нужно обратить внимание, что в настройках php.ini опция allow_url_fopen должна быть установлена в true.

// загрука файла по url адресу
function downloadFileByURL($url, $whereToSave) <

// файл-источник для чтения
// rb – бинарное чтение, так как файл может быть и не текстовым
$source = fopen($url, "rb");

// если есть такой файл
if ($source) <

// файл-приемник на сервере
// wb – бинарная запись
$dest = fopen ($whereToSave, "wb");

// если удалось создать файл-приемник на сервере
if ($dest)<

// пока есть данные из файл-источника
while(!feof($source)) <

// считываем их блоками по 4Кб
fwrite($dest, fread( $source, 4096 ));
>

Читайте также:  Swype клавиатура для андроид

// закрываем файл-приемник
fclose($dest);
>

// закрываем файл-источник
fclose($source);
>
>

Конечно этот скрипт не идеален, так как в некоторых случаях может понадобиться отправить вместе с запросом на загрузку, еще и какие-то http заголовки, но, для простых целей он вполне пригоден.

Вот так просто, можно организовать загрузку файлов на сервер по url в PHP.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    CURL является отличным инструментом, для подключения к удаленным сайтам, что упрощает возможность отправки форм, загрузку целых страниц, или, как в нашем случае, загрузку файлов.

    CURL является отличным инструментом, для подключения к удаленным сайтам, что упрощает возможность отправки форм, загрузку целых страниц, или, как в нашем случае, загрузку файлов. В этом сниппете я покажу вам, как вы можете скачать файл прямо на диск с помощью CURL.

    Примечание: чтобы упростить пример, в этой статье мы не будем выполнять проверку CURL запросов на ошибки. Вы же всегда должны делать это, функция curl_getinfo() главное подспорье в этом деле.

    Вы можете прочитать ответ и записать его на диск, как показано в следующем листинге. $path место на сервере, где вы хотите, чтобы записать файл.

    Читайте также:  Geforce experience экспериментальные функции проверка обновлений

    $ch = curl_init( $url );

    curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);

    $data = curl_exec( $ch );

    file_put_contents ( $path , $data );

    Существует, однако, проблема с этим кодом. В данном примере, файл пишеться на диск не напрямую, а сперва целиком загружается в оперативную память. Я думаю здесь понятно, что можно запросто умереться в предел памяти для исполнения скрипта и схлопотать fatal error. Так что данный способ годиться если вы скачиваете маленькие файлы, мегабайт до 20-30.

    Примечание: Даже если ваш лимит памяти установлен очень высоко, грузить сервер лишний раз тоже не хорошо.

    В таком случае опять возложим всю черную работу на CURL и заставим его писать данные прямо в файловый поток. Сделать это можно с помощью директивы CURLOPT_FILE.

    Для этого вы должны сначала создать новый указатель файла с помощью fореn(). Далее мы передаем этот указатель на файл для выполнения запроса. Наконец, мы закрываем файл.

    $fp = fopen ( $path , ‘w’ );

    $ch = curl_init( $url );

    curl_setopt( $ch , CURLOPT_FILE, $fp );

    $data = curl_exec( $ch );

    Вот и все, что нужно сделать, теперь можно не бояться о превышение лимита памяти для исполнения скрипта.

    Комментировать
    391 просмотров
    Комментариев нет, будьте первым кто его оставит

    Это интересно
    Adblock
    detector