Изображения PHP отображаются на веб-сайте как неработающие, хотя URL-адреса действительны (Discord.php) - PullRequest
0 голосов
/ 04 февраля 2019

это снова я.У меня есть фрагмент кода, который работал вчера, но теперь он больше не отображает изображения, они отображаются как «сломанные» в браузере (URL приводят к допустимым местоположениям, примеры будут приведены ниже).Цель этого кода состоит в том, чтобы запросить API-интерфейс Discord, который затем получает определенные фрагменты информации из снежинки и объединяет их в допустимые теги HTML, чтобы повторить, что это работало вчера, уже не так.

Вот какизображения отображаются в изображениях, которые я создал

Разбитые изображения

Теперь, если мы посмотрим на мой PHP (Некоторая информация отредактирована для безопасности)

<?php

$json_options = [
  "http" => [
    "method" => "GET",
    "header" => "Authorization: Bot API token"
  ]
];

$json_context = stream_context_create($json_options);

$json_get     = file_get_contents('https://discordapp.com/api/guilds/guildid/members?limit=1000', false, $json_context);

$json_decode  = json_decode($json_get, true);

$arr = array_filter($json_decode, function($e) {
  return in_array("role-id", $e['roles']);

});

foreach($arr as $e) {
  $uid = $e['user']['id']; $atar = $e['user']['avatar']; $uname = $e['user']['username']; $aimgurl = "https://cdn.discordapp.com/avatars/$uid/$atar.jpg";

  $count = $count + 1;
  echo "<img src='$aimgurl' alt=avatar$count' width='300' height='200' />";

}

?>

Примером вывода будет div вроде этого:

<img src="https://cdn.discordapp.com/avatars/118715548849668096/505efab4aa33f882bab9ae22347bafa1.jpg" width="300" height="200">

Теперь, если я вручную зайду по ссылке https://cdn.discordapp.com/avatars/118715548849668096/505efab4aa33f882bab9ae22347bafa1.jpg,, вы увидите, что изображение действительно, нодаже при отображении в пустом документе PHP (не на веб-странице) изображения по-прежнему ломаются.Сначала я подумал, что, возможно, был javascript или что-то противоречащее этому, но я уверен, что это не тот случай, и корень проблемы в том, как я стилизую изображение или пытаюсь заставить его отображаться.Однако я не знаю, как можно добавить изображение на мою веб-страницу с помощью PHP, не добавляя теги изображения, вероятно, есть способ сделать это.Но если у кого-нибудь из вас есть какие-либо советы, это будет оценено.Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019

Я не собираюсь отмечать свой пост как ответ, я чувствую, что это неуважительно, так как я ценю сообщество и предоставленную помощь.Бернхард дал мне направление, в котором я нуждался, чтобы исправить проблему, проблема заключалась в том, что мне нужно было кодировать изображение с помощью base64, прежде чем я смог его отобразить.Это странно, потому что вчера он работал на 100% нормально, поэтому странно, что сегодня этого не случилось.Мое лучшее предположение заключается в том, что я вчера обновил PHP 5.x до PHP 7.x.Извините, насколько я знаю, мой код, вероятно, не идеален или красив.Надеюсь, это поможет другому новому пользователю PHP.

    <?php

    $json_options = [
      "http" => [
        "method" => "GET",
        "header" => "Authorization: Bot bot-token-here" //add your token
      ]
    ];

    $json_context = stream_context_create($json_options);

    $json_get     = file_get_contents('https://discordapp.com/api/guilds/guild-id-here/members?limit=1000', false, $json_context); //replace guild id

    $json_decode  = json_decode($json_get, true);

    $arr = array_filter($json_decode, function($e) {
      return in_array("role-id-to-find", $e['roles']); //replace role id

    });

foreach($arr as $e) {
  $uid = $e['user']['id']; $atar = $e['user']['avatar']; $uname = $e['user']['username']; $aimgurl = "https://cdn.discordapp.com/avatars/$uid/$atar.png";
  $count = $count +1;
  $imageData = base64_encode(file_get_contents($aimgurl));
  echo 
  "<div class='usercontainer' style='position:relative;text-align:center;color:white;display:inline-block;font-size:10px;font-weight:900;z-index:1; overflow: auto;'>",
  "<style> .usercontainer img { width:60px;height:60px;border-radius:100%;padding:14px; } </style>",
  '<img src="data:image/png;base64,'.$imageData.'" onerror=this.style.display="none">',
  "<div class='user' style='position:absolute;top:50%;left:50%;transform: translate(-50%, -50%);font-family:'Raleway',Sans-Serif;'>",$uname,"</div>","</div>";
}
?>
...