$_GET возвращает неверно сформированное числовое значение, но стандартная переменная этого не делает?

#php #get #well-formed

Вопрос:

Я использую переменную для определения цвета в изображении PHP. Есть какой-нибудь код.

 <?php
header ("Content-type: image/png");
ini_set('display_errors', 0);

$width = 36;
$height = 24;
$handle = imagecreatetruecolor ($width, $height) or die ("Cannot Create image"); //image size

$black = 0x1c1c1c;           //Black
$hp = ImageColorAllocate ($handle, $_GET["red1"], $_GET["green1"], $_GET["blue1"]);
$mp = $_GET["c1"];

ImageFilledRectangle($handle, 0, 0, 12, 24, $black);
ImageFilledRectangle($handle, 13, 0, 24, 24, $hp);
ImageFilledRectangle($handle, 25, 0, 36, 24, $mp);

ImagePng ($handle);
imagedestroy ($handle);
?>
 

Это создает пример изображения с библиотекой GD, которая должна иметь возможность задавать два пользовательских цвета для среднего и правого прямоугольников, при этом левый прямоугольник всегда имеет цвет 0x1c1c1c, который не является черным. Средний прямоугольник работает нормально — в конце концов, вы просто передаете три числа команде ImageColorAllocate, — но правый прямоугольник выдает ошибку с «неправильным числовым значением». Почему это происходит, когда $black отформатирован таким же образом? Есть ли способ для меня использовать одну переменную для определения цвета вместо трех?

[Ср 31 марта 15:15:02.838650 2021] [php7:уведомление] [pid 10089] [клиент 45.74.102.92:62479] Примечание PHP: Неверно сформированное числовое значение, встречающееся в /var/www/html/test.php на линии 15

Комментарии:

1. Вы проверяете, действительно ли вам передается $_GET["c1"]; параметр? Это может быть полезным дополнением к коду. Также проверьте, является ли он цифровым, а не буквенным или буквенно-цифровым

2. Не передавайте неразделенные значения в функции. $hp = ImageColorAllocate ($handle, $_GET["red1"], $_GET["green1"], $_GET["blue1"]);

3. Похоже, я неправильно это написал — правый прямоугольник, переменная $mp, выдает ошибку, когда я ввожу «0x645367» или любое другое шестнадцатеричное число, идентичное переменной $black.

4. "0x645367" и 0x645367 не имеют одинаковой ценности. $_GET будет содержать строки, введенные пользователем, а не исходный код PHP, который будет оцениваться с помощью встроенного анализатора чисел.

Ответ №1:

Просмотр онлайн-руководства по PHP привел меня к функции hexdec (). Вместо $mp = $_GET["c1"]; этого я могу использовать $mp = hexdec($_GET["c1"]); , и это работает как сон. Ответил на мой собственный глупый вопрос, хех. Спасибо за подсказку, Квентин.