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.SU » » Вопросы новичков » Ошибка в капче

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

1. VadiKO - 03 Августа, 2016 - 15:36:27 - перейти к сообщению
Есть скрипт капчи, вроде бы работает, но с нюансами. В настройке выставлено отображать 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';


теперь каждый раз отображаются все символы, но вот при включение отображения ошибок РНР так и сталось - - невозможно отобразить поскольку файл содержит ошибки. А какие именно ошибки непонятно.
2. Viper - 03 Августа, 2016 - 16:54:51 - перейти к сообщению
VadiKO пишет:
невозможно отобразить поскольку файл содержит ошибки. А какие именно ошибки непонятно.
смотрите лог php. Если нет доступа, то сохраняете изображение с ошибкой и смотрите в akelpad или notepad++
3. VadiKO - 03 Августа, 2016 - 17:49:37 - перейти к сообщению
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 там лежит, что скрипту не нравится не понятно. Нахмурился

Примечательно, что при отключенном отображение ошибок все работает на ура )) но ведь это не дело!!!
4. VadiKO - 03 Августа, 2016 - 22:16:38 - перейти к сообщению
В общем разобрался.

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



а в самой папке fonts оставляем лишь один шрифт и тогда все работает как часики без каких либо ошибок. Улыбка

 

Powered by ExBB FM 1.0 RC1