Поврежденное изображение при автоматической загрузке с использованием url с curl в php

Я хочу загружать изображения со своего сервера, ничего не нажимая - когда мой php-файл запускается, он загружается автоматически, но проблема в том, что файл поврежден. Однако, когда я вставляю URL-адрес прямо в браузер и загружаю его, он работает отлично. Так почему моя реализация ниже не работает? Есть идеи по этому поводу?

Вот мой код:

$url_to_image = 'https://hideserver.com/axul-display/assets/ads/';
$ch = curl_init($url_to_image);
$my_save_dir = 'assets/ads/';
$filename = basename($url_to_image.'ads-id-4.gif');
$complete_save_loc = $my_save_dir . $filename;
$fp = fopen($complete_save_loc, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
curl_exec($ch);
curl_close($ch);
fclose($fp);

Я попытался подключиться из Норвегии, Швеции и Франции, сервер на hideserver.com (52.73.179.54) отклоняет TCP-соединения через порт 443 (порт httpS по умолчанию). может ли кто-нибудь еще связаться с этим сервером?

hanshenrik 21.11.2018 11:26

@hanshenrik извините, я скрываю сервер, потому что это частный сервер, могу я отправить вам сервер в личку? Спасибо

Qatest123 21.11.2018 23:47

хорошо, включите CURLOPT_VERBOSE и опубликуйте подробный журнал. запустите $out=fopen("php://output","wb");curl_setopt_array($ch,array(‌​CURLOPT_VERBOSE=>1,C‌​URLOPT_STDERR=>$out)‌​); перед запуском curl_exec, что вы получите?

hanshenrik 21.11.2018 23:51

* Имя хоста server ***. Com был обнаружен в кеше DNS * Попытка 128.199. ***. *** ... * Подключен к серверу ***. Com (128.199. ***. ***) порт 80 ( # 0)> GET / axul-display / assets / ads / HTTP / 1.1 Хост: server ***. Com Принять: / <HTTP / 1.1 200 OK <Дата: среда, 21 ноября 2018 г. 22:49:17 GMT <Server : Apache / 2.4.29 (Ubuntu) <Vary: Accept-Encoding <Content-Length: 2854 <Content-Type: text / html; charset = UTF-8 <

Qatest123 22.11.2018 00:01

@hanshenrik, могу ли я получить вашу электронную почту, чтобы я мог отправить вам электронное письмо на сервер, спасибо

Qatest123 22.11.2018 00:02

конечно, моя электронная почта доступна на stackoverflow.com/users/1067003/hanshenrik?tab=profile

hanshenrik 22.11.2018 00:07

@henshenrik Я отправил вам приглашение на встречу, пожалуйста, посмотрите, спасибо.

Qatest123 22.11.2018 00:12

@henshenrik, пожалуйста, посмотрите вашу электронную почту Я уже отправил имя сервера

Qatest123 22.11.2018 00:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
578
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Со ссылкой на ответ размещенный на php - Как заставить скачивать файл?

Вместо вызова curl используйте заголовки для загрузки файла.

$file_name = 'ads-id-4.gif';
$file_url = 'https://hideserver.com/axul-display/assets/ads/' . 
$file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
exit;

OP не пытается заставить php выводить изображение на стандартный вывод, OP пытается заставить php-скрипт сохранить изображение в системе, в которой работает php.

hanshenrik 21.11.2018 11:22
Ответ принят как подходящий

Всем привет, спасибо за вашу помощь, но я решил свою проблему вместо curl, я использовал этот очень простой код.

$ image_url = 'http: // сервер ***. com / axul-display / assets / ads / ads-id-4.gif';

file_put_contents('assets/ads/ads-id-4.gif', file_get_contents($image_url));

Всем большое спасибо!

Это сработало для меня ..

 $ch = curl_init($url);
    if (in_array($type, ['jpg', 'jpeg','png'])) {
       curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYSTATUS, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 400);
    curl_setopt($ch, CURLOPT_FILE, fopen($temp_path, 'wb'));
    curl_exec($ch);
    $info = curl_getinfo($ch);

Другие вопросы по теме