Взять изображение с php веб-страницы - PullRequest
0 голосов
/ 25 апреля 2020

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

Я также заметил, что, если я использую его, например, в Telegram, только тот, который работает, создает миниатюру.

<?php

header("Content-type: image/png");
$im     = imagecreatefrompng("image/orange.png");
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$font = 'font/font.ttf';
$string = "test";
imagettftext($im, 20, 0, 20, 230, $white, $font, $string);
imagepng($im);
imagedestroy($im);

?>

РЕДАКТИРОВАТЬ: Может ли это повлиять на тот факт, что для доступа к ссылке в VPS я использую IP-адрес машины, а для веб-хостинга я использую их домен?

Ответы [ 2 ]

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

вы должны быть в состоянии использовать этот код в своем VPS, используя IP.

выполните следующие вопросы / шаги, чтобы найти проблему:

  • У вас есть работает веб-сервер на вашем VPS? Вы можете проверить это, создав файл phpinfo () и попытавшись получить к нему доступ
  • Включено ли расширение gd в вашем php .ini? Вы можете проверить это снова с помощью phpinfo ()
  • , могут возникнуть другие ошибки, чтобы проверить это, вы можете использовать приведенный ниже код и посмотреть, показывает ли он какую-либо ошибку
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

header("Content-type: image/png");
$im     = imagecreatefrompng("image/orange.png");
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$font = 'font/font.ttf';
$string = "test";
imagettftext($im, 20, 0, 20, 230, $white, $font, $string);
imagepng($im);
imagedestroy($im);

может отсутствовать файл, например, orange.png или font.ttf

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

Есть каталог причин, по которым он может не работать - их слишком много, чтобы перечислять здесь. Но причина, по которой я пишу, заключается в том, что вы, похоже, не пытались самостоятельно диагностировать проблему. Может быть, вы не знаете, как.

Ваш первый шаг - убедиться, что ведение журнала работает так, как должно на вашей платформе. Напишите некоторый код с преднамеренными ошибками. Убедитесь, что вы видите эти ошибки в своих журналах (и только в вашем браузере для среды разработки). Если нет, выясните, почему.

Затем попробуйте запустить скрипт изображения - и посмотрите, не выдает ли он какие-либо ошибки.

Еще одно хорошее место для поиска проблем - инструменты для веб-разработчиков. Код состояния -200 должен быть красным, что с вашим кодом что-то не так.

Но вам также нужно научиться защищать код. Ваш код должен обнаруживать проблемы и реагировать на них разумно. Особенно, когда поток выполнения затрагивает вещи вне среды выполнения PHP (например, файлы).

<?php

$file="image/orange.png";
$im     = imagecreatefrompng($file);
if ($im===false) {
   bailout("failed to read $file as an image");
}
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$font = 'font/font.ttf';
$string = "test";
if (false===imagettftext($im, 20, 0, 20, 230, $white, $font, $string)) {
    bailout("imagettftext fail");
}
header("Content-type: image/png"); // note this moved here
if (false===imagepng($im)) {
    bailout("imagepng failed");
}
imagedestroy($im);
exit;

function bailout($msg)
{
   header("Content-type: text/html", True, 519); // yes I know its not html
   trigger_error($msg); // record specificreason in log
   print $msg;
   exit;
}

Существует множество других вещей, которые вы можете проверить в своем коде - но они в основном будут перехвачены / сообщены PHP.

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