php 图片验证码生成代码

第一种方法:

首先在 index.php 页面

    function identity(){
         $this->load->view('index',$data);    
    }
    
    
    function codes(){
        if($_POST['code'] == $_SESSION['code']){
            echo 'ok';
        }else{
            echo 'no';
        }
     }
    
    function create_code(){
       session_start();
        //生成验证码图片
        ob_clean(); 
        //header("Content-type:image/png");
        //全数字
        $str="1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f";//要显示的字符,自己可以增加或删除
        $list=explode(",",$str);
        $r=count($list)-1;
        $laststr="";
        for($i=0;$i<4;$i++){
                $randnum=mt_rand(0,$r);
                $laststr .= $list[$randnum];//取出字符,组合成要显示的字符串
            }
        $_SESSION['code']=$laststr; //将字符串放入SESSION中
        //echo $laststr;
        $img=imagecreate(28,28);//生成图片
        $black=imagecolorallocate($img,0,0,0);  //  设置颜色
        $white=imagecolorallocate($img,255,255,255);
        $gray=imagecolorallocate($img,200,200,200);
        $red=imagecolorallocate($img,255,0,0);
        $cl = imagefill($img,0,0,$red);//给图片填充颜色
        
        //将验证法放入图片
        imagestring($img,4,10,8,$laststr,$black);//将验证码放到图片上
        for ($i=0;$i<8;$i++){
                $lineColor        = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
                imageline ($img,rand(0,$x),0,rand(0,$x),$y,$lineColor);
        }
        //干扰点
        for ($i=0;$i<250;$i++){
                imagesetpixel($img,rand(0,$x),rand(0,$y),$fontColor);
        }
        $aa = imagepng($img);
        $bb = imagedestroy($img);      
        //echo $aa;
    }

在视图页面 index.php

 <form action="/index/codes" method="post">
   <label for="yzmai" class="input-tips2">验证码:</label>
   <input type="text" name="code"  class="inputstyle2"  maxlength="10"  /><br/>
   <img id="code" src="/index/create_code" alt="看不清楚,换一张" style="cursor: pointer; vertical-align:middle;" onClick="create_code()"/>
   <button type="submit">提交</button>
 </form>
<script>
function create_code(){
    document.getElementById('code').src = '/index/create_code/'+Math.random()*10000;
}
</script>

可以去尝试下看看

第二种方法:

       header("content-type:image/png");
       ob_clean(); 
        $img=imagecreate(44,18);
        
        $bg=imagecolorallocate($img,245,245,245);//填充背景色
        imagefill($img,0,0,$bg);//本函数将图片坐标 (x,y) 所在的区域着色。参数 col 表示欲涂上的颜色。
        $vcode=" ";
        for($i=0;$i<4;$i++)
        {
         $font_c=imagecolorallocate($img,6,6,6);//文本颜色
         $num=rand(1,9);
         $vcode=$vcode.$num;
         imagestring($img,5,$i*10,1,$num,$font_c);//水平地画一行字符串
        }
        session_start();
        $_SESSION['vcode']=$vcode;
        imagepng($img); //imagepng — 以 PNG 格式将图像输出到浏览器或文件
        imagedestroy($img);//销毁图像

php字符串替换

str_ireplace() 和 str_replace() 函数

str_ireplace() 和 str_replace 使用新的字符串替换原来字符串中指定的特定字符串,str_replace 区分大小写,str_ireplace() 不区分大小写,两者语法相似。

str_replace(find,replace,string,count)

str_ireplace(find,replace,string,count)

参数描述
find必需。规定要查找的值。
replace必需。规定替换 find 中的值的值。
string必需。规定被搜索的字符串。
count可选。对替换数进行计数的变量。

<?php

header("Content-type:text/html;charset=utf-8");

$str = 'hello,world,Hello,world';

echo "原字符串:".$str."<br>";

$search = 'hello';

$replace = 'hi';

echo "<br>替换字符串:<br>";

echo str_replace($search, $replace, $str)."<br>";

echo str_ireplace($search, $replace, $str)."<br>";

?>

示例:

用js获取input的值,并用提示框显示出来

一、需求如下:

建立input输入框,设置其id为”study”,设置其值为”666″, 用js获取input的值,创建一个按钮叫”弹出”,点击”弹出”按钮,弹出input中的value的值。

二、思路:

(1)获取input输入框的value值
为input输入框设置id,name属性后,可以通过id或name来获取input的value值,这里使用id来获取input的value值

(2)创建”弹出”按钮
按钮的创建有多种,可以使用input,button标签等来创建,这里使用button标签

(3)使用js展示input中的value的值
可以为按钮设置onclick属性,并设定onclick对应的方法(这里创建了show这个方法),然后在show方法中使用alert方法来做提示信息,从而展示出input的value值

三、效果图:

点击”弹出”出现input中的value值

四、代码如下:

方案一、使用表单结合show方法

<html>
<head>

<title>弹出输入框的值</title>
<script type="text/javascript">
function show(){
 var a = myform.study.value; //使用id来获取input输入框的值
  alert(a);
};

</script>
</head>

<body>
<form name="myform">
  <input type="text" id="study" name="box"  value="666" />
   <button  onclick="show()">弹出</button>
</form>

</body>

</html>

除了使用id来获取input输入框的值,你也可以用name来获取input输入框的值,修改如下:

- var a = myform.study.value; 
+ var a = myform.box.value;

此外,你也可以使用input标签来创建按钮进行,例如将上面的按钮修改为:

- <button  onclick="show()">弹出</button>
+ <input type="button" onclick="show()" value="弹出" />

方案二、使用getElementId

<input id="study"  class="ob1" value="666" type="text">
<input type="button" class="intro" id="btn" value="弹出">
<script>
  document.getElementById("btn").onclick = function(){
    var v=document.getElementById("study").value;
    alert(v);
  }

除了使用getElementById获取指定的内容(这里是获取”弹出”按钮,然后为按钮绑定o’clock事件),还可以使用以下方法:

  • getElementsByTagName 通过标签来获取内容
  • getElementsByClassName 通过类名来获取内容

注意:getElementsByClassName() 在 Internet Explorer 5,6,7,8 中无效。

五、参考资料

1.JavaScript如何获得input元素value值
2.HTML DOM 访问

作者:稻草人_b788
链接:https://www.jianshu.com/p/ce9db183159d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

根据表中的时间戳字段统计每天数据的数量

我们在存数据的时候,经常会存下数据被写入或更新的时间备用。
今天遇到一个需要统计每天插入了多少数据的需求
实现的SQL 如下:

select FROM_UNIXTIME(create_time/1000,’%Y-%m-%d’)as date,COUNT(*)
FROM table_1
where 1
GROUP BY date;
1
2
3
4
create_time/1000 是因为我存的时间戳是精确到毫秒的,如果你存的时间戳精确到秒,则不需要除以1000
————————————————
版权声明:本文为CSDN博主「刘宇LY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28766327/article/details/79390629

java实现网络编程之 UDP多线程在线聊天(超详细)

这个涉及到多线程
发送端:

package chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class TalkSend implements Runnable{

DatagramSocket socket = null;
BufferedReader reader = null;

private int fromPort;
private String toIp;
private int toPort;


public TalkSend(int fromPort, String toIp, int toPort) {
    this.fromPort = fromPort;
    this.toIp = toIp;
    this.toPort = toPort;
    try {
        socket = new DatagramSocket(fromPort);
        reader = new BufferedReader(new InputStreamReader(System.in));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Override
public void run() {
    while(true) {
        String data = null;
        try {
            data = reader.readLine();
            byte[] datas = data.getBytes();
            DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp, this.toPort));
            socket.send(packet);

            if(data.equals("bye")) {
                break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    socket.close();
}

}

接收端:

package chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable {
DatagramSocket socket = null;
private String msgFrom;
private int port;

public TalkReceive(int port, String msgFrom) {
    this.port = port;
    this.msgFrom = msgFrom;
    try {
        socket = new DatagramSocket(port);
    } catch (SocketException e) {
        e.printStackTrace();
    }
}

@Override
public void run() {
    try {
        while(true) {
            //准备接收包裹
            byte[] container = new byte[1024];
            DatagramPacket packet = new DatagramPacket(container, 0, container.length);
            socket.receive(packet); //阻塞式接收包裹

            //断开连接
            byte[] data = packet.getData();
            String receiveData = new String(data, 0, data.length);
            System.out.println(msgFrom + ":" + receiveData);
            if(receiveData.equals("bye")) {
                break;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    socket.close();
}

}

测试代码:
学生端:

package chat;

public class TalkStudent {
public static void main(String[] args) {
//开启两个线程
new Thread(new TalkSend(7777, “localhost”, 9999)).start();
new Thread(new TalkReceive(8888, “老师”)).start();
}
}


老师端:

package chat;

public class TalkTeacher {
public static void main(String[] args) {
new Thread(new TalkSend(555, “localhost”, 8888)).start();
new Thread(new TalkReceive(9999, “学生”)).start();
}
}


测试结果:

————————————————
版权声明:本文为CSDN博主「太阳石笑笑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45806131/article/details/109089984

Linux系统下安装jdk及环境配置(两种方法)

第一种方式一键安装(yum安装)默认安装在/usr/lib/jvm

第二种手动安装,需要自己去Oracle官网下载需要的jdk版本,然后解压并配置环境,整个过程其实很简单。

一、yum一键安装

查看:

复制代码
1.查看是否已安装JDK

# yum list installed |grep java

2.卸载CentOS系统Java环境

# yum -y remove java-1.8.0-openjdk*   *表示卸载所有openjdk相关文件输入 

# yum -y remove tzdata-java.noarch       卸载tzdata-java  

3.查看JDK软件包版本

# yum -y list java*      或者使用# yum searchjava | grep -i --color JDK 

查看JDK软件包列表
复制代码

下载:

复制代码
安装JDK
# yum install java-1.8.0-openjdk*  安装java1.8.0所有程序 
yum install -y java-1.8.0-openjdk-devel.x86_64
注意:输入确认(y)直到控制台返回Complete安装成功

查看java版本信息
# java -version

输入javac    java命令后显示帮助信息就算是安装成功了

使用yum安装环境变量自动就配好了
复制代码

 二、手动安装

1.去Oracle官网下载需要安装的jdk版本,我这里用的是jdk-8u221-linux-x64.tar.gz
2.将该压缩包放到/usr/local/java目录下(java需要自己创建,名字自己随意取,见名知意),然后解压该压缩包,输入如下指令:

tar zxvf jdk-8u221-linux-x64.tar.gz 

3.配置环境变量,输入以下指令进行配置:

复制代码
vi /etc/profile

在文件尾部添加如下信息:
复制代码

JAVA_HOME=/usr/local/java/jdk1.8.0_221
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

复制代码

注意:JAVA_HOME=/usr/local/java/jdk1.8.0_221 此处等号右边的是自己的jdk实际解压目录。如果不是该目录则需要改成自己的实际目录,其他不变。

实际情况如下图所示:

复制代码

 4.编辑完之后,保存并退出,然后输入以下指令,刷新环境配置使其生效:

source /etc/profile

PHP解压缩zip文件

1、使用PHP执行文件解压缩zip文件,前提条件,一定要确定服务器开启了zip拓展

2、封装的方法如下:

实例代码

 1 <?php 
 2 /**
 3  * 压缩文件
 4  * @param array $files 待压缩文件 array('d:/test/1.txt','d:/test/2.jpg');【文件地址为绝对路径】
 5  * @param string $filePath 输出文件路径 【绝对文件地址】 如 d:/test/new.zip
 6  * @return string|bool
 7  */
 8 function zip($files, $filePath) {
 9     //检查参数
10     if (empty($files) || empty($filePath)) {
11         return false;
12     }
13 
14     //压缩文件
15     $zip = new ZipArchive();
16     $zip->open($filePath, ZipArchive::CREATE);
17     foreach ($files as $key => $file) {
18         //检查文件是否存在
19         if (!file_exists($file)) {
20             return false;
21         }
22         $zip->addFile($file, basename($file));
23     }
24     $zip->close();
25 
26     return true;
27 }
28 
29 /**
30  * zip解压方法
31  * @param string $filePath 压缩包所在地址 【绝对文件地址】d:/test/123.zip
32  * @param string $path 解压路径 【绝对文件目录路径】d:/test
33  * @return bool
34  */
35 function unzip($filePath, $path) {
36     if (empty($path) || empty($filePath)) {
37         return false;
38     }
39 
40     $zip = new ZipArchive();
41 
42     if ($zip->open($filePath) === true) {
43         $zip->extractTo($path);
44         $zip->close();
45         return true;
46     } else {
47         return false;
48     }
49 }
50 ?>
复制代码