php常用基础(三)

    xiaoxiao2023-10-30  150

    FastCGI 和 PHP-FPM的区别

    CGI连接webservice和php解析器的一个协议 FastCGI是CGI的改良版本 PHP-FPM进程管理器

    FastCGI web和php通讯的协议 通过FPM来完成 PHP-FPM FastCGI的进程管理器 master worker进程来处理请求

    2.不断在文件 hello.txt 头部写入一行 "Hello World"字符串, 要求代码完整 //打开文件 //将文件的内容读取出来,在开头加入Hello World //将拼接好的字符串回到文件当中

    $file = "./hello.txt"; $handle = fopen($file, 'r'); $content = fread($handle, filesize($file)); $content = 'Hello World'.$content; fclose($handle); //关闭 $handle = fopen($file, 'w'); //重新 打开 fwrite($handle, $content); fclose($handle);

    3.通过PHP函数的方式对目录进行遍历,写出程序

    $dir = "./test"; //打开目录 //读取目录当中的文件 //如果文件类型是目录 继续打开目录 //读取子目录的文件 //如果文件类型是文件 输出文件名称 //关闭目录 function loopDir($dir) { $handle = opendir($dir); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." ) { echo $file."\n"; if (filetype($dir.'/'.$file) == 'dir') { loopDir($dir.'/'.$file); } } } } loopDir($dir);

    4.单一入口的工作原理 工作原理: 用一个处理程序文件处理所有的HTTP请求,根据请求时的参数的不同区分不同模块和操作的请求

    单一入口的工作原理: 优势:     可以进行统一的安全检查     集中处理程序 劣势:     URL不美观(URL重写)     处理效率会稍低

    5.Nginx负载均衡 内置策略, 扩展策略 内置策略: IP Hash , 加权轮询 扩展策略: fair策略, 通用hash, 一致性hash

    加权轮询策略:

    首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器 当所有后端机器都down掉时,Nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout的状态

    IP Hash策略:

    Nginx内置的另一种负载均衡的策略,流程和轮询很类似,只是其中的算法和具体的策略有些变化 IP Hash算法sh是一种变相的轮询算法

    fair策略:

    根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流

    通用Hash, 一致性Hash策略 通用hash比较简单,可以以Nginx内置的变量为key进行hash,一致性hash采用了Nginx内置的一致性hash环,支持memcache

    5.mysql引擎 InnoDB表引擎

    默认事物引擎,最重要最广泛的存储引擎,性能非常优秀 数据存储在共享表空间 可以通过配置分开对主键查询的性能高于其他类型的存储引擎内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区

    InnoDB表引擎

    通过一些机制和工具支持真正的热备份 支持奔溃后的安全恢复 支持行级锁 支持外键

    MyISAM表引擎

    5.1版本前,MyISAM是默认的存储引擎 拥有全文索引,压缩,空间函数 不支持事物和行级锁,不支持奔溃后的安全恢复 表存储在两个文件, MYD和MYI 设计简单, 某些场景下性能很好

    6.索引 索引的基础:

    索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先找书的目录,定位对应的页码 存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行

    索引对性能的影响:

    大大减少服务器需要扫描的数据量 帮助服务器避免排序和临时表 将随机I/O变顺序I/O 大大提高查询速度,降低写的速度,占用磁盘

    索引的使用场景:

    对于非常小的表,大部分情况下全表扫描效率更高 中到大型表,索引非常有效 特大型的表,建立的使用索引的代价将随之增长,可以使用分区技术来解决

    索引的类型:

    索引有很多类型,都是实现在存储引擎层的 普通索引:最基本的索引,没有任何约束限制 唯一索引:与普通索引类似,但是具有唯一性约束 主键索引: 特殊的唯一索引,不允许有空值

    索引的类型:

    组合索引: 将多个列组合在一起创建索引,可以覆盖多个列 外键索引: 只有InnoDB类型的表才可以使用外键索引,保证数据的一致性,完整性和实现级联操作 全文索引: MySQL自带的全文索引只能用于MyISAM,并且只能对英文进行全文索引

    原则:

    1.最适合索引的列是出现在WHERE子句中的列,或连接子句中的列而不是出现在SELECT关键字后的列 2.索引列的基数越大,索引的效果越好 3.对字符串进行索引,应该制订一个前缀长度,可以节省大量的索引空间 4.根据情况创建复合索引,复合索引可以提高查询效率 5.避免创建过多索引,索引会额外占用磁盘空间,降低写操作效率 6.主键尽可能选择较短的数据类型,可以有效较少索引的磁盘占用提高查询效率

    注意: 1.复合索引遵循前缀原则 KEY(a, b, c) WHERE a=1 and b=2 and c=3 WHERE a=1 and b =2 WHERE a=1 WHERE b=2 and c=3 WHERE a=1 and c=3 注意: 1.复合索引遵循前缀原则 2.like查询,%不能在前,可以使用全文索引 where name like "%wang%" 3.column is null可以使用索引 4.如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引 5.如果or前的条件中的列有索引,后面的没有,索引都不被用到 6.列类型是字符串,查询时一定要给值加引号,否则索引失效 如: name varchar(16) "100" where name = 100 那么name上的索引就会失效 MySQL主从复制工作原理

    在主库上把数据更改记录到二进制日志 从库将主库的日志复制到自己的中继日志 从库读取中继日志中的事件,将其重放到从库数据中

    MySQL主从复制解决的问题 数据分布:随意停止或开始复制,并在不同地理位置分布数据备份 负载均衡:降低单个服务器的压力 高可用和故障切换:帮助应用程序避免单点失败 升级测试:可以使用更高版本的MySQL作为从库

    8.Mysql安全的处理

    1.定期做数据备份 2.不给查询用户root权限,合理分配权限 3.关闭远程访问数据库权限 4.修改root口令,不用默认口令,使用较复杂的口令 5.删除多余的用户 6.改变root用户的名称 7.限制一般用户浏览其他库 8.限制用户对数据文件的访问权限

    防止sql注入:

    1.使用预处理语句防SQL注入 2.写入数据库的数据要进行特殊字符的转义 3.查询错误信息不要返回给用户,将错误记录到日志

    注意: PHP端尽量使用PDO对数据库进行相关操作,PDO拥有对预处理语句很好的支持的方法, MySQLi也有, 但是可扩展性不如PDO, 效率略高于PDO,MySQL函数在新版本中已经趋向于淘汰,所以不建议使用,而且它没有很好的支持预处理的方法

    最新回复(0)