zoukankan      html  css  js  c++  java
  • WebNotes(PHP、css、JavaScript等)

    1. 数据库编码格式

    gb-2312仅支持简体中文,GBK支持简体、繁体中文,utf-8通用程度最高。

    2. HTTP请求方法

    get方法请求时,会将传输的数据跟在链接后“显式地”发送,受限于链接长度(一般512B或1024B);

    post方法请求,数据传输过程更隐秘,数据的长度不受限。

    3. Cookie和Session(数据在多个脚本间的共享方式)

    Cookie存储于客户端,以键值对存储,可以使用Javascript脚本访问,但受限于客户端浏览器权限,若禁止Cookie,则服务器的脚本无法访问。

    Session存储于服务器,以键值对存储,在不同脚本间共享。

    4. 数据库操作

    mysql扩展自 PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除,而使用mysqli扩展代替。

    1)数据库连接:

    函数式编程风格:$mysqli=mysqli_connect("example.com", "user", "password", "database");
    面向对象风格:$mysqli = new mysqli("example.com", "user", "password", "database");

    2)SQL查询:

    $res=$mysqli->query('select * from info_table');

    3)根据返回结果的行号输出结果:

    mysqli的属性num_rows,根据行号检索结果中的内容:

    $res->data_seek($row_no);

    遍历所有行的完整代码:

    for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
    $res->data_seek($row_no);
    $row = $res->fetch_assoc();
    echo " id = " . $row['id'] . ' name='.$row['name']. "<br>";
    }

    取出某一行($row_no)的代码:

        $res->data_seek($row_no);
    $row = $res->fetch_assoc();
    echo " id = " . $row['id'] . ' name='.$row['name']. "<br>";

    4)使用“类似迭代器”取结果,并存入数组:

    $res_arr=$res->fetch_assoc()

    此时$res_arr中存有第一行结果,再执行一次上面一句,则取下一行的结果,并存入数组,通过键值对可以访问。

    5.在CSS文件中引入其他CSS文件

    @import "../main.css";

    6.在链接中调用JavaScript函数

    <a href='javascript:function(parameter)'> text </a>

    7.实现删除确认

    与6配合使用,在删除的链接中调用下面的函数:

    <script>
    function doDel(id) //删除确认函数
    {
    if(confirm('r u sure?'))
    {
    window.location='del_op.php?id_message='+id;
    }
    }
    </script>

    8.设备显示自适应的代码方式

    ①百分比;②vw(width占比)  vh(height占比)

    eg. 20%  5vw  10vh

    9.样式控制字体

    style="font-size: 1vw; font-weight: bold"

    10.设置网站的浏览器标识

    在网页中使用Favicon最简单的办法便是将制作好的图标文件命名为Favicon.ico,然后将其上传到网站的根目录即可。但亲测服务器似乎不支持,于是手动写代码:

    <link rel=”icon” href=”/dir/favicon.ico” mce_href=”/dir/favicon.ico” type=”image/x-icon”>

    <link rel=”shortcut icon” href=”/dir/favicon.ico” mce_href=”/dir/favicon.ico” type=”image/x-icon”>

    11.padding样式属性

    style="padding:1px 2px 3px 4px;"

    内边距:上1  右2  下3  左4

    12.网站计数器

    ①通过session

    <?php
    if(!isset($_SESSION)){ session_start(); }                     //初始化SESSION变量
    $f_open = fopen("./count.txt","r+");       //打开指定的文件
    $count = fgets($f_open);                   //读取文件中的数据
    if($_SESSION[temp]==""){                   //判断$_SESSION[temp]==""的值是否为空
         $count = $count + 1;                  //将变量$count的值加1
         rewind($f_open);                      //打开指定的文件
         fwrite($f_open,$count);              //向文件中写入新的数据
         fclose($f_open);                    //关闭文本文件     
         $_SESSION[temp]=1;                 //$_SESSION[temp]的值不为空,给$_SESSION[temp]赋一个值1
    }
    ?>

    ②通过cookie

    <?php
    $f_open = fopen("count.txt","r+");                     //打开指定的文件
    $count = fgets($f_open);                               //读取文件中的数据
    if(empty($_COOKIE['cookie_name'])){                    //判断Cookie是否存在
    setcookie("cookie_name",value,time()+1800);           //如果不存在,则创建Cookie
    $count = $count + 1;                                   //将变量$count的值加1
    rewind($f_open);                                      //打开指定的文件
    fwrite($f_open,$count);                                //向文件中写入新的数据
    fclose($f_open);                                       //关闭文件
    }
    ?>

     13. 禁用ip访问服务器

    (详细参考:https://linux.cn/article-4904-1.html)

    在Linux中,可以很简单地用netfilter/iptables框架禁止IP地址:

    1. $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP

    如果你想要完全屏蔽一个IP地址段,你可以用下面的命令很简单地做到:

    (我使用这条命令,1.1.2.0/24 表明子网掩码为前三段,若准确禁止某个ip,则24改成32)

    1. $ sudo iptables -A INPUT -s 1.1.2.0/24 -p TCP -j DROP

    然而,当你有1000个独立IP地址,且不带CIDR(无类别域间路由)前缀,你该怎么做?你要有1000条iptable规则!这显然这并不适于大规模屏蔽。

    1. $ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP
    2. $ sudo iptables -A INPUT -s 2.2.2.2 -p TCP -j DROP
    3. $ sudo iptables -A INPUT -s 3.3.3.3 -p TCP -j DROP
    4. . . . .

    14.PHP获取访问者的ip

    <?php
    function getIp()
    {
    $ip=false;
    if(!empty($_SERVER["HTTP_CLIENT_IP"])){
    $ip = $_SERVER["HTTP_CLIENT_IP"];
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
    if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
    for ($i = 0; $i < count($ips); $i++) {
    if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
    $ip = $ips[$i];
    break;
    }
    }
    }
    return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
    }
    ?>

    15. PHP异常处理

    try{
    ...;
    }catch (Exception $e){
    print $e->getMessage();
    exit();
    }

    16.时间戳与日期、时间

    ①时间戳

    时间戳是指自Unix纪元(1970年00:00:00)起到当前经过的秒数,故单位是秒。

    在PHP中,直接使用time()函数即可返回时间戳。

    ②日期、时间

    时间戳不够直观,才有了date()函数,用以直观地按照指定格式输出日期和时间。

    格式控制:

    • Y:年
    • m:月
    • d:日
    • H:带首位零的24小时制时
    • h:带首位零的12小时制时
    • i:由于m(inute)已经被m(onth)占用,所以取第二个字母i,代表分
    • s:带首位零秒
    • a:午前午后(am或pm)

    函数格式:string date ( string $format [, int $timestamp = time() ] )

    eg. date ("Y-m-d H:i:s", time());

     第二个参数可以直接给定某个时间戳,从而将其转换为指定格式。

     17.使用Pear提供的Mail类通过SMTP服务器发送邮件

    1. 在服务器上安装Pear提供的Mail类,其依赖于Net/SMTP.php和Mail/mime.php,故安装三个:
      pear install Mail
      pear install Mail_Mime
      pear install Net_SMTP
    2. 编写发送邮件的PHP脚本:
    <?php 
    // Pear Mail 扩展 
    require_once('Mail.php'); 
    require_once('Mail/mime.php'); 
    require_once('Net/SMTP.php'); 
        
    $smtpinfo = array(); 
    $smtpinfo["host"] = "smtp.163.com";//SMTP服务器 
    $smtpinfo["port"] = "25"; //SMTP服务器端口 
    $smtpinfo["username"] = "username@163.com"; //发件人邮箱 
    $smtpinfo["password"] = "password";//发件人邮箱密码 
    $smtpinfo["timeout"] = 10;//网络超时时间,秒 
    $smtpinfo["auth"] = true;//登录验证 
    //$smtpinfo["debug"] = true;//调试模式 
    // 收件人列表 
    $mailAddr = array('receiver@163.com'); 
    // 发件人显示信息 
    $from = "Name <username@163.com>"; 
    // 收件人显示信息 
    $to = implode(',',$mailAddr); 
    // 邮件标题 
    $subject = "这是一封测试邮件"; 
    // 邮件正文 
    $content = "<h3>随便写点什么</h3>"; 
    // 邮件正文类型,格式和编码 
    $contentType = "text/html; charset=utf-8"; 
    //换行符号 Linux: 
     Windows: 
     
    $crlf = "
    "; 
    $mime = new Mail_mime($crlf); 
    $mime->setHTMLBody($content); 
    $param['text_charset'] = 'utf-8'; 
    $param['html_charset'] = 'utf-8'; 
    $param['head_charset'] = 'utf-8'; 
    $body = $mime->get($param);  
    $headers = array(); 
    $headers["From"] = $from; 
    $headers["To"] = $to; 
    $headers["Subject"] = $subject; 
    $headers["Content-Type"] = $contentType; 
    $headers = $mime->headers($headers);  
    $smtp =& Mail::factory("smtp", $smtpinfo); 
    $mail = $smtp->send($mailAddr, $headers, $body); 
    $smtp->disconnect(); 
    if (PEAR::isError($mail)) { 
      //发送失败 
      echo 'Email sending failed: ' . $mail->getMessage()."
    "; 
    } 
    else{ 
      //发送成功 
      echo "success!
    "; 
    }

    这段代码是转自网络的内容,在实测时存在问题,花了半天时间解决。

    首先,目前所有的邮件服务器都要求使用SSL连接(smtp发送邮件端口号463或587),故不可使用其他端口。而且,密码并非邮箱密码,必须在邮箱中设置开启POP/SMTP服务,开启后会给一个授权码,在程序中连接服务器的时候,使用授权码代替密码。

    其次,Pear自己的官方文档中,未提及Mail::factory()第二个参数$smtpinfo中的$smtpinfo['auth']元素实质,只简单地提了这里填写Boolean类型,可是实测发现,这里要填写认证方式,例如我尝试了$smtpinfo['auth']="PLAIN"之后就成功连接了smtp.qq.com,并成功发送了邮件。

    故最重要的两点:端口要选择SSL端口并开启SMPT服务后使用授权码;给定认证方式。

  • 相关阅读:
    java static关键字的四种用法
    修改Intellij IDEA模板注解@author变量user内容
    iIDEA: 运行Scala代码右键没有Run选项
    idea 无法创建Scala class 选项解决办法汇总
    scala之idea下如何新建scala工程
    scala之windows环境安装与配置
    @RestController注解
    @component的作用详细介绍
    springboot 日期参数前后台转换问题
    MySQL数据库硬件选择
  • 原文地址:https://www.cnblogs.com/hizhaolei/p/9401670.html
Copyright © 2011-2022 走看看