Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблемы с созданием изображений с помощью PHP
Форумы портала PHP.SU » » Графика в PHP » Проблемы с созданием изображений с помощью PHP

Страниц (1): [1]
 

1. hivuld - 20 Декабря, 2017 - 14:01:13 - перейти к сообщению
Доброго времени суток!

Вот в чем суть проблемы:
Пытаюсь создать каптчу на PHP, но не получается, браузер пишет "Изображение не может быть показано, так как содержит ошибки".
Помогите решить проблему. Код ниже:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function randomString($length) {
  3.         $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
  4.         $string = '';
  5.         for($i = 0; $i < $length; $i++)
  6.                 $string .= $chars[rand(0, strlen($chars) - 1)];
  7.         return $string;
  8. }
  9.  
  10. class CaptchaModule {
  11.         static function generate() {
  12.                 $random = randomString(5);
  13.                 $time = time();
  14.                 $_SESSION['CAPTCHA_TIME'] = $time;
  15.                 $_SESSION['CAPTCHA_STRING'] = self::genMd5($random, $time);
  16.                 self::createImage($random);
  17.                 exit;
  18.         }
  19.        
  20.         static function genMd5($captcha, $time) {
  21.                 return md5(md5(md5($captcha) . md5($time . md5($captcha))) . md5(md5(md5($time) . $captcha) . md5($captcha)));
  22.         }
  23.        
  24.         static function reset() {
  25.                 $_SESSION['CAPTCHA_TIME'] = [];
  26.                 $_SESSION['CAPTCHA_STRING'] = [];
  27.         }
  28.        
  29.         private static function createImage($captcha) {
  30.                 $img = imagecreatetruecolor(170, 50);
  31.                 imagefilledrectangle($img, 0, 0, 170, 50, imagecolorallocate($img, 255, 255, 255));
  32.                 imagettftext($img, 40, 0, 15, 23, imagecolorallocate($img, 82, 82, 82), 'captcha.otf', $captcha);
  33.                 header('Expires: Wed, 1 Jan 1997 00:00:00 GMT');
  34.                 header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  35.                 header('Cache-Control: no-store, no-cache, must-revalidate');
  36.                 header('Cache-Control: post-check=0, pre-check=0', false);
  37.                 header('Pragma: no-cache');
  38.                 header('Content-type: image/gif');
  39.                 imagegif($img);
  40.                 imagedestroy($img);
  41.         }
  42. }
  43.  
  44. CaptchaModule::generate();
2. Строитель - 20 Декабря, 2017 - 14:58:43 - перейти к сообщению
hivuld, проверил на локалке, капча исправно генерируется. Скорее всего у вас нет файла со шрифтом "captcha.otf", или не правильно к нему указан путь.
3. hivuld - 21 Декабря, 2017 - 02:54:26 - перейти к сообщению
Строитель пишет:
hivuld, проверил на локалке, капча исправно генерируется. Скорее всего у вас нет файла со шрифтом "captcha.otf", или не правильно к нему указан путь.
Со шрифтом все нормально. Может проблема с загаловками?
4. Строитель - 21 Декабря, 2017 - 07:58:47 - перейти к сообщению
hivuld я же говорю, на локалке запускал этот код - проблем нет.
5. Sail - 21 Декабря, 2017 - 21:36:49 - перейти к сообщению
hivuld, просмотрите полученное изображение альтернативным способом.
Вот что об этой ошибке писали в далеком 2008 на forum.mozilla-russia.org:
топик.
6. hivuld - 24 Декабря, 2017 - 05:02:12 - перейти к сообщению
Строитель пишет:
hivuld я же говорю, на локалке запускал этот код - проблем нет.

Когда я закоментировал эту строку header('Content-Type: image/gif');, то никаких ошибок не было...
7. Строитель - 24 Декабря, 2017 - 18:22:53 - перейти к сообщению
hivuld пишет:
Когда я закоментировал эту строку header('Content-Type: image/gif');, то никаких ошибок не было...
Ну так этот заголовок сообщал браузеру о том, как надо обрабатывать этот документ (как картинку), и конечно же, если у вас в этом файле был ещё какой-то код, то скрипт справедливо генерировал ошибку. Попробуйте этот не много изменённый вариант :
Спойлер (Отобразить)
8. hivuld - 25 Декабря, 2017 - 17:36:32 - перейти к сообщению
Строитель пишет:
hivuld пишет:
Когда я закоментировал эту строку header('Content-Type: image/gif');, то никаких ошибок не было...
Ну так этот заголовок сообщал браузеру о том, как надо обрабатывать этот документ (как картинку), и конечно же, если у вас в этом файле был ещё какой-то код, то скрипт справедливо генерировал ошибку. Попробуйте этот не много изменённый вариант :
Спойлер (Отобразить)

Все работает, а как теперь сделать, чтобы можно было вывести в <img>?
9. Строитель - 25 Декабря, 2017 - 20:58:40 - перейти к сообщению
hivuld, а сейчас как по вашему выводится? О_о
10. hivuld - 26 Декабря, 2017 - 03:53:14 - перейти к сообщению
Строитель пишет:
hivuld, а сейчас как по вашему выводится? О_о

<img src="/captcha/generate" /> - Как сделать, чтобы изоббражение выводилось?
11. Строитель - 26 Декабря, 2017 - 06:56:24 - перейти к сообщению
hivuld пишет:
Как сделать, чтобы изоббражение выводилось?
Как обычно же, так же, как и в примере выше

 

Powered by ExBB FM 1.0 RC1