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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка в капче

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
VadiKO
Отправлено: 03 Августа, 2016 - 15:36:27
Post Id


Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Есть скрипт капчи, вроде бы работает, но с нюансами. В настройке выставлено отображать 5 символов, но бывает надо перезагрузить 5 а то и более раз что бы отобразились все 5 символов, до этого может отобразить 3 символа, 4 а то и 2...

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

Собственно сам скрипт:

PHP:
скопировать код в буфер обмена
  1. <?PHP session_start();
  2.  
  3.  $width = 137;                  //Ширина изображения
  4.  $height = 40;                  //Высота изображения
  5.  $font_size = 14;                       //Размер шрифта
  6.  $let_amount = 5;               //Количество символов, которые нужно набрать
  7.  $fon_let_amount = 3;          //Количество символов, которые находятся на фоне
  8.  $path_fonts = 'fonts/';        //Путь к шрифтам
  9.  
  10.  
  11.  $letters = array('0','8','1','2','3','4','5','6','7','9');
  12.  $colors = array('10','30','50','70','90','110','130','150','170','190','210');
  13.  
  14.  $src = imagecreatetruecolor($width,$height);
  15.  $fon = imagecolorallocate($src,255,255,255);
  16.  imagefill($src,0,0,$fon);
  17.  
  18.  $fonts = array();
  19.  $dir=opendir($path_fonts);
  20.  while($fontName = readdir($dir))
  21.  {
  22.    if($fontName != "." && $fontName != "..")
  23.    {
  24.      $fonts[] = $fontName;
  25.    }
  26.  }
  27.  closedir($dir);
  28.  
  29.  for($i=0;$i<$fon_let_amount;$i++)
  30.  {
  31.    $color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
  32.    $font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
  33.    $letter = $letters[rand(0,sizeof($letters)-1)];
  34.    $size = rand($font_size-2,$font_size+2);
  35.    imagettftext($src,$size,rand(0,45),rand($width*0.1,$width-$width*0.1),rand($height*0.2,$height),$color,$font,$letter);
  36.  }
  37.  
  38.  for($i=0;$i<$let_amount;$i++)
  39.  {
  40.    $color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],rand(20,40));
  41.    $font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
  42.    $letter = $letters[rand(0,sizeof($letters)-1)];
  43.    $size = rand($font_size*2.1-2,$font_size*2.1+2);
  44.    $x = ($i+1)*$font_size + rand(4,7);
  45.    $y = (($height*2)/3) + rand(0,5);
  46.    $cod[] = $letter;  
  47.    imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
  48.  }
  49.  
  50.  $_SESSION['secpic'] = implode('',$cod);
  51.  
  52.  header ("Content-type: image/gif");
  53.  imagegif($src);
  54. ?>


Помогите исправить ошибку пожалуйста. Не понял
(Добавление)
частично разобрался, в 8 строке дописал какой именно шрифт использовать:

PHP:
скопировать код в буфер обмена
  1. $path_fonts = 'fonts/verdana.ttf';


теперь каждый раз отображаются все символы, но вот при включение отображения ошибок РНР так и сталось - - невозможно отобразить поскольку файл содержит ошибки. А какие именно ошибки непонятно.
 
 Top
Viper
Отправлено: 03 Августа, 2016 - 16:54:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




VadiKO пишет:
невозможно отобразить поскольку файл содержит ошибки. А какие именно ошибки непонятно.
смотрите лог php. Если нет доступа, то сохраняете изображение с ошибкой и смотрите в akelpad или notepad++


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
VadiKO
Отправлено: 03 Августа, 2016 - 17:49:37
Post Id


Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Viper спасибо (жаль кнопка еще не работает), очень дельный совет!!! На ряду с одной проблемой, вылезла еще парочка багов, исправил. Закатив глазки

В общем в логе ругается, что не может открыть шрифт в скрипте:

CODE (htmlphp):
скопировать код в буфер обмена
  1. PHP Warning:  opendir(fonts/verdana.ttf): failed to open dir: Not a directory


ну и дальше по коду полезло: строка - 19, 20, 27 и дальше 32, 41...

Папка fonts, шрифт verdana.ttf там лежит, что скрипту не нравится не понятно. Нахмурился

Примечательно, что при отключенном отображение ошибок все работает на ура )) но ведь это не дело!!!
 
 Top
VadiKO
Отправлено: 03 Августа, 2016 - 22:16:38
Post Id


Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




В общем разобрался.

Параметр $path_fonts оставляем в изначальном виде:



а в самой папке fonts оставляем лишь один шрифт и тогда все работает как часики без каких либо ошибок. Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB