0%

她是你姑姑,又是你师父,怎么能做你妻子!

概念

ORM即Object/Relation Mapping的简写,一般称作“对象关系映射”,在Web开发中最常出没于和关系型数据库交互的地方。ORM以最基本的形式建模数据。比如ORM会将MySQL的一张表映射成一个PHP类(模型),表的字段就是这个类的成员变量

举例

在OOP中通常我们需要写一个对应的class User来作为user数据表的数据模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 声明class User
class User{
$id;
$name;

function create(){/*...*/}
function load($id){/*...*/}
}

// 使用class User
$user = new User();
$user->name = 'fancy';
$user->create();

但是通过ORM,我们可以不用去声明class User,可以直接继承ORM提供的工厂类,比如:

1
2
3
4
// 直接使用!对于熟悉MVC的亲知道这个意义之所在!
$user = new ORM('user'); // ORM都有自己的规则,这里直接使用了MySQL的表名
$user->name = 'fancy'; // MySQL的表的字段就是$user对象的成员变量
$user->save(); // 掉用ORM提供的接口函数

缺点

在某些复杂的sql中有性能问题

我前半生最强烈三次心跳,分别发生在上课被老师点名 ,下楼梯一脚踩空, 和你对我微笑的时候!
### 本文系转载
1
2
3
命令查看:
php -m
which php
昨天有个学员私聊我,说他的`php -m`和在`apache` 中运行`phpinfo`不一致(这力默认`apache`是把`php`编译成模块的),譬如模块加载不一致。

理论上这是不可能的。除非你的PHP做了特别的设置(此处不表,-c参数即可搞定), 默认情况下,两者都是一致的。

经过我一番询问,发现并没有特别之处。于是我也纳闷了、抑郁了、纠结了。这也引起了我的“执着心”,我很讨厌在这种问题上还能卡住。于是我告诉那位学员,今天不找出原因咱两一起“切腹”。学员弱弱的答应了。。。。

然而,经过我一步步询问确认(注意:我不帮学员远程调试,这是游戏规则)。终于发现了问题。接下来放出原因,大家可能也会碰到

1、学员执行的是php -m .并不是类似 /usr/local/php/bin/php -m 这说明他的PHP存在于某个环境变量路径里。

2、也就是恰恰上面这个原因给忽略了。我们一直始终认为 他的环境变量是正确的。

3、最后,我让他执行了 重新编译PHP。问题依旧。(此时学员已经有切腹的愿望)

4、最后,我让它(就是它)执行了 which php .这时发现它的PHP在 /usr/bin 里面。

5、也就是说不管他怎么编译PHP,最终执行的php -m 的那个PHP可执行程序 永远是定位在 /usr/bin里面的那个老PHP

6、学员已经忘了怎么操作使之 /usr/bin里也有个PHP

7、解决方法如下:删掉 /usr/bin里面的那个老PHP 。把环境变量 设置到/usr/local/php/bin里。

8、再次执行 php -m 一切正常了。

本次解决问题的结论是:

不要相信一些“你认为不可能出错的步骤”。往往有的步骤你觉得“绝对不可能出错”,而问题恰恰就在你最信任的步骤里。 交朋友也是,往往你最最信任的人也是最有可能在关键部分干你一菊花的人。

http://www.hishenyi.com/archives/1095

想戴上最美的面具,又想卸下所有的伪装。
### 常用命令 - 连接数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
如果是root帐号,你能看到所有用户的当前连接
如果是其它普通帐号,只能看到自己占用的连接
show processlist; 列出前100
show full processlist; 全部列出
show global variables like '%connections%'; 查看整个MySQL实例的最大连接数限制
max_connections 就是整个MySQL实例的最大连接数限制
max_user_connections 是单个用户的最大连接数,这里未指明是哪个用户,是任意一个用户

查看某个用户的最大连接数,0表示不限制:
select user,max_user_connections from mysql.user where user='root';
通过设置这个值,防止某个指定用户使用过多的连接资源。默认是0,不限制。

上面3个参数的关系是:
max_user_connections < 实例 max_user_connections < max_connections

整个MySQL实例,曾经同时最大连接数,包括很多用户连接数之和:
show global status like '%max_used_connections%';

修改mysql最大连接数:
打开my.ini,修改max_connections=100(默认为100)。

使用连接池减少mysql的连接数
- 查看状态
1
show status;

父母在时,人生尚有来处。 父母去时,人生只剩归途。

Yaf/Phalcon

1
2
3
Yaf是一个C语言编写的PHP框架
Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 5 框架。
开发者不需要学习和使用 C 语言的功能,可以直接使用。

QPS

1
2
3
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,
作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,
即每秒的响应请求数,也即是最大吞吐能力。

如何实现1W+的QPS

1
2
3
4
1.IO操作要足够快,或者异步
常见的IO操作有,Mysql,Redis,CURL,磁盘读写
2.CPU消耗足够少

为什么不用C++

1
2
3
4
学习成本高
开发周期长
调试难度大
机器的时间可以用钱购买,人的时间无法用钱购买

提升PHP性能

1
2
3
使用PHP7,性能至少提高一倍
使用yaf/phalcon
使用swoole应用服务器

什么是Swoole

1
2
3
4
5
6
7
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,
提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,
异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,
毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器
端/客户端、Http2.0服务器端。Swoole可以广泛应用于互联网、移动通信、企业软件、
云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。使用PHP+Swoole作
为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

大量并发连接

1
2
基于epool实现异步IO处理
选择Nginx和swoole

超高性能架构

1
PHP7 + swoole + yaf/phalcon + Redis

超高性能统计运算程序

1
2
3
4
5
使用PHP Array 全内存存储,计算数据,超大规模读写Redis会成为瓶颈
使用Worker/Task进程实现数据的Map-Reduce
使用PHP的SPL数据结构
中间数据可以使用mysql内存表,汇总计算后删除数据
PHP的GC非常靠谱,及时unset掉不用的数据,连续运行无内存泄露

https://github.com/ThinkDevelopers/PHPConChina/tree/master/PHPCON2016

那些最容易脸红的人,往往是最善良的。
### 相关命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
查看所有用户
select host,user from user ;
添加一个用户
grant all on *.* to yangzie@"%" identified by "123" ;
说明:
all表示所有权限(包括增 删 改 查等权限)
*.* 表示所有数据库,前面一个* 指的是库,后面指的是表
yangzie为添加的用户名
123为密码,高版本的mysq会对密码的安全性做验证,简单的密码会导致命令执行失败
%为匹配的所有主机,% 即可以使用其他连接工具像navicat远程连接
删除一个用户
delete from mysql.user where user ='yushan' ;

所有的这些操作完成以后,记得刷新权限
flush privileges;

你如今的气质里,藏着你走过的路,读过的书,和爱过的人。

实验环境

centos6.5 64位

步骤:

  • 安装
1
2
3
4
yum install vsftp
chkconfig vsftpd on
chkconfig --list vsftpd
service vsftpd start
  • 匿名用户登录
1
2
3
//在浏览器中通过ftp://121.40.215.165这样的方式,无需输入用户名密码即可访问
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //匿名访问 开启
  • selinux
1
2
3
4
5
6
7
8
9
//SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)
//的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。
getenforce //查看状态
setenforce 0 //临时关闭
setenforce 1 //临时开启
//永久关闭
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
  • 修改默认端口号
1
2
3
//编辑 /etc/vsftpd/vsftpd.conf 文件,在该配置文件中添加此行:listen_port=801
//编辑 /etc/services 文件,将其中的 ftp 21/tcp 改为 ftp 801/tcp , ftp 21/udp 改为 ftp 801/udp
//执行 /etc/init.d/vsftpd restart 重新启动 vsftpd 服务.
  • ftp的配置文件
1
2
3
4
//位于/etc/vsftpd/目录下,分别是:
//ftpusers 该文件用来指定那些用户不能访问ftp服务器。
//user_list 该文件用来指示的默认账户在默认情况下也不能访问ftp
//vsftpd.conf 该文件是vsftpd的主配置文件
  • 建立用户以及指定目录
1
2
3
4
5
6
useradd -d /home/ftp ftpuser
passwd ftpuser
//此时用户ftpuser可以通过ftp登录

//系统内所有的FTP用户都限制在家目录中,修改配置文件/etc/vsftpd/vsftpd.conf
chroot_local_user=YES

http://jasonhzy.github.io/2016/03/11/linux-ftp/

我知这世界,本如露水般短暂。 然而, 然而。

基本命令功能

  • 找到默认的root密码
1
sudo grep 'temporary password' /var/log/mysqld.log
  • 登录后修改密码
1
2
3
alter user 'root'@'localhost' identified by '123';
flush privileges;
quit;
  • 查看所有用户
1
2
use mysql;
select distinct(User) from user;
  • 通过远程访问
1
2
3
4
5
6
//查看用户权限情况
select host,user from user;
//root是用户名,%代表任意主机,'123456'指定的登录密码(这个和本地的root密码可以设置不同的,互不影响)
grant all privileges on *.* to 'root'@'%' identified by'123456'with grant option;
flush privileges;
quit;

别人稍一注意你,你就敞开心扉,你觉得这是坦率,其实这是孤独。
### 给所有的文章增加tag
1
2
3
4
5
date: 2016-07-23 16:13:44
tags:
- laravel
- php7
- linux
### 新建tag页面
1
2
3
4
5
6
7
$ hexo new page "tags"

//以下是页面内容
title: Tagcloud
date: 2014-12-22 12:39:04
type: "tags"
---
完成;

只要从现在开始努力,最坏不过是大器晚成

安装环境

阿里云ECS centos6.5 64 位

操作步骤

  • 更新并安装
1
2
3
4
5
6
7
8
9

yum -y update

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

yum install php70w php70w-opcache

  • 系统自带了apache服务,启动它
1
2
3

service httpd restart

  • 进入/var/www/html目录,新建文件index.php
1
2
<?php
phpinfo();
  • 保存退出,访问你的web地址;

  • 安装mysql5.7

1
2
3
4
5
6
7
8
wget http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm

yum localinstall mysql57-community-release-el6-7.noarch.rpm

yum install mysql-community-server

service mysqld start

说明:mysql5.7 安装好以后有一个默认的登录密码

1
sudo grep 'temporary password' /var/log/mysqld.log

通过执行这个命令获得并登录修改,关于mysql的相关操作,以后再说。

安装laravel

  • 首先安装 composer
1
2
3
# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer
# chmod +x /usr/local/bin/composer
  • 安装laravel
1
composer create-project laravel/laravel blog 5.2.*

安装过程中遇到的问题:

  1. 缺少必要的php扩展:
    yum search php7 搜索所有可用的扩展进行安装,不要使用yum install -y php7* 这样的方式去全部安装。
  2. 缺少个dom的扩展,搜索后没有找到,后来发现安装一个和xml相关的扩展就OK啦。
  3. 安装提示“Class log does not exist laravel”,其实是少了一个mysql的安装,搜索安装就可以了。
  4. 首次运行composer install 时若目录下有composer.lock文件, 请删除
  5. yum install -y php70u-mbstring.x86_64
  6. chmod -R 777 storage/
  7. CREATE DATABASE IF NOT EXISTS laravel54 default charset utf8mb4 COLLATE utf8mb4_general_ci;
  8. yum install -y php70u-mysqlnd.x86_64

https://webtatic.com/packages/php70/
http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

PHP是最好的语言 呵呵
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

echo 'PHP 是最好的语言';

//关于我

define('NAME','杨国奇');
define('JOB','PHPER');
define('LOCATION','陕西西安');
define('WECHAT','ygq1192');
define('EMAIL','lnmput@gmail.com');

?>