Starmerx Notebook

1,PHP语法

简介:

全称:PHP:Hypertext Preprocessor,即”PHP:超文本预处理器”,是一种通用开源脚本语言

1,Var_dump

返回变量的数据类型和值

2,htmlspecialchars()This is some bold text.

<?php $str = “This is some bold text.”; echo htmlspecialchars($str); ?>

结果:

This is some bold text.

3,foreach使用

foreach详细解说

4,stripslashes()函数

规定要检查的是字符串

返回的是已经剥离反斜杠的字符串

5,get_magic_quotes_gpc()函数

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“ ”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误

当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1
当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0

在magic_quotes_gpc=On的情况下,如果输入的数据有

单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。

6,explode()&implode()

explode将字符串打散为数组

explode(separator,string,limit)
- 支持对负数limit即从右至左数位次

implode把数组元素组合为字符串

implode(separator,array)

7,current()& end()

<?php
$people = array("Bill", "Steve", "Mark", "David");
echo current($people) . "<br>";
echo end($people);
?>

返回数组的当前元素和最后一个元素的值

  • 例子
<?php
$people = array("Bill", "Steve", "Mark", "David");

echo current($people) . "<br>"; // 当前元素是 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
echo current($people) . "<br>"; // 现在当前元素是 Steve
echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill
echo end($people) . "<br>"; // 最后一个元素是 David
echo prev($people) . "<br>"; // David 之前的元素是 Mark
echo current($people) . "<br>"; // 目前的当前元素是 Mark
echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve

print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
?>
运行实例
//result
Bill
Steve
Steve
Bill
David
Mark
Mark
Bill
Steve
Array ( [1] => Steve [value] => Steve [0] => 1 [key] => 1 )

8,in_array()

搜索数组中是否存在指定的值

<?php
$people = array("Bill", "Steve", "Mark", "David");

if (in_array("Mark", $people))
  {
  echo "匹配已找到";
  }
else
  {
  echo "匹配未找到";
  }
?>

格式:

in_array(search,array,type)

如果 search 参数是字符串且 type 参数被设置为 TRUE,则搜索区分大小写。

9,PHP错误处理

  • 基本的错误处理:使用die()
<?php
if(!file_exists("welcome.txt"))
{
    die("文件不存在");
}
else
{
    $file=fopen("welcome.txt","r");
}
?>
  • 自定义错误处理器
<?php
// 错误处理函数
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr";
}

// 设置错误处理函数
set_error_handler("customError");

// 触发错误
echo($test);
?>

结果:

Error: [8] Undefined variable: test
  • 触发错误

脚本中用户输入数据的位置,当用户的输入无效时触发错误是很有用的。在 PHP 中,这个任务由 trigger_error() 函数完成

<?php
$test=2;
if ($test>1)
{
    trigger_error("变量值必须小于等于 1");
}
?>
<?php
// 错误处理函数
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "脚本结束";
    die();
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
    trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

结果:

Error: [512] 变量值必须小于等于 1
已通知网站管理员

10,PHP异常处理

异常用于在指定的错误发生时改变脚本的正常流程。

例子:

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
    if($number>1)
    {
        throw new Exception("变量值必须小于等于 1");
    }
        return true;
}
    
// 在 try 块 触发异常
try
{
    checkNum(2);
    // 如果抛出异常,以下文本不会输出
    echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
    echo 'Message: ' .$e->getMessage();
}
?>

结果:

Message: 变量值必须小于等于 1

自定义异常:

<?php
class customException extends Exception
{
    public function errorMessage()
    {
        // 错误信息
        $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
        .': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
        return $errorMsg;
    }
}
 
$email = "someone@example...com";
 
try
{
    // 检测邮箱
    if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
    {
        // 如果是个不合法的邮箱地址,抛出异常
        throw new customException($email);
    }
}
 
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>

简而言之:如果抛出了异常,就必须捕获它。

11,strpos()函数

函数查找字符串在另一字符串中第一次出现的位置

tips:该函数对大小写敏感,该函数是二进制安全的

相关函数:

stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)

12,PHP Mysql

13,$_SERVER[‘HTTP_REFERER’]

作用:获取登陆前的url,但有时确获取不到值。

$_SERVER[‘HTTP_REFERER’] 对 POST 表单访问也是有效的,因此在表单数据处理页面一定程度上可以通过校验 $_SERVER[‘HTTP_REFERER’] 来防止表单数据的恶意提交。但该方法并不能保证表单数据的绝对正确,即对表单数据的真实性检测并不能完全依赖于 $_SERVER[‘HTTP_REFERER’] 。

14,json_encode()&json_decode

  • json_encode()
<?php 
$arr=array('Name'=>'西亚',
          'Age'=>20);
$jsonencode=json_encode($arr);
echo $jsonencode;
?>
{"Name":null,"Age":20}

这里的Name被编码成了null,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。

15,var_dump()

var_dump() 打印变量的相关信息,此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

16,错误打印

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'on');

17,获取结果集

  • PDO中获取结果集

fetch()方法:fetch()方法用于获取结果集的下一行

语法:mixed PDOStatement::fetch([int fetch_style][,int cursor_orientation[,int cursor_offset]]])

解释:fetch_style控制结果集的返回方式

tip explain
PDO::FETCH_ASSOC 关联数组形式(索引值为字段名)
PDO::FETCH_NUM 数字索引数组形式(索引值为数字)
PDO::FETCH_BOTH 以上两种形式都包含
PDO::FETCH_OBJ 对象形式(查询结果一行作为一个对象)
PDO::FETCH_BOUND 布尔形式(存在行则该行返回1)
PDO::FETCH_LAZY 头三种独立方式返回形式

fetchAll()方法:用于获取结果集中的所有行,其返回值是一个包含结果集中所有数据的二进制数组

语法:array PDOStatement::fetchAll([int fetch_style[,int column_index]])

解释:fetch_style:控制结果集中数据的显示方式,column_index: 字段的索引

18,echo,print,printf,sprintf区别

区别参考博客

  • echo&print

在PHP中,可以使用echo和print两种方法来显示字符串,严格的说,echo和print都不算是函数,而是一种类似于函数的输出方式. print输出方式的返回值为int类型的,返回值永远是1,print的语法格式如下: int print(string $str) echo输出方式是没有返回值的,echo的语法格式如下: void echo(string $str[,string $str1…]) 在PHP中,一般情况下echo和print是可以通用的,但是在某些情况下两种方式也是有区别的,具体表现在: 1)echo支持多个参数,但是print只支持一个参数 2)echo返回值为void,print有一个永远为1的返回值

  • springf&printf

在PHP中,sprintf和printf函数是用来对字符串进行格式化操作的,不同的地方是 1)printf()函数可以直接将格式化之后的字符串显示输出,而sprintf()函数需要使用echo方 法才可以讲格式化后的字符串显示输出. 2)printf()函数的返回值为int类型的整数,代表打印出来字符串中字符的数量,而sprintf()函数的返回值为一个字符串

printf()函数与sprintf()函数的语法格式为: int printf(string $format[,mixed $arg1[,mixed args2…]]) string sprintf(string $format[,mixed $arg1[,mixed args2…]])

示例

<h3>PHP中echo,print,printf,sprintf的区别</h3>
<?PHP

$str='let\'s study php!';
echo $str."\n";
$number=print $str."\n";
echo $number."\n";
$format="%b,%c,%d";
$number1=printf($format,88,88,88);
echo "\n".$number1;
echo "\n".sprintf($format,88,88,88);
?>

返回

select * from domestic_supplier 
let's study php!
let's study php!
1
1011000,X,88
12
1011000,X,88

2,Ubuntu简介

版本号:16.02UTS

3,Linux命令行

指令 解释
df 查看系统磁盘空间
df -a/-h/-ha 可以配合使用
sudo fdisk -l 查看磁盘空间的分区
httpd -v 查看是否安装apache
apachectl -v 查看apache的版本号
php -v 查看php版本号
whereis php 查看是否有安装php
getconf LONG_BIT 获取操作系统的位数
mysql -V 查看mysql的版本号
sudo /etc/init.d/apache2 restart &sudo service apache2 restart 重启目录下的服务
快捷键 解释
ctrl+win+←/→ 将屏幕分为两个窗口
CTRL + ALT + T 打开终端
   

Linux信息:

Linux命令参考

  • ~在Linux中代表用户主目录,对于一般用户~代表/home/(用户名);对于root用户,~代表/root
  • cd命令

convert directory:切换当前目录

cd /root/Docements # 切换到目录/root/Docements
cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录  
cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录
  • ls命令

查看文件和目录的命令,list

-l :列出长数据串,包含文件的属性与权限数据等
-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
-d :仅列出目录本身,而不是列出目录的文件数据
-h :将文件容量以较易读的方式(GB,kB等)列出来
-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来

以上命令可以合并使用eg:

  • grep命令

分析查找目标字符串的数据,若目标文件中有所需要的信息,就将其显示出啦,该命令常跟管道命令一起使用,用于对一些命令的输出进行筛选加工等等。

#语法
grep [-acinv] [--color=auto] '查找字符串' filename 


-a :将binary文件以text文件的方式查找数据
-c :计算找到‘查找字符串’的次数
-i :忽略大小写的区别,即把大小写视为相同
-v :反向选择,即显示出没有‘查找字符串’内容的那一行
  • find命令

find [PATH] [option] [action]

与时间有关的参数:

-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件; -mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名; -mtime -n : 列出在n天之内(含n天本身)被更改过的文件名; -newer file : 列出比file还要新的文件名

例如:

find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件

与用户或用户组名有关的参数:

-user name : 列出文件所有者为name的文件 -group name : 列出文件所属用户组为name的文件 -uid n : 列出文件所有者为用户ID为n的文件 -gid n : 列出文件所属用户组为用户组ID为n的文件

例如:

find /home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出所有者为ljianhui的文件

与文件权限及名称有关的参数:

-name filename :找出文件名为filename的文件 -size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件 -tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、 目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p); -perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755; -perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示 -perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

例如:

find / -name passwd # 查找文件名为passwd的文件 find . -perm 0755 # 查找当前目录中文件权限的0755的文件 find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte

  • copy命令

-a :将文件的特性一起复制

-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份

-i :若目标文件已经存在时,在覆盖时会先询问操作的进行

-r :递归持续复制,用于目录的复制行为

-u :目标文件与源文件有差异时才会复制

cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中
  • mv

-i :若目标文件已经存在,就会询问是否覆盖

-u :若目标文件已经存在,且比目标文件新,才会更新

mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中
mv file1 file2 # 把文件file1重命名为file2
  • rm命令

-f :就是force的意思,忽略不存在的文件,不会出现警告消息

-i :互动模式,在删除前会询问用户是否操作

-r :递归删除,最常用于目录删除,它是一个非常危险的参数

rm -i file # 删除文件file,在删除之前会询问是否进行该操作
rm -fr dir # 强制删除目录dir中的所有文件
  • ps命令

process

-A :所有的进程均显示出来

-a :不与terminal有关的所有进程

-u :有效用户的相关进程

-x :一般与a参数一起使用,可列出较完整的信息

-l :较长,较详细地将PID的信息列出

ps aux # 查看系统所有的进程数据
ps ax # 查看不与terminal有关的所有进程
ps -lA # 查看系统所有的进程数据
ps axjf # 查看连同一部分进程树状态
  • file命令

判断接在file命令后的文件的基本数据

file filename
  • tar命令

-c :新建打包文件 -t :查看打包文件的内容含有哪些文件名 -x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中 -j :通过bzip2的支持进行压缩/解压缩 -z :通过gzip的支持进行压缩/解压缩 -v :在压缩/解压缩过程中,将正在处理的文件名显示出来 -f filename :filename为要处理的文件 -C dir :指定压缩/解压缩的目录dir

tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!)

.gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName

.tar.gz 和 .tgz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName

.bz2 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName

.tar.bz2 解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName

.bz 解压1:bzip2 -d FileName.bz 解压2:bunzip2 FileName.bz 压缩:未知

.tar.bz 解压:tar jxvf FileName.tar.bz 压缩:未知

.Z 解压:uncompress FileName.Z 压缩:compress FileName

.tar.Z 解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName

.zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName

.rar 解压:rar x FileName.rar 压缩:rar a FileName.rar DirName

  • cat命令

该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。

cat text | less # 查看text文件中的内容
# 注:这条命令也可以使用less text来代替
  • vim命令

用于文本编辑,文件存在则打开,不存在就以该文件名创建一个文件。

  • gcc命令

对于一个用Linux开发C程序的人来说,这个命令就非常重要了,它用于把C语言的源程序文件,编译成可执行程序,由于g++的很多参数跟它非常相似,所以这里只介绍gcc的参数,它的常用参数如下:

o :output之意,用于指定生成一个可执行文件的文件名
-c :用于把源文件生成目标文件(.o),并阻止编译器创建一个完整的程序
-I :增加编译时搜索头文件的路径
-L :增加编译时搜索静态连接库的路径
-S :把源文件生成汇编代码文件
-lm:表示标准库的目录中名为libm.a的函数库
-lpthread :连接NPTL实现的线程库
-std= :用于指定把使用的C语言的版本
 
# 例如:
# 把源文件test.c按照c99标准编译成可执行程序test
gcc -o test test.c -lm -std=c99
#把源文件test.c转换为相应的汇编程序源文件test.s
gcc -S test.c
  • time命令

user:用户CPU时间,命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;

system:系统CPU时间,命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和;

real:实际时间,从command命令行开始执行到运行终止的消逝时间;

注:用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。

  • netstat命令

(net statistic)Netstat用于显示各种网络相关信息,如网络连接,路由表,接口状态等等。

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

4,磁盘分区

分区方案一:4个主分区 这时候能看到:sda,sda1,sda2,sda3,dsa4

分区方案二:一个主分区然后一个逻辑分区 这时候能看到:sda,sda1,sda2,sda5 这里sda是物理硬盘,sda1是主分区,sda2是扩展分区,sda5是逻辑分区(正是因为必须保留4个数字给主分区和扩展分区使用,所以逻辑分区的数字必须从5开始)。

分区方案三:一个逻辑分区 这里能看到:sda,sda1,sda5 见到这些数字不要害怕,这样一解释就很容易理解了。如果有多块物理硬盘就会出现sdb,sdc

主分区:一块物理硬盘上可以被独立使用的一部分,一个硬盘最多可以有4个主分区。 扩展分区:为了突破一个物理硬盘只能有4个分区的限制,引入了扩展分区。扩展分区和主分区的地位相当,但是扩展分区本身不能被直接使用,然而可以被继续划分成多个逻辑分区。 逻辑分区:逻辑分区可以有任意多个,但是不能独立存在,多个连续的逻辑分区可做为一个扩展分区。一个硬盘只能有一个扩展分区。 总结:也就是说,在一个物理硬盘上主分区和扩展分区加在一起最多仍然只有4个。但是扩展分区可以继续被划分成逻辑分区,而对多数用户而言,其实主分区和逻辑分区在使用上是没什么区别的。这样就达到了一快硬盘几乎可以有无限个分区的目的。

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048 217831423 217829376 103.9G 83 Linux
/dev/sda2       217833470 234440703  16607234   7.9G  5 Extended
/dev/sda5       217833472 234440703  16607232   7.9G 82 Linux swap / Solaris
  • 该电脑的硬盘分区,分为一个主分区,一个拓展分区,一个逻辑分区
  • Local:usr/local下一般是你安装软件的目录,这个目录就相当于在windows下的programefiles这个目录
  • Opt:这个目录是一些大型软件的安装目录,或者是一些服务程序的安装目录
  • etc:etc不是什么缩写,是and so on,这个目录一般用来存放程序所需的整个文件系统的配置文件。

5,Snap

snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间

Snap的安装包扩展名是.snap,类似于一个容器,它包含一个应用程序需要用到的所有文件和库(snap包包含一个私有的root文件系统,里面包含了依赖的软件包)。

#查询已经安装了的软件
sudo snap list
 
#搜索要安装的Snap软件包
sudo snap find xxxx
 
#查看Snap软件的更多信息 
sudo snap info xxxx
 
#安装Snap软件包
sudo snap install xxxx
 
#更换软件安装通道
sudo snap switch –channel=xxxx xxxx
 
#更新Snap软件包
sudo snap refresh xxxx
 
#还原到之前版本
sudo snap revert xxxx
 
#卸载Snap软件
sudo snap remove xxxx

sudo snap install 安装的东西,安装好了直接在Application搜索运行!

6,unknown知识点

分页!

脚本!

卡夫卡 分布式 微服务 rabbitmq

docker k8S

go语言

vi较常用的:查找,精确复制粘贴,精准定位至要编辑的行,表达式作字符串替换

7,v2ray注意事项

V2Ray 是一个与 Shadowsocks 类似的代理软件

首先下载脚本:

wget https://install.direct/go.sh

执行脚本安装v2ray

sudo bash go.sh

启动如下命令启动v2ray

sudo systemctl start v2ray

停止运行v2ray

sudo systemctl stop v2ray

重启运行v2ray

sudo systemctl restart v2ray

在安装完 V2Ray 之后,修改配置文件重启 V2Ray 即可,配置文件路径为 /etc/v2ray/config.json。

更新 V2Ray 的方法是再次执行安装脚本。

8,Cookie & Session

  • Cookie

cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

  • 设置Cookie

setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

setcookie(name, value, expire, path, domain);
  • 取回Cookie

PHP 的 $_COOKIE 变量用于取回 cookie 的值。

<?php
// 输出 cookie 值
echo $_COOKIE["user"];

// 查看所有 cookie
print_r($_COOKIE);
?>

isset() 函数来确认是否已设置了 cookie

补充:isset()函数用于检测变量是否已经设置并且非NULL,如果一次传入多个参数,那么 isset() 只有在全部参数都被设置时返回 TRUE,计算过程从左至右,中途遇到没有设置的变量时就会立即停止。

返回值:如果指定变量存在且不为 NULL,则返回 TRUE,否则返回 FALSE。

<?php
if (isset($_COOKIE["user"]))
    echo "欢迎 " . $_COOKIE["user"] . "!<br>";
else
    echo "普通访客!<br>";
?>
  • Session

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

  • 启动PHP Session

在您把用户信息存储到 PHP session 中之前,首先必须启动会话

<?php session_start(); ?>
<html>
<body>

</body>
</html>
  • 存储和取回Session

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量

<?php
session_start();
// 存储 session 数据
$_SESSION['views']=1;
?>
 
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
 
<?php
// 检索 session 数据
echo "浏览量:". $_SESSION['views'];
?>
 
</body>
</html>
  • 销毁Session

删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数

unset() 函数用于释放指定的 session 变量:

9,验证用户是否是admin

如果用户成功登陆的话,储存一个登陆成功的凭证的 session,即admin=true

<?php
//  表单提交后...
$posts = $_POST;
//  清除一些空白符号
foreach ($posts as $key => $value) {
    $posts[$key] = trim($value);
}
$password = md5($posts["password"]);
$username = $posts["username"]; 

$query = "SELECT `username` FROM `user` WHERE `password` = '$password' AND `username` = '$username'";
//  取得查询结果
$userInfo = $DB->getRow($query); 

if (!empty($userInfo)) {
    //  当验证通过后,启动 Se
index.html

> 验证 session里的`admin`是否为 `true`

<?php
//  防止全局变量造成安全隐患
$admin = false;
//  启动会话,这步必不可少
session_start();
//  判断是否登陆
if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {
    echo "您已经成功登陆";
} else {
    //  验证失败,将 $_SESSION["admin"] 置为 false
    $_SESSION["admin"] = false;
    die("您无权访问");
}
?>

10,双引号和单引号的区别

在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\和插入单引号')。所以,当你想在字串中进行变量代换和包 含\n(换行符)等转义序列时,你应该使用双引号。单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对单引号串 的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速度略慢。

php中query语句一定要用双引号!

$query="SELECT * FROM email_table WHERE username='$abc' ";
//可以这么理解,双引号内部的全都要被服务器解析,单引号只是当成普通字符而已.

总结一下PHP引号使用原则

1.字符串的值用引号

2.PHP中尽量用单引号,HTML代码全部用双引号

3.在包含变量的时候,用双引号可以简化操作

4.复杂的情况下用大括号包起来

PHP引号还有一个用处就是,有的时候需要用php生成文本文件,换行符\n需要用双引号才能好使,单引号则会直接把\n当成字符输出。

11,demoToFirstSql

$mysqli=new mysqli("127.0.0.1","root","123456","sys");
$sql="select * from domestic_supplier";
$results=$mysqli->query($sql);
//$row = $result->fetch_assoc();
//echo $row['email']." ";
print_r($results);
while ($row = $results->fetch_all())
{
    print_r($row);
    echo "<br>";
}

12,mysql连接信息分析

mysql://wemore:SZstar085*@wemore.co57vqhjx2cq.ap-south-1.rds.amazonaws.com:3306/wemore

User Name:wemore

Password:SZstar085*

Host:wemore.co57vqhjx2cq.ap-south-1.rds.amazonaws.com

Port:3306

Database:wemore

13,错误码类型

200 OK - [GET]服务器成功返回用户请求的数据该操作是幂等的Idempotent)。
201 CREATED - [POST/PUT/PATCH]用户新建或修改数据成功
202 Accepted - [*]表示一个请求已经进入后台排队异步任务
204 NO CONTENT - [DELETE]用户删除数据成功
400 INVALID REQUEST - [POST/PUT/PATCH]用户发出的请求有错误服务器没有进行新建或修改数据的操作该操作是幂等的
401 Unauthorized - [*]表示用户没有权限令牌用户名密码错误)。
403 Forbidden - [*] 表示用户得到授权与401错误相对),但是访问是被禁止的
404 NOT FOUND - [*]用户发出的请求针对的是不存在的记录服务器没有进行操作该操作是幂等的
406 Not Acceptable - [GET]用户请求的格式不可得比如用户请求JSON格式但是只有XML格式)。
410 Gone -[GET]用户请求的资源被永久删除且不会再得到的
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时发生一个验证错误
500 INTERNAL SERVER ERROR - [*]服务器发生错误用户将无法判断发出的请求是否成功