标签 php 下的文章

CGI、FastCGI、PHP-CGI、PHP-FPM

1:CGI与FastCGI

  • CGI与FastCGI都是一种通讯协议,是web Sever(Apache/nginx/iis)与其他程序(此程序通常叫做CGI程序,如PHP脚本解析器)之间通讯的桥梁,CGI是为了保证Web Server传递过来的数据是标准格式的
  • FastCGI是CGI的改良进化版,FastCGI相比CGI更安全、性能更好,所以现在都是使用FastCGI协议进行通讯
  • FastCGI兼容CGI

2:PHP-CGI与PHP-FPM

  • PHP-CGI其实就是PHP脚本解析器,他是CGI协议的实现
  • PHP-FPM就是FastCGI协议的实现
  • PHP-CGI和PHP-FPM都是程序

3:PHP-FPM详解

  • fastcgi和cgi有什么区别

cgi在一个请求过来后,去读取php.ini里的基础配置信息,初始化执行环境,每次都要不停的去创建一个进程,读取配置,初始化环境,返回数据,退出进程,久而久之,启动进程的工作变的乏味无趣特别累;fastcgi可以让cgi一次启动一个主进程(master),让他只读取一次配置,然后在启动多个工作进程(worker),当一个请求来的时候,通过master传递给worker这样就可以避免重复劳动了,当worker不够的时候,master会通过配置里的信息,动态启动worker,等空闲的时候可以收回worker

  • php-fpm 到底是个什么东西

就是来管理启动一个master进程和多个worker进程的程序;PHP-FPM 会创建一个主进程,控制何时以及如何HTTP请求转发给一个或多个子进程处理。PHP-FPM主进程还控制着什么时候创建(处理Web应用更多的流量)和销毁(子进程运行时间太久或不再需要了)PHP子进程。PHP-FPM进程池中的每个进程存在的时间都比单个HTTP请求长,可以处理10、50、100、500或更多的HTTP请求

参考:
参考:
参考:

php目录处理

1:目录相关函数

  • 名称函数:basename(), dirname(), pathinfo()

  • 目录读取:opendir(), readdir(), closedir(), rewinddir()
  • 目录删除:rmdir()
  • 目录创健:mkdir()

2:其他相关函数

  • 文件大小:filesize()

  • 目录大小:disk_free_space(), disk_total_space()
  • 文件拷贝:copy()
  • 删除文件:unlink()
  • 文件类型:filetype()
  • 重命名文件或者目录:rename()
  • 文件截取:ftruncate()截取到指定大小
  • 文件属性:file_exists(),is_readable(),is_writable()

php文件处理

1:文件读取/写入操作

  • 打开:fopen()
  • 写入:fwrite() fputs()
  • 读取:fread() fgets() fgetc()
  • 关闭:fclose()

2:不需要fopen()打开的函数

  • file_get_contents()
  • file_put_contents()

3:其他读取

  • file()//数组

  • readfile()//读取到,并且放置到缓存区

4:访问远程文件

  • 开启allow_url_fopen,http协议连接只能使用只读,ftp协议可以使用只读或者只写

正则表达式

1:正则表达式的作用&要点

  • 分割,查找,匹配,替换字符串
  • 分割符:正斜线(/)、hash符号(#)以及取反符号(~)
  • 通用原子:\d,\D,\w,\W,\s,\S
  • 元字符:. * $ + {n} {n,} {n,m}, [], (), [^] | [-]
  • 模式修正符:i m e s U x A D u

php系统函数

1:时间日期函数:

  • data(),strtotime(),mktime(),time(),microtime()
  • date_default_timezone_set()

2:IP处理函数:

  • ip2long(),long2ip()

3:打印处理函数:

  • print(),printf(输出格式化字符串),print_r(打印关于变量的易于理解的信息)
  • echo,sprintf(Return a formatted string)
  • var_dump(),var_export(输出或返回一个变量的字符串表示)

4:序列化及反序列化函数:

  • serialize(),unserialize()

5:字符串函数:

  • implode(),explode(),join(),strrev(),trim(),
  • strstr(),number_format()...

6:数组处理函数:

  • array_keys(),array_values(),array_diff(),array_intersect(),array_merge(),
  • array_shift(前出栈),array_unshift(前入栈),array_pop(后出栈),array_push(后入栈),//模拟队列的双向处理
  • sort()...

php流程控制优化

1:switch...case....(会生成跳转【索引表】表,直接跳转到case)

  • switch($var)后面的控制表达式的数据类型只能是整形,浮点型或者字符串
  • switch的执行步骤,效率高一些

2:如何优化多个if...elseif语句的情况

  • 把可能性的大的往前放
  • 如果判断的内容比较复杂,且判断的值是整形,浮点型或者字符串,就可以使用switch,提升效率

php运算符

1:运算符的优先级:

  • 递增递减>!>算术>大小比较>
  • (不)相等比较>引用>位运算(^)>位运算(|)>
  • 逻辑与>逻辑或>三目>赋值>
  • and>xor>or
  • 括号的使用可以增加代码可读性,推荐使用

2:比较运算符:

  • ==和===的区别
  • 等值判断(false的七种情况都是相等的)

3:递增、递减运算符:

  • 不影响布尔值
  • 递减NULL值没有效果,递增会加1
  • 递增和递减在前就先运算后返回,反之就先返回后运算

4:逻辑运算符:

  • 短路作用(前面的都正确了,后面就不用执行了

    $a = true || $b == 3
    $b = false && $a ==1

  • ||和&&与or和and的优先级不同

    会导致其结果也不同
    $a = false || true; $a = true;
    $a = false or true; $a = false;

php数据类型

1:浮点类型 不能运用到比较运算中(不能用于相等的判断中)

    $a = 0.1; $b = 0.7;
    if($a + $b == 0.8){
    false =0.7999(二进制,会有损耗)
    }

2:布尔类型 false的七种情况

    0, 0.0, '', '0', false, array(), NULL
    整型0,浮点0.0,空字符串,0字符串,布尔false,空数组,NULL

3:NULL

    直接赋值为NULL、未定义的变量、unset销毁的变量