PHP - file_get_contents для файла JPEG, возвращающего значение false, когда URL работает в браузере - PullRequest
1 голос
/ 29 апреля 2020

Я пытался file_get_contents файл jpeg быть c Мне нужно было загрузить его на мой сайт Magento через его REST API.

$REMOTE_FILE_URL = "https://www.natures-collection.com/wp-content/uploads/2020/04/a389964a-dfba-48ad-81ba-09e639bc436a-450x450.jpg";

    $ax = file_get_contents($REMOTE_FILE_URL);
    $aa = base64_encode($ax);

    d($alld['image'], $REMOTE_FILE_URL, $ax, $aa);

    $basename = basename($alld['image']);
    $ext = explode(".",$basename)[1];

    if ($ext === "jpg") {

      $ext = "jpeg";
    }

    d($basename,$ext);
    $jso_aa = <<<EOT
    {
      "entry": {
        "media_type": "image",
        "label": "I am an image!",
        "types": [
          "image",
          "small_image",
            "thumbnail",
            "swatch"
        ],
        "content": {
            "base64_encoded_data": "$aa",
            "type": "image/{$ext}",
            "name": "{$basename}"

        },
        "file": "{$basename}"
      }
    }
EOT;
d($jso_aa);

    $reqq0 = <<<EOT
    curl -X POST "http://167.179.118.154/index.php/rest/default/V1/products/{$sku}/media" -H "Authorization: Bearer joax1huoa36e0b80thbx6zynmmrthnlq" -H "Content-Type:application/json" -d '{$jso_aa}'
EOT;

d () - это пользовательская функция, которая действует как var_dump ( ).

Однако функции file_get_contents возвращают значение false. Когда я сбрасываю $ ax, я вижу FALSE.

Это происходит для этого URL, который отлично работает в браузере.

Другой URL, подобный следующему, не имеет этой проблемы: https://www.natures-collection.com/wp-content/uploads/2020/04/ea588379-eb43-4adb-a9d9-a3475ce7b2be.jpg

Почему это так и как я могу это решить?

1 Ответ

0 голосов
/ 29 апреля 2020

PHP выдает уведомление, что file_get_contents () отклоняется из-за запрещенного доступа 403, поэтому я предположил, что пользовательский агент является проблемой.

Демо: https://repl.it/@kallefrombosnia / filegetcon

$REMOTE_FILE_URL = "https://www.natures-collection.com/wp-content/uploads/2020/04/a389964a-dfba-48ad-81ba-09e639bc436a-450x450.jpg";

$options = [
    'http' => [
        'method' => 'GET',
        'header' => 'User-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3219.0 Safari/537.36',   
    ]
]; 

$context = stream_context_create($options);

$ax = file_get_contents($REMOTE_FILE_URL, false, $context);

// just test that it actually works fine
file_put_contents('test.jpg', $ax);

// below is your code
...