Загрузите изображение с помощью метода file_get_contents () в php - PullRequest
0 голосов
/ 18 июня 2020

У меня есть ссылка на изображение в сети, но я хочу загрузить изображение в формате jpg. с использованием метода file_get_contents, file_put_contents в php.

$url = "https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A";
$content = @file_get_contents($url);

$img = 'assets/rkgia_image/f.jpg';
$id = file_put_contents($img, $content);

Этот код не работает.

Ответы [ 7 ]

1 голос
/ 01 июля 2020

Хотя без правильного сообщения об ошибке в PHP сложно ответить. Но я постараюсь подвести вас к какому-нибудь решению. Вероятно, это сработает.

  1. Сначала убедитесь, что у вас есть соответствующие права доступа к файлу PHP и той директории, где вы сохраняете файл изображения JPEG. Просто попробуйте что-то вроде chmod -R 0777 ./ в вашем текущем каталоге, если вы используете ОС Linux или Ma c. Для windows пользователей, просто щелкните правой кнопкой мыши свой файл / папку и go для свойств, выберите вкладку безопасности и отредактируйте желаемое разрешение (в этом случае возможно чтение и запись).

  2. Также убедитесь, что там, где у вас есть файл PHP, вы точно создали каталоги. Я имею ввиду assets/rkgia_image/. Вы создали каталог assets в той же папке, что и ваш файл PHP. Затем внутри вы создали rkgia_image. Также убедитесь, что у них есть соответствующее разрешение на запись туда контента. Просто попробуйте что-нибудь вроде chmod -R 0777 ./ в вашем текущем каталоге. Если вы хотите, чтобы ваша программа создавала каталог автоматически, то ваш код, вероятно, будет выглядеть следующим образом.

    <?php
     $url = "https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A";
     $content = @file_get_contents($url);
     $path = 'assets/rkgia_image/';
     if (!file_exists($path)) {
       mkdir($path,0777, true);
     }
     $filename='f.jpg';
     $img=$path.$filename;
     $id = file_put_contents($img, $content);
    ?>
    
  3. Другой причиной ошибки может быть php.ini на вашем сервере отключает поведение file_get_contents. Откройте php.ini и измените allow_url_fopen=1, чтобы включить поведение по умолчанию file_get_contents.

  4. Если ничего из вышеперечисленного не работает, запустите следующую программу и сообщите нам о ошибка.

    <?php
     ini_set('display_errors', 1);
     ini_set('display_startup_errors', 1);
     error_reporting(E_ALL);
     $url = "https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A";
     $content = file_get_contents($url);
     $path = 'assets/rkgia_image/';
     if (!file_exists($path)) {
        mkdir($path,0777, true);
     }
     $filename='f.jpg';
     $img=$path.$filename;
     $id = file_put_contents($img, $content);
    ?>
    
0 голосов
/ 03 июля 2020

Сначала убедитесь, что в вашем php .ini файле allow_url_fopen установлено на true.

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

$url = 'https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A';
$img = 'assets/rkgia_image/f.jpg';
$id = file_put_contents($img, file_get_contents($url));

, если allow_url_fopen не установлено на true, вы также можете использовать cURL

$ch = curl_init('https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A');
$fp = fopen('assets/rkgia_image/f.jpg', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
0 голосов
/ 30 июня 2020

В вашем коде нет ничего плохого, кроме пути, просто исправьте свой путь, и код будет работать нормально. И не используйте @.

Примечание: Использование @ - это очень плохая практика программирования, так как она не заставляет ошибки исчезать, а просто скрывает их и делает отладку намного хуже, так как мы не видим, что на самом деле не так с нашим кодом.

0 голосов
/ 30 июня 2020

Кажется, ваш код работает, но проблема может быть множественной.

Прежде всего, я рекомендую вам не использовать оператор @, потому что вы не увидите в себе ошибки код. Для вас и для нас очень важно знать ошибки триггеров, чтобы увидеть потенциальную проблему.

Затем, если вы по-прежнему не видите ошибку, попробуйте активировать ее, добавив следующее с начала файла:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Другой способ включить ошибки - включить эти параметры непосредственно в вашем файле php .ini.

Теперь, когда ваш код выглядит функциональным, это возможная ошибка, которая может быть причиной ваших проблем:

  • Невозможно установить sh соединение по HTTP из-за проблемы root сертификатов на вашем сервере
  • Возможно, каталог «assets» или «rkgia_image» 'не существует, или и то, и другое
  • Невозможно записать в каталог из-за проблемы с разрешением
  • [или другое]
0 голосов
/ 30 июня 2020

Ваш код отлично работает на моей стороне, за исключением одной проблемы, которую я обнаружил: если assets/rkgia_image не существует, то он дает пробел. Вы можете попробовать с кодом ниже.

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$url = "https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A";
$content = file_get_contents($url);

$img = 'assets/rkgia_image/f.jpg';

$id = file_put_contents($img, $content);

echo $id;die;
0 голосов
/ 28 июня 2020

Вы можете попробовать cURL, если allow_url_fopen равно false

$ch = curl_init('https://v360.in/V360Images.aspx?cid=Excellent&d=F99-26A');
$fp = fopen('assets/rkgia_image/f.jpg', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_exec($ch);
curl_close($ch);
fclose($fp);
0 голосов
/ 28 июня 2020
<?php

$url = "https://images.pexels.com/photos/2584041/pexels-photo-2584041.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260";
$content = @file_get_contents($url);

$img = 'f.jpg';
$id = file_put_contents($img, $content);

это работает, чтобы убедиться, что URL-адрес, по которому вы пытаетесь загрузить, не был защищен включением или место, где вы храните полученный файл, имело права записи (см. Cmoding .. Я предлагаю вам установить cmod на 774, проверяя YouTube вы можете получить больше, чем это https://youtu.be/xdim-xpGdRA?t=53)

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