- 博客(29)
- 问答 (7)
- 收藏
- 关注
原创 PHP 生成器用法介绍
初识生成器说到 PHP 中的生成器,很多人都知道它是一种可以用来高效迭代的工具,比如: <?php function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { yield $i; } } foreach
2017-05-31 00:10:06 764
翻译 服务器端 I/O 性能:Node vs. PHP vs. Java vs. Go
前言:看到国外一篇讲几种语言 I/O 特性特别好的文章,于是就翻译了,供大家参考学习。原文地址:https://www.toptal.com/back-end/server-side-io-performance-node-php-java-go服务器端 I/O 性能:Node vs. PHP vs. Java vs. Go对于你的程序所采用的 I/O 模型的理解程度,决定了你的程序是能得当处理它的
2017-05-21 23:53:01 4442 1
原创 MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog
innodb_flush_log_at_trx_commit该参数控制重做日志写入磁盘的过程。我们知道 InnoDB 使用“Write Ahead Log”策略来避免数据丢失问题,即依靠重做日志来保证数据能在丢失后进行恢复。因此,InnoDB 重做日志的持久化非常重要。该参数的有效值有 0、1、2:0:事务提交时,不将重做日志缓冲写入磁盘,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。因此
2017-02-26 14:46:08 8086 2
原创 C 语言的内存分区
C/C++ 将内存划分为四个区 1、栈区(stacksegment)—自动分配,由编译器来维护,申请的方式是栈指针减四(一条指令通常为四个字节),而释放的方式是将栈指针加四。现假设过程P调用过程Q,并且假设P是主函数,则P的栈区保存:本身的局部变量、Q所用到的参数值、以及调用指令的后一条指令的地址(即返回地址)。而Q的栈区则保存调用Q之前的帧指针的值(地址,用来P的返回)、本身的局部变量、寄存器
2017-02-24 10:27:33 798
原创 MySQL创建自定义函数时 Error Code: 1418 的解决方法
今天在MySQL中创建函数时,报了以下错误: Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bi
2016-12-16 00:24:37 3775
原创 MySQL 基于日志点复制
MySQL的复制功能不仅可以构建高性能的应用,也是高可用性、可扩展性、灾难恢复等工作的基础。复制的主要功能1、数据分布。 MySQL提供的复制功能并不需要很大的带宽的要求,因此可以在不同的物理位置来分布数据。2、读操作的负载均衡 通过复制与负载均衡方案,可以将读操作分布到多个从服务器上,实现对读密集型应用的性能优化。3、备份 复制能起到一定的备份作用,但是并不能完全取代备份。4、高可用性和故障
2016-12-11 12:14:34 2005
原创 如何连接局域网内的 MySQL
准备连接虚拟机里 Linux中的 MySQL,却一直报错:2003——can’t connect to mysql server on localhost(10061)谷歌一番,发现要做以下工作:1.首先使用 ping 命令来确保要确保本机和虚拟机中的 Linux是连通的,如果不通,可能是 Linux的 ip地址没有正确配置。2.更改 MySQL配置。在我的 Linux系统,MySQL配置文件为 /
2016-12-07 20:50:07 1620
原创 Ubuntu 16.04 下快速搭建 LNMP环境
在 Ubuntu 系统中,可以使用 apt-get 命令来快速搭建 LNMP环境。安装Nginx使用 sudo apt-get install nginx 就能自动安装 Nginx,为了确保获得最新的 Nginx,可以先使用 sudo apt-get update 命令更新源列表。安装好之后,使用 dpkg -S nginx 命令来搜索 nginx相关文件,可以从命令显示结果看出 Nginx默
2016-12-06 20:26:12 26176 10
原创 PHP 错误机制
错误级别PHP中总共设置了 16种错误级别,常见的有下面几种:E_ALL包含所有的错误级别E_ERROR这种级别的错误会显示 Fatal Error,是最严重的错误级别。产生这种错误后,程序将不会继续执行。比如调用了不存在的函数,就会产生这种错误。Fatal error: Uncaught Error: Call to undefined function sad() in C:\Myenv\apa
2016-12-01 22:56:34 880
原创 MySQL binlog
作为 MySQL服务器层日志,MySQL二进制日志记录了 MySQL中所有成功执行了的事件,一般用来与备库配合使用。默认情况下,二进制日志是关闭的,如果要开启,则要在 MySQL的配置文件中加入:log-bin=dir/filename // 该配置项开启二进制日志功能,并且指定日志文件存放的路径及文件名。修改之后要重启 MySQL服务器。可以使用 SHOW VARIABLES LIKE ‘lo
2016-11-29 00:15:32 1009
原创 PHP中的ob_start()等函数
PHP中常用的几个 ob_函数为:1.ob_start() // 开启缓冲区2.ob_flush() // 冲刷出缓冲区内容3.ob_end_flush() // 冲刷出缓冲区内容并关闭缓冲区3.ob_clean() // 清空缓冲区内容4.ob_end_clean() // 清空缓冲区内容5.ob_get_content
2016-11-26 16:12:25 753
原创 MySQL视图
在MySQL中,视图是一张虚拟表,但是它本身并不存储任何数据。当使用 SQL语句访问视图时,它每次返回的数据是从其他表中临时生成的。在大多数情况下,MySQL中视图和普通表是被同等对待的,不过,视图和表还是有差别,比如视图不能创建触发器,也不能建立索引等。创建视图CREATE [OR REPLACE] [ALGORITHM = UNDEFINED | MERGE | TEMPTABLE ] VIE
2016-11-24 22:32:33 669
原创 一次MySQL查询的大致过程
如果想尽可能地优化 MySQL的性能,那么必须对 MySQL查询的全过程有个大体上的了解,为后续的优化工作打下基础。第一步:发送查询请求客户端与 MySQL服务器建立 TCP连接后发送一条查询给 MySQL服务器。客户端和 MySQL服务器之间的通信协议(应用层协议)是“半双工”的,因此,同一个时刻,只能有一方在发送数据,同时,另一方要么完整地接受数据,要么粗暴地断开连接。第二步:检查查询缓存MyS
2016-11-23 18:33:55 2189
原创 MySQL临时表
MySQL在执行SQL查询时可能会用到临时表,一般情况下,用到临时表就意味着性能较低。1.临时表存储MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表默认使用MySQL的MEMORY存储引擎, default_tmp_storage_engine 可以控制 CREATE TEMPORARY TABLE 创建的临时表的引擎类型,默认是MEMORY。 磁盘临时表使用MySQL的
2016-11-23 15:53:41 1723
原创 PDO之绑定变量
用绑定变量 SQL时,客户端向服务器发送了一个 SQL语句的原型,服务器端收到了这个 SQL语句“框架”后,经过解析、预处理、生成并存储部分执行计划,然后返回给客户端一个句柄,之后每次执行这类查询,都应使用这个句柄,之后的每次查询,只需要发送某些变量的值就可以了。这样看来,当一次会话中要执行多次类似的SQL时,使用绑定变量 SQL是更高效的,因为在 MySQL服务器端,只需要解析一次 SQL语句了,
2016-11-22 23:38:54 1219
原创 浅谈TCP和UDP的区别
作为运输层中两个主要的协议,TCP和UDP都能向应用层提供通信服务,然而它们提供的服务差别还是很大的。1、 TCP协议是面向连接的。也就是说,应用程序在使用 TCP协议之前,必须先建立起一个 TCP连接,之后才能进行通信活动。因此,使用 TCP协议通讯就好像是打电话,通话前先要拨号,然后等对端拿起电话,建立好连接后才能开始通话,通话结束后将电话机扣上,此时相当于断开连接。而 UDP协议是无连接的。
2016-11-16 23:40:37 2786
原创 SQL语句之CASE WHEN
CASE WHEN 基本概念Case具有两种格式:简单Case函数和Case搜索函数。简单Case函数: CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘0’ THEN ‘女’ ELSE ‘其他’ ENDCase搜索函数: CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘0’ THEN ‘女’ ELSE ‘其他’ END显然,简单Ca
2016-11-10 01:49:32 24696 1
原创 PHP匿名函数
匿名函数,也叫闭包函数,允许临时创建一个没有名称的函数。大多数情况下是作为回调函数的参数使用。当然,也有其它应用的场景。 匿名函数的使用在PHP中,匿名函数实际上就是一个 Closure对象:var_dump(function () {}); // object(Closure)[2]可以把它传递给一个变量,这就相当于把一个对象赋值给变量,并且可以通过该对象$foo = function ()
2016-11-07 19:43:21 799
原创 PHP处理密码的几种方式
在 PHP中,经常会对用户身份进行认证。本文意在讨论对密码的处理,也就是对密码的加密处理。MD5相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:$password = md5($_POST["password"]);上面这段代码是不是很熟悉?然而MD5的加密方式目前已经不太安全了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放
2016-10-29 13:43:10 1532
原创 深入理解PHP中的SESSION技术
深入理解PHP中的SESSION机制一、默认的文件存储机制PHP默认使用磁盘文件来保存 SESSION数据。 php.ini中关于 SESSION的基本配置:1、session.save_handler = files //SESSION的存储方式2、session.save_path = 'xxx' //存放文件的路径 2、session.name = 'PHPSESSID'
2016-10-29 00:44:04 516
原创 初探五种服务器网络编程模型
五种服务器网络编程模型1.同步阻塞迭代模型(同步阻塞)首先介绍同步阻塞迭代模型,它的核心代码如下:bind(srvfd, ...); listen(srvfd, ...); for(;;){ clifd = accept(srvfd, ...); //开始接受客户端来的连接 read(clifd,buf, ...); //从客户端读取...
2016-10-28 21:33:15 818
原创 Apache的三种工作模式及相关配置
Apache的三种工作模式作为老牌服务器,Apache仍在不断地发展,就目前来说,它一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)。它们分别是 prefork、worker 和 event 。1、Prefork MPM关键字:多进程prefork模式可以算是很古老但是非常稳定的模式。Apache在启动之初,就预先 fork一些子进程,然后等待请求进来。之所以
2016-10-28 10:53:07 12343
原创 让C/S进行全双工通信的WebSocket协议
超文本传输协议(HTTP)作为一种简单的协议,在面对功能日益丰富的 Web应用时,遇到了如下瓶颈:1、在客户端请求时,会建立一个TCP连接,然后发送请求,服务端给出响应,然后连接就关闭了。(现在的HTTP1.1支持消除了这个瓶颈)2、客户端和服务器之间的交互是采用请求/响应模式,缺乏服务器通知客户端的机制,在需要通知的场景,如聊天室,游戏,客户端应用需要不断地轮询服务器。3、请求/响应首部不经过
2016-10-28 01:52:03 3798 1
原创 Nginx 与 PHP-FPM 的协作机制
作为现在被很多大公司采用的Nginx + PHP-FPM,它们是怎么样做到协同合作呢?FastCGI 协议要搞明白这个问题,首先得说 CGI (Common Gateway Interface) 和 FastCGI 这两个协议。CGI 是 Web Server 与后台语言交互的协议,有了这个协议,开发者可以使用任何语言处理 Web Server 发来的请求,动态的生成内容。但 CGI 有一个致命的缺
2016-10-26 23:46:18 935
原创 初步探索Nginx高并发原理
Nginx首先要明白,Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器。多进程的工作模式1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。3、 master 进程能监控 worker
2016-10-26 17:30:51 13855 11
原创 CGI、FastCGI、PHP-FPM与Module模式
CGI最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。事物总是不断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php文件,服务器自己不能做,外包给别人吧,但是要与第三方做个约定,我给你什么,然后你给我什么,就是我把请求参数发送给你,然后我接收你的处理结果给客户端。那这个约定就是 Common Gatewa
2016-10-25 14:56:32 1525
原创 如何高效地利用MySQL索引
为实现MySQL的高性能,我们需要在优化索引、优化查询、优化表结构三个方面努力,这三个方面每个都至关重要。 本文主要讨论索引相关。1.要想合理利用索引,我们要考虑如何正确建立索引呢。 (1)在经常做搜索的列上,也就是WHERE子句里经常出现的列,考虑加上索引,加快搜索速度。 (2)唯一标识记录的列,应该加上主键索引,强制该列的唯一性并且加快按主键查找记录的速度。 (3)在作为关联查询的连接列
2016-10-19 12:40:38 859
原创 MySQL中MyISAM和InnoDB对B-Tree索引不同的实现方式
索引是 MySQL数据库很重要的一部分,它对数据表查询性能的好坏起着决定性的作用,对大表尤甚。 作为索引中最为常见的一种类型,B-Tree索引大都采用的是 B+Tree数据结构来存储数据(NDB集群存储引擎内部实际上采用 T-Tree结构存储这种索引)。B-Tree通常也意味着所有的值都是按顺序存储的。 大多数的 MySQL引擎都支持这种索引,而不同的存储引擎以不同的方式来实现 B-Tree索引。
2016-10-16 01:17:52 6657 2
原创 PHP中对象是按值传递还是按引用传递?
1.首先,什么是按值传递和按引用传递?按值传递就是仅仅把值传递过去,相当于传递的是值的拷贝,而按引用传递传递的是内存的地址。在 PHP5 中,如果按引用传递,就是将 zval 的地址赋给另一个变量,这时,两个变量都同时指向一个 zval 。而按值传递则是复制一个 zval,两个变量指向两个不同的 zval 。(为了简化,这里忽略 copy on write)按引用传递的特点:$a = 2;$b...
2016-08-05 20:25:20 7002
空空如也
已经下载了Ubuntu.iso,请问怎么安装?
2016-11-29
php单例模式中 new self 和 new 本类名 有什么区别啊
2016-08-27
请问php写的cms网站中如何防止同一ip用户的重复操作???
2016-08-19
在php项目中通常使用 pdo 还是 mysqli 连接mysql?
2016-08-14
html中script中引入php的问题
2016-08-13
关于如何防止sql特殊字符的问题。
2016-08-05
js中的ajax不能正常接收xml的问题
2016-07-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人