данные: URL php со случайными числами - PullRequest
1 голос
/ 01 мая 2020

Мне нужно написать функцию, которая возвращает дату: URL-изображение со случайным числом, я совершенно сбит с толку, вот мои попытки, подскажите, где go дальше

$function = new \Twig\TwigFunction('picture', function () {

    header("Content-Type: image/png");
    $im = @imagecreate(50, 50)
    or die("Невозможно создать поток изображения");
    $background_color = imagecolorallocate($im, 0, 0, 0);
    $text_color = imagecolorallocate($im, 233, 14, 91);
    $string = rand();
    imagestring($im, 1, 5, 5,  $string, $text_color);
    imagepng($im);
    imagedestroy($im);
    $img64 = base64_encode($im);
    return $img64;

});

$twig->addFunction($function);

1 Ответ

2 голосов
/ 01 мая 2020

Проблемы:

  1. header("Content-Type: image/png"); не имеет никакого смысла. Ваша функция возвращает простой текст, который даже не предназначен для возврата в браузер как есть, а вставлен внутри HTML. Избавьтесь от этой строки.

  2. @ в @imagecreate(50, 50) является оператором контроля ошибок . По умолчанию он просто скрывает полезные сообщения об ошибках от вас. Возможно, вы тоже этого не хотите.

  3. Вы определяете $background_color, но никогда не используете его. Вы можете подать его на imagefill() или, если хотите, чтобы он был черным, пропустить его полностью.

  4. imagepng($im) немедленно распечатает образ. Это плохо, когда вы хотите обработать и вернуть его. Вы можете захватить, например, с помощью функций управления выводом .

  5. base64_encode($im) триггеров:

    Предупреждение: base64_encode () ожидает, что параметр 1 будет be string, resource

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

  6. Нет необходимости imagedestroy(). Изображение является локальным по отношению к функции, об этом позаботится встроенный сборщик мусора.

  7. Не храните байты изображения во временных переменных без причины, это только увеличит потребление памяти.

Таким образом, вам необходимо понять, что ваш код не является черным ящиком, и убедиться, что каждая написанная вами строка имеет известную вам цель и используется, как объясняется на соответствующей странице руководства.

$im = imagecreate(50, 50)
    or die("Невозможно создать поток изображения");
$text_color = imagecolorallocate($im, 233, 14, 91);
$string = rand();
imagestring($im, 1, 5, 5,  $string, $text_color);
ob_start();
imagepng($im);
return base64_encode(ob_get_clean());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...