以下PHP代码适用于PHP 5.2.17及更低版本(例如' 7YNd5fG')。但是对于比PHP 5.2.17更高的版本,它显示的所有7个字符都相同,如NNNNNNN'或者' yyyyyyy'。
请让我知道我应该更改或添加以下代码,以便它在高于PHP 5.2.17的版本中正常工作?
下面的函数会生成带有特定字符的随机文本字符串
session_start();
header("Content-type: image/png");
$str_code=get_image_text(7);
$_SESSION["image_secret_code"] = $str_code;
$im = imagecreatefrompng("../images/unique_image.png");
$white = imagecolorallocate($im,0,0,0);
$font = "arial.ttf";
imagettftext($im, 18, 0, 3, 22, $white, $font, $str_code);
imagepng($im);
imagedestroy($im);
get_unique_image.php
<img src="./get_unique_image.php" border="0">
最后在页面上使用下面的代码。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int sum = 0;
int min = 0;
int max = 0;
int temp[25];
int i = 0;
float avg = 0;
int main () {
srand( (unsigned) time(NULL) );
for (i=0; i < 25; i++) {
get_value(i);
sum += temp[i];
}
calc_results(temp[25]);
return 0;
};
int get_value(void) {
return((rand() % (100 - 60 + 1)) + 60);
};
int calc_results(int temp_number[], int number) {
avg = ((sum)/(25));
max = temp[0];
for(i=1;i<25;i++){
if(max<temp[i])
max=temp[i];
};
min =temp[0];
for(i=1;i<25;i++){
if(min>temp[i])
min=temp[i];
};
printf("Temperature Conditions on October 9, 2015 : \n");
printf("Time of day Temperature in degrees F \n");
printf(" 0 %d\n",temp[0]);
printf(" 1 %d\n",temp[1]);
printf(" 2 %d\n",temp[2]);
printf(" 3 %d\n",temp[3]);
printf(" 4 %d\n",temp[4]);
printf(" 5 %d\n",temp[5]);
printf(" 6 %d\n",temp[6]);
printf(" 7 %d\n",temp[7]);
printf(" 8 %d\n",temp[8]);
printf(" 9 %d\n",temp[9]);
printf(" 10 %d\n",temp[10]);
printf(" 11 %d\n",temp[11]);
printf(" 12 %d\n",temp[12]);
printf(" 13 %d\n",temp[13]);
printf(" 14 %d\n",temp[14]);
printf(" 15 %d\n",temp[15]);
printf(" 16 %d\n",temp[16]);
printf(" 17 %d\n",temp[17]);
printf(" 18 %d\n",temp[18]);
printf(" 19 %d\n",temp[19]);
printf(" 20 %d\n",temp[20]);
printf(" 21 %d\n",temp[21]);
printf(" 22 %d\n",temp[22]);
printf(" 23 %d\n",temp[23]);
printf(" 24 %d\n",temp[24]);
printf(" 25 %d\n",temp[25]);
printf("Maximum Temperature for the day: %d Degrees F\n", max);
printf("Minimum Temperature for the day: %d Degrees F\n", min);
printf("Average Temperature for the day: %.1f Degrees F\n", avg);
};
答案 0 :(得分:0)
您遇到该问题的PHP版本是什么?它在5.5.9,5.6.19和7.0.4上对我很好。
由于$ret_char = mt_rand(2,3);
,你永远不会得到小写字符;我不知道这是否是故意的。混合使用小写字符(即使验证不区分大小写)可能会使得验证码更难以让机器人根据许多因素进行解决。
在任何情况下,我都重写了这个函数,所以它更短一些,并使用mt_rand()
从集合中的整个字符列表中选择一个随机值。
function get_image_text($length)
{
// create a string abcdefg....XYZ
$chars = implode('', array_map('chr',
array_merge(range(97,122), range(48, 57), range(65, 90)))
);
$ret_string = "";
for($i = 0; $i < $length; ++$i)
{
// pick a random offset from character string
$ret_string .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $ret_string;
}