Я использую 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 ));
>
// закрываем файл-приемник
fclose($dest);
>
// закрываем файл-источник
fclose($source);
>
>
Конечно этот скрипт не идеален, так как в некоторых случаях может понадобиться отправить вместе с запросом на загрузку, еще и какие-то http заголовки, но, для простых целей он вполне пригоден.
Вот так просто, можно организовать загрузку файлов на сервер по url в PHP.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.
CURL является отличным инструментом, для подключения к удаленным сайтам, что упрощает возможность отправки форм, загрузку целых страниц, или, как в нашем случае, загрузку файлов.
CURL является отличным инструментом, для подключения к удаленным сайтам, что упрощает возможность отправки форм, загрузку целых страниц, или, как в нашем случае, загрузку файлов. В этом сниппете я покажу вам, как вы можете скачать файл прямо на диск с помощью CURL.
Примечание: чтобы упростить пример, в этой статье мы не будем выполнять проверку CURL запросов на ошибки. Вы же всегда должны делать это, функция curl_getinfo() главное подспорье в этом деле.
Вы можете прочитать ответ и записать его на диск, как показано в следующем листинге. $path место на сервере, где вы хотите, чтобы записать файл.
$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 );
Вот и все, что нужно сделать, теперь можно не бояться о превышение лимита памяти для исполнения скрипта.