Задать вопрос
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    @scutums Автор вопроса
    Кроме того, еще правки в данном файле php
    Найти:
    $this->keystring .= $allowed_symbols{mt_rand(0, strlen($allowed_symbols) - 1)};

    Заменить на:
    $this->keystring .= $allowed_symbols[mt_rand(0, strlen($allowed_symbols) - 1)];

    Найти:
    $font_metrics[$alphabet{$symbol}] = array( 'start' => $i );

    Заменить на:
    $font_metrics[$alphabet[$symbol]] = array( 'start' => $i );

    Найти:
    $font_metrics[$alphabet{$symbol}]['end'] = $i;
    Заменить на:
    $font_metrics[$alphabet[$symbol]]['end'] = $i;
    Найти:
    $m = $font_metrics[$this->keystring{$i}];
    Заменить на:
    $m = $font_metrics[$this->keystring[$i]];
    Написано
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    @scutums Автор вопроса
    Дмитрий,
    spoiler
    <?php
    # KCAPTCHA PROJECT VERSION 1.2.4
    
    # Automatic test to tell computers and humans apart
    
    # Copyright by Kruglov Sergei, 2006
    # www.captcha.ru, www.kruglov.ru
    
    # System requirements: PHP 4.0.6+ w/ GD
    
    # KCAPTCHA is a free software. You can freely use it for building own site or software.
    # If you use this software as a part of own sofware, you must leave copyright notices intact or add KCAPTCHA copyright notices to own.
    # As a default configuration, KCAPTCHA has a small credits text at bottom of CAPTCHA image.
    # You can remove it, but I would be pleased if you left it. ;)
    
    # See kcaptcha_config.php for customizing
    session_start();
    $captcha = new KCAPTCHA();
    $_SESSION['captcha'] = $captcha->getKeyString();
    
    class KCAPTCHA {
    
    	// generates keystring and image
    	public function __construct() {
    
    		$alphabet = "0123456789abcdefghijklmnopqrstuvwxyz"; # do not change without changing font files!
    		$allowed_symbols = "23456789abcdeghkmnpqsuvxyz"; #alphabet without similar symbols (o=0, 1=l, i=j, t=f)
    		$length = 8;
    		$width = 200;
    		$height = 54;
    		$fluctuation_amplitude = 2;
    		$no_spaces = true;
    		$show_credits = false; # set to false to remove credits line. Credits adds 12 pixels to image height
    		$foreground_color = array( mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100) );
    		$background_color = array( mt_rand(230, 255), mt_rand(230, 255), mt_rand(230, 255) );
    		$jpeg_quality = 90;
    		$font_file = "im/images/TimesNewRoman.png";
    		$alphabet_length = strlen($alphabet);
    
    		while (true) {
    			// generating random keystring
    			while (true) {
    				$this->keystring = '';
    				for ($i = 0; $i < $length; $i++) {
    					$this->keystring .= $allowed_symbols[mt_rand(0, strlen($allowed_symbols) - 1)];
    				}
    				if (!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp/', $this->keystring)) {
    					break;
    				}
    			}
    
    			$font = imagecreatefrompng($font_file);
    			imagealphablending($font, true);
    			$fontfile_width = imagesx($font);
    			$fontfile_height = imagesy($font) - 1;
    			$font_metrics = array();
    			$symbol = 0;
    			$reading_symbol = false;
    
    			// loading font
    			for ($i = 0; $i < $fontfile_width && $symbol < $alphabet_length; $i++) {
    
    				$transparent = ( imagecolorat($font, $i, 0) >> 24 ) == 127;
    
    				if (!$reading_symbol && !$transparent) {
    					$font_metrics[$alphabet[$symbol]] = array( 'start' => $i );
    					$reading_symbol = true;
    					continue;
    				}
    
    				if ($reading_symbol && $transparent) {
    					$font_metrics[$alphabet[$symbol]]['end'] = $i;
    					$reading_symbol = false;
    					$symbol++;
    					continue;
    				}
    			}
    
    			$img = imagecreatetruecolor($width, $height);
    			imagealphablending($img, true);
    			$white = imagecolorallocate($img, 255, 255, 255);
    			$black = imagecolorallocate($img, 0, 0, 0);
    
    			imagefilledrectangle($img, 0, 0, $width - 1, $height - 1, $white);
    
    			// draw text
    			$x = 1;
    			for ($i = 0; $i < $length; $i++) {
    				$m = $font_metrics[$this->keystring[$i]];
    
    				$y = mt_rand(-$fluctuation_amplitude, $fluctuation_amplitude) + ( $height - $fontfile_height ) / 2;
    
    				if ($no_spaces) {
    					$shift = 0;
    					if ($i > 0) {
    						$shift = 1000;
    						for ($sy = 7; $sy < $fontfile_height - 20; $sy += 1) {
    							for ($sx = $m['start'] - 1; $sx < $m['end']; $sx += 1) {
    								$rgb = imagecolorat($font, $sx, $sy);
    								$opacity = $rgb >> 24;
    								if ($opacity < 127) {
    									$left = $sx - $m['start'] + $x;
    									$py = $sy + $y;
    									if ($py > $height) {
    										break;
    									}
    									for ($px = min($left, $width - 1); $px > $left - 12 && $px >= 0; $px -= 1) {
    										$color = imagecolorat($img, $px, $py) & 0xff;
    										if ($color + $opacity < 190) {
    											if ($shift > $left - $px) {
    												$shift = $left - $px;
    											}
    											break;
    										}
    									}
    									break;
    								}
    							}
    						}
    						if ($shift == 1000) {
    							$shift = mt_rand(4, 6);
    						}
    
    					}
    				}
    				else {
    					$shift = 1;
    				}
    				imagecopy($img, $font, $x - $shift, $y, $m['start'], 1, $m['end'] - $m['start'], $fontfile_height);
    				//imagecopyresampled($img,$font,$x-$shift,$y,$m['start'],1, ($m['end']-$m['start'])/*1.5*/, $height, $m['end']-$m['start'], $fontfile_height);
    				$x += mt_rand(0, 15) + ( $m['end'] - $m['start'] - $shift );//*1.2;
    			}
    			if ($x < $width - 10) {
    				break;
    			} // fit in canvas
    
    		}
    		for ($i = 0; $i <= 3; $i++) {
    			$yl = mt_rand(15, 45);
    			imageline($img, 0, $yl, $x - $shift, $yl, imagecolorallocate($img, 0, 0, 0));
    		}
    
    		$center = $x / 2;
    
    		// credits. To remove, see configuration file
    
    		$img2 = imagecreatetruecolor($width, $height);
    
    		// periods
    		$rand1 = mt_rand(750000, 1200000) / 10000000;
    		$rand2 = mt_rand(750000, 1200000) / 10000000;
    		$rand3 = mt_rand(750000, 1200000) / 10000000;
    		$rand4 = mt_rand(750000, 1200000) / 10000000;
    		// phases
    		$rand5 = mt_rand(0, 3141592) / 500000;
    		$rand6 = mt_rand(0, 3141592) / 500000;
    		$rand7 = mt_rand(0, 3141592) / 500000;
    		$rand8 = mt_rand(0, 3141592) / 500000;
    		// amplitudes
    		$rand9 = mt_rand(330, 420) / 110;
    		$rand10 = mt_rand(330, 450) / 110;
    
    		//wave distortion
    		for ($x = 0; $x < $width; $x++) {
    			for ($y = 0; $y < $height; $y++) {
    				$sx = $x + ( sin($x * $rand1 + $rand5) + sin($y * $rand3 + $rand6) ) * $rand9 - $width / 2 + $center + 1;
    				$sy = $y + ( sin($x * $rand2 + $rand7) + sin($y * $rand4 + $rand8) ) * $rand10;
    
    				if ($sx < 0 || $sy < 0 || $sx >= $width - 1 || $sy >= $height - 1) {
    					$color = 255;
    					$color_x = 255;
    					$color_y = 255;
    					$color_xy = 255;
    				}
    				else {
    					$color = imagecolorat($img, $sx, $sy) & 0xFF;
    					$color_x = imagecolorat($img, $sx + 1, $sy) & 0xFF;
    					$color_y = imagecolorat($img, $sx, $sy + 1) & 0xFF;
    					$color_xy = imagecolorat($img, $sx + 1, $sy + 1) & 0xFF;
    				}
    
    				if ($color == 0 && $color_x == 0 && $color_y == 0 && $color_xy == 0) {
    					$newred = $foreground_color[0];
    					$newgreen = $foreground_color[1];
    					$newblue = $foreground_color[2];
    				}
    				else {
    					if ($color == 255 && $color_x == 255 && $color_y == 255 && $color_xy == 255) {
    						$newred = $background_color[0];
    						$newgreen = $background_color[1];
    						$newblue = $background_color[2];
    					}
    					else {
    						$frsx = $sx - floor($sx);
    						$frsy = $sy - floor($sy);
    						$frsx1 = 1 - $frsx;
    						$frsy1 = 1 - $frsy;
    
    						$newcolor = ( $color * $frsx1 * $frsy1 + $color_x * $frsx * $frsy1 + $color_y * $frsx1 * $frsy + $color_xy * $frsx * $frsy );
    
    						if ($newcolor > 255) {
    							$newcolor = 255;
    						}
    						$newcolor = $newcolor / 255;
    						$newcolor0 = 1 - $newcolor;
    
    						$newred = $newcolor0 * $foreground_color[0] + $newcolor * $background_color[0];
    						$newgreen = $newcolor0 * $foreground_color[1] + $newcolor * $background_color[1];
    						$newblue = $newcolor0 * $foreground_color[2] + $newcolor * $background_color[2];
    					}
    				}
    
    				imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
    			}
    		}
    
    
    		if (function_exists("imagejpeg")) {
    			header("Content-Type: image/jpeg");
    			imagejpeg($img2, null, $jpeg_quality);
    		}
    		else {
    			if (function_exists("imagegif")) {
    				header("Content-Type: image/gif");
    				imagegif($img2);
    			}
    			else {
    				if (function_exists("imagepng")) {
    					header("Content-Type: image/x-png");
    					imagepng($img2);
    				}
    			}
    		}
    	}
    
    	// returns keystring
    	function getKeyString() {
    		return $this->keystring;
    	}
    }
    
    ?>
    Написано
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    @scutums Автор вопроса
    Ипатьев, после подстановки var_dump() deprecated этой строки с imagecopy () как бы исчезает, но появляется ругань:
    object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(1) float(8.5) int(92) int(1) int(19) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(17) float(9.5) int(92) int(1) int(19) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(37) float(8.5) int(47) int(1) int(17) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(59) float(8.5) int(667) int(1) int(20) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(82) float(8.5) int(184) int(1) int(18) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(105) float(9.5) int(586) int(1) int(20) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(130) float(7.5) int(360) int(1) int(18) int(35) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(155) float(11.5) int(439) int(1) int(21) int(35) ����JFIF``��;CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 90 ��C     ��C    ��6�"�� ���}!1AQa"q2���#B��R��$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������� ���w!1AQaq"2�B���� #3R�br� $4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�C��+�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (�����6�_C���"�i�7� ����v����NJ*�cb��C�����sj�3�V���sD��*H����#�&��O���b���M��k����-�E����Xi�3��'�wsR�0����:y~[o�!c���o������+ȼ+�Nx[�_j�l5v�6��*�߽����%ד�x�vn�f������x��_��x�H��v���*�+�'vv�������z�>�S�Q�nI'���ߢ�(:�*���Z�67��0�Y[D�Osq �8�PK;1�TI'�ݵe�+��~8xSJ�WR���״�-��+��[�UgV�|��X�Ѱf�TT�]�~j�,k�V����j:��IR�Hִ+۩U��pC���0Uc�����.��5�z_�=֊�-g���|?r�j>���7{ۍj�J�f��dx��oy{�cm��R@�[����_I�Q���C��v�B�ض��ݩBd�䀣l��"3�2���3'ʦ��w=:���|A���I�T�u+=_L�w�{a:O�X�mu$0 ��A�B��4��QE(�|A�~�� /�4�}�w���o���v�1��n\���\��jxS�����ws����lN��"c{��������Gg��ۀ�=LEW�V�=v������� N��ú��[�t'���yHc>^�upѳ�}�(H�RFk��X�V�^���-?��#��-�j#�W�lk����H6�P�� )\c��Z����Q!^W2�����b�m�21>a,Y@�V'��q�\�S�����2�;u(��K��*/���\۷�0��یPc8Щk ���_����>9���6��;Qe�)̷s�]�F��i�..��b�6yb����V���C����p���;^�}����2��5д[�r�����J讂H&+$lU��ug�+���8jҜޝ������N�����Ú��>�*��V��i6�fڊ�($�p=�9=�N�|��n.��k�g��!����_��l���x�x��P��?�V�V���+����8��i�i��cD+��9Gi9e8�e�"��w��Zf���k�kW�)%K "�+۩U��pBZI*�ڊI��S�ѧ�I�z9�W04_��A���;�c]���e�.l���d�L�g����L�K��¤�ݻ�wo�_���/ڿ��ޑ��m�G�U�V�v����ݍ͌��}k>��'���$�<1�=F����Oq6����,l��^��a�$��8�5���#�p��q��[�s����P���Hr�n`�ʔ�� Aof�HF�;:p�����������b�Q�����I��ʯ�:g�m�h$ּK��CL��{\Z��)۶V��.�@#���n܏��2�|�U���zF���T�v�h�L� �KF��G��V$d��o�S����8��*m4�e�Hm������W�b�H�w�8�,Y�1�Ox�L���W�47����֣���]�7if�����I~�k��T�J��l�,QE@QEQEQEW!�|��ui�Mk���9�����M��I�B��d$�@'��E(Fj�I���;�}QAaEPEPEP!�����h5M��587yW�M�G�J��TeI�H�]}PDa+A%���QE�Q@Q@Q@��
    Написано
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    @scutums Автор вопроса
    Дмитрий, я так и делал по каждой операнде и толку 0
    Написано
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    @scutums Автор вопроса
    Да, и, собственно, как быть с
    imagecolorat()
    и
    imagesetpixel()
    ?
    Написано
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    @scutums Автор вопроса
    1) Если разбить построчно (а это 129 строка), то выдает ошибку именно на 129 строке снова, т.е.
    imagecopy (
    2) Если заменить imagecopy ( на var_dump (
    , убрав минусы и заменив их на запятые, то ошибка исчезает, но в php 8.3 и выше идет ругань также на другое в 43 строке, где устарело создание динамического свойства:
    while (true) {
    			// generating random keystring
    			while (true) {
    				$this->keystring = '';
    				for ($i = 0; $i < $length; $i++) {
    					$this->keystring .= $allowed_symbols[mt_rand(0, strlen($allowed_symbols) - 1)];
    				}
    				if (!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp/', $this->keystring)) {
    					break;
    				}
    			}

    в частности, на подобное:
    $this->keystring
    , т.е. ошибка меняется так:
    Deprecated: Creation of dynamic property KCAPTCHA::$keystring is deprecated in C:\OSPanel\home\bbb.ru\forums\regimage.php on line 43
    object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(1) int(0) float(10.5) int(47) int(1) int(64) int(47) int(35) object(GdImage)#3 (0) { } int(29) float(19.5) object(GdImage)#3 (0) { } int(29) float(20.5) object(GdImage)#3 (0) { } int(29) float(21.5) object(GdImage)#3 (0) { } int(30) float(22.5) object(GdImage)#3 (0) { } int(30) float(23.5) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(29) int(0) float(9.5) int(667) int(1) int(687) int(667) int(35) object(GdImage)#3 (0) { } int(57) float(18.5) object(GdImage)#3 (0) { } int(57) float(19.5) object(GdImage)#3 (0) { } int(56) float(20.5) object(GdImage)#3 (0) { } int(56) float(21.5) object(GdImage)#3 (0) { } int(56) float(22.5) object(GdImage)#3 (0) { } int(55) float(23.5) object(GdImage)#3 (0) { } int(55) float(24.5) object(GdImage)#3 (0) { } int(55) float(25.5) object(GdImage)#3 (0) { } object(GdImage)#2 (0) { } int(55) int(0) float(11.5) int(116) int(1) int(134) int(116) int(35) object(GdImage)#3 (0) { } int(89) float(17.5) object(GdImage)#3 (0) { } int(89) float(18.5) object(GdImage)#3 (0) { } int(88) float(19.5) object(GdImage)#3 (0) { } int(88) float(20.5) object(GdImage)#3 (0) { } int(88) float(21.5) object(GdImage)#........
    Написано