html — изображения PHP, отображаемые на веб-сайте как поврежденные, даже если URL-адреса действительны (Discord.php)

это снова я. У меня есть фрагмент кода, который работал вчера, но теперь он больше не отображает изображения, они отображаются как «сломанные» в браузере (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, не добавляя теги изображения, вероятно, есть способ сделать это. Но если у кого-нибудь из вас есть какие-либо слова совета, это будет оценено. Спасибо.

0

Решение

Я не собираюсь отмечать свой пост как ответ, я чувствую, что это неуважительно, так как я ценю сообщество и оказанную помощь. Бернхард дал мне направление, в котором я нуждался, чтобы исправить проблему, проблема заключалась в том, что мне нужно было кодировать изображение с помощью 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>";
}
?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]