CentOS 7 安装 PHP 7.2

本文将介绍如何在 CentOS 7 服务器上使用 yum 命令安装 PHP7.2,内容提炼自外文网站,点击查看原文

安装 PHP7.2

安装 EPEL 软件包:

$ sudo yum install epel-release

安装 remi 源:

$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装 yum 扩展包:

$ sudo yum install yum-utils

启用 remi 仓库:

$ sudo yum-config-manager --enable remi-php72
$ sudo yum update

安装 PHP7.2

$ sudo yum install php72

安装 php-fpm 和一些其他模块

$ sudo yum install php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache

输入 php72 -v 查看安装结果

php-fpm 服务

设置开机自启

$ sudo systemctl enable php72-php-fpm.service

常用 php-fpm 命令

# 开启服务
$ sudo systemctl start php72-php-fpm.service

# 停止服务
$ sudo systemctl stop php72-php-fpm.service

# 查看状态
$ sudo systemctl status php72-php-fpm.service

通过 egrep 查询 nginx 服务器的用户和用户组:

$ egrep '^(user|group)' /etc/nginx/nginx.conf

结果示例:

user nginx;

编辑 /etc/opt/remi/php72/php-fpm.d/www.conf,修改执行 php-fpm 的权限:

$ sudo vi /etc/opt/remi/php72/php-fpm.d/www.conf

设置用户和用户组为 nginx:

user = nginx
group = nginx

保存并关闭文件,重启 php-fpm 服务:

$ sudo systemctl restart php72-php-fpm.service

路径整理

# php 安装路径
/etc/opt/remi/php72

# nginx 配置文件
/etc/nginx/nginx.conf

# nginx 默认项目路径
/usr/share/nginx/html

WordPress 教程:如何通过 PHP 代码修改表结构和索引

我们在 WordPress 创建表之后,由于业务的需求,可能需要对表结构进行修改,比如增加多一些字段,或者删除一些无用的字段,也有可能因为优化的问题需要对某个表结构增加索引。我们怎么操作呢?

修改表结构

比如我们需要给表 $table 增加一个 field1 字段。

首先我们判断一下,$table 是否已有该字段:

$wpdb->query("SHOW COLUMNS FROM `{$table}` WHERE field='field1'")

如果不含,我们增加:

if(!$wpdb->query("SHOW COLUMNS FROM `{$table}` WHERE field='field1'")){
    $wpdb->query("ALTER TABLE `{$table}` ADD COLUMN `field1` var(15) NOT NULL");
}

修改表索引

比如我们需要给表 $table 增加一个 field1_idx 索引。

首先我们判断一下,$table 是否已有该索引:

$wpdb->query("SHOW INDEX FROM `{$table}` WHERE Key_name='field1_idx'")

如果没有,我们增加:

if(!$wpdb->query("SHOW INDEX FROM `{$table}` WHERE Key_name='field1_idx'")){
    $wpdb->query("ALTER TABLE `{$table}` ADD KEY `field1_idx` (`field1`);");
}

PHP 和 Python 基于 UDP 协议操作 memcached

在写完(https://mp.weixin.qq.com/s?__biz=MzAwOTU4NzM5Ng==&mid=2455770298&idx=1&sn=1a6232862a977c9bc85d99620a9e8499&scene=21#wechat_redirect)这篇文章后,我重新燃起了对 memcached 的兴趣,在新浪博客的时候,我们很早就使用了 memcached,但由于大部分服务使用了 squid 缓存,所以 memcached 没有大规模使用,十年过去了,我对 memcached 的认知也越来越肤浅了,乘着这次机会,我重新看了一遍 memcached 官方 wiki,打算写几篇文章回顾下,今天聊第一个话题,那就是如何基于 UDP 协议操作 memcached。

首先 memcached 支持 TCP 和 UDP 协议,至于两者的差别不是本文的重点,本文主要讲解如何在 PHP 和 Python 中以 UDP 协议的方式操作 memcached。

memcached 服务如何开启 UDP

由于出现过 memcached UDP 反射攻击,所以很多 linux 发行版默认启动的是关闭 UDP 端口的,如果你想开启,可以执行下列命令:

$ memcached -m 64 -p 11212 -U 11211 -u memcache -l 127.0.0.1

-U 参数表示指定 UDP 端口,如果 -U 参数的值为0 表示关闭 UDP 端口。

一旦执行上列命令,表示 memcached 服务器端同时监听 11211 的 UDP 和 TCP 端口,通过下列命令可看出:

$ netstat -an | grep 11211
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN     
udp 0 0 127.0.0.1:11211 0.0.0.0:*

命令行 UDP 连接 memcached

在 Linux 中,telnet 只能运行于 TCP 模式,所以为了演示,只能采用 nc 命令行。UDP 操作 memcached,在操作数据的时候必须增加一个 frame 头,后续的数据格式和 TCP 操作 memcached 一样,查看官方手册:

 The frame header is 8 bytes long, as follows (all values are 16-bit integers

 in network byte order, high byte first):


 0-1 Request ID.

 2-3 Sequence number.

 4-5 Total number of datagrams in this message.

 6-7 Reserved for future use; must be 0.

为了说的简单点,可以执行下列命令,以 UDP 协议操作 memcached:

$ printf 'x00x00x00x00x00x01x00x00statsrn' | nc -u 127.0.0.1 11211 
$ printf 'x00x00x00x00x00x01x00x00set v 0 0 1rnxrn' | nc -u 127.0.0.1 11211 
$ printf 'x00x00x00x00x00x01x00x00get vrn' | nc -u 127.0.0.1 11211

PHP 以 UDP 协议操作 memcached

php-memcached 扩展也支持 UDP 协议操作 memcached,但并不鼓励,所以官方文档介绍 UDP 操作非常少,我也是查了官方的 Issues 才明白的。另外即使支持,UDP 操作也有限制,比如 set 命令支持 UDP 协议,但 get 命令就不支持,至于原因,大家可以思考下,后续我会简单说一说。

先看代码:

$m_udp = new Memcached();
# 使用 UDP 协议模式
$m_udp->setOption(Memcached::OPT_USE_UDP, true);
# 注意,支持文本模式的协议,而非二进制协议
$m_udp->setOption(Memcached::OPT_BINARY_PROTOCOL, false);

$m_udp->addServer('127.0.0.1', 11211, 1);

echo $m_udp->get('y');
var_dump($m_udp->getResultMessage());

输出 string(20) “ACTION NOT SUPPORTED”,可以看出 php-memcached 扩展做了限制,不允许 UDP 协议操作 get 命令。

$m_udp->set('y',"ok");
var_dump($m_udp->getResultMessage());
$m_tcp =new Memcached();
# 切换为默认的 TCP 连接方式
$m_tcp->addServer('127.0.0.1', 11211, 1);
echo $m_tcp->get("y");

执行完毕,成功输出 ok。

Python 以 UDP 协议操作 memcached

Python 有专门的包基于 UDP 协议操作 memcached,这就是 python-memcached-udp 包,安装后,演示一个例子:

client = memcached_udp.Client([('localhost', 11211)])
client.set('key1', 'value1')
r = client.get('key1')
print (r)

大家可以看看这个包的源代码,非常有意思,可以学到很多 memcached 命令知识。

Centos 7安装Nginx+PHP+MariaDB环境搭建WordPress博客

WordPress是一个免费的开源项目,是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用,国内外有不少的知名网站建设都是基于WordPress程序,WordPress有许多第三方开发的免费模板和免费插件,安装方式简单易用,相信很多人的第一个站点都是基于WordPress建的。访问官网https://wordpress.org/

在安装ShadowsocksR服务之前希望先对服务器做基本安全配置(非强制) 跳转链接https://www.gyuryong.com/index.php/archives/18/

运行环境搭建

WordPress基于PHP开发的,相信是大家最熟悉也是最容易部署的Web项目了。环境准备:lnmp(linux+nginx+mysql+php)或者lamp(linux+apache+mysql+php),大同小异,本文推荐使用nginx作为Web服务器。
为了避免不必要的麻烦先关闭防火墙和selinux。

1.安装nginx

安装nginx,默认情况Centos7中无Nginx的源,可以如下执行命令添加源,Centos其他版本或者RHEL查看官方教程(教程链接https://www.nginx.com/resources/wiki/start/topics/tutorials/install/):

vi /etc/yum.repos.d/nginx.repo

写入

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

安装nginx:

yum install nginx -y

2.安装php和mariadb

yum install php-fpm php-mysql mariadb-server unzip

3.修改配置文件

修改/etc/nginx/conf.d/default.conf中下面两断内容:

vi /etc/nginx/conf.d/default.conf

更改前:

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

更改后:

    root   /usr/share/nginx/html;
    index  index.html index.htm index.php;
location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

更改前:

#location ~ .php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

更改后:

location ~ .php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $request_filename;
    include        fastcgi_params;
}

修改/etc/php-fpm.d/www.conf配置:

vi /etc/php-fpm.d/www.conf

user = apache改为user = nginx,将group = apache改为group = nginx

4.开启服务

systemctl start nginx.service
systemctl start mariadb.service
systemctl start php-fpm.service

5.设置开机自启

systemctl enable nginx mariadb php-fpm

安装WorePress

1.移除/usr/share/nginx/html内所有文件:

cd /usr/share/nginx/html
rm 50x.html index.html

2.下载WordPress并解压,到官网复制最新版链接(跳转链接https://cn.wordpress.org/download/):

yum install wget -y
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip
unzip wordpress-4.9.4-zh_CN.zip

3.将Web文件移动到根目录并删除没用文件夹:

mv wordpress/* .
rmdir wordpress
rm wordpress-4.9.4-zh_CN.zip

4.权限设置

chown nginx.nginx -R .

5.创建数据库wordpress:

mysql
create database wordpress;
exit

接下来输入你的ip地址就可以安装WordPress了!

Apache、Nginx、php-fpm为PHP设置、添加$_SERVER服务器环境变量

在PHP开发中为了区分线上生产环境还是本地开发环境,

如果我们能通过判断$_SERVER['RUNTIME_ENVIROMENT']'DEV'还是'PRO'来区分该多好,

可惜的是$_SERVER数组里面根本没有RUNTIME_ENVIROMENT这个元素。

一、通过nginx的fastcgi_param来设置

在nginx配置文件中,可以在nginx总体的配置文件nginx.conf中,也可以在单独的网站配置环境中进行设置,如:www.regskynet.com.conf

在配置环境server段location中添加相应的配置信息:

    location ~ .php$ {
        limit_conn conn_zone 15;
        limit_req zone=req_zone burst=25 nodelay;
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        root           $root;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_param  RUNTIME_ENVIROMENT 'PRO';
    }

然后重启重启nginx

service nginx reload

二、通过php主配置文件php-fpm.conf来设置

这个设置必须放在主配置文件php-fpm.conf里,不能放到include指令设置的子配置文件里,否则会报错:「Array are not allowed in the global section」

我的php-fpm.conf位置在/etc/php-fpm.conf

直接在配置文件中添加:

env[RUNTIME_ENVIROMENT] = 'PRO'

添加后重启php-fpm

service php-fpm reload

通过上面2种方式添加$_SERVER变量值后,我们就可以直接在php文件中通过$_SERVER来获取相应的变量值了。

不过据说配置信息通过nginxfastcgi_param来设置的话,当nginx和php交互时,会带来大量的数据传输。

三、通过Apache设置环境变量

SetEnv 变量名 变量值

<VirtualHost *:80>
    ServerAdmin ...
    DocumentRoot ...
    ServerName www.regskynet.com
    ErrorLog ...
    CustomLog ...
    SetEnv RUNTIME_ENVIROMENT PRO
    <Directory "...">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

windows 搭建 apache + php

1. 安装 apache

登录 apache 官网, 不懂英语的我看的一脸懵, 然后偷偷去百度了…
登录https://www.apachelounge.com/download/

未分类

我的电脑是 win10 64 位 所以我选择了这里

解压, 修改 conf 文件夹下的 httpd.conf 文件

打开 J:apacheApache24conf 目录下的 httpd.conf 文件并作以下修改:

ServerRoot(apache 目录)改为 J:apacheApache24

ServerName (服务器名称) 去掉 #,改为 127.0.0.1

DocumentRoot (修改网站根目录地址)自己设置,一般设置为 J:apacheApache24htdocs

运行 bin 目录下的 httpd.exe 就 ok 了 , 我固定到了开始菜单栏
如果需要安装服务 , 请看这里https://blog.csdn.net/hi_xww/article/details/78045518

2. 安装 php

http://www.cnblogs.com/flyingeagle/articles/6583201.html

3. php 扩展 mysql

这里搞了很长时间…
php.ini 搜索 extension_dir
添加 extension_dir = "D:php7ext"

未分类

开启 mysql 扩展, 去掉这两行的注释, 这个地方 我找了好久

未分类

查看 /ext 目录下 是否有 php_mysql.dll , 如果没有可以在这里下载

https://img.vseu.com/php_mysql.dll

关于ubuntu下安装完PHP+Apache后,无法解析php的解决方案

根据 http://blog.csdn.net/renzhenhuai/article/details/12009595

安装完之后,html文件可以正常解析,php源码直接输出,不能被解析。

通常情况下是apache未加载php模块,通常情况下需要修改httpd.conf文件,但是在ubuntu下为apache2.conf文件

修改如下:

设置

LoadModule php5_module        /usr/lib/apache2/modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

/usr/lib/apache2/modules/libphp5.so换成你的路径。

如果apache2.conf中该项配置,直接加入即可。

然后重启apache即可

sudo /etc/init.d/apache2 restart

CentOS安装配置PHP的Memcache扩展

前面我们已经讲了怎么安装memcached对象缓存系统,光是安装了没有PHP的扩展支持,对咱们的WordPress仍然是没有任何加速作用,跟我一起来配置下PHP的Memcache扩展吧!

下载软件资源

php扩展memcache3.0.8下载地址:http://pecl.php.net/package/memcache

直接下最新版的,其实已经很久没更新了。

安装步骤

上传下载好的软件包到服务器,然后通过终端cd进入该目录。

解压压缩包

tar zxvf memcache-3.0.8.tgz

cd进入解压目录

这里有点重要,注意。找到你的PHP安装路径,确定bin目录下存在phpize文件。

用phpize生成configure配置文件,我的PHP就在/usr/local/php5.5.7/bin。

/usr/local/php5.5.7/bin/phpize

用php-config配置安装信息,注意你的php-config文件所在路径,我的在/usr/local/php5.5.7/bin/php-config

./configure -enable-memcache --with-php-config=/usr/local/php5.5.7/bin/php-config --with-zlib-dir

编译

make

安装

make install

请注意,如果你的PHP版本是7以上的,这里会安装出错,因为PHP7修改了一个文件名,这个扩展很久没更新了,没有兼容PHP7,所以这种方法安装不了。

安装成功会出现一个路径地址,我没有截图,这里用别人的图。

未分类

复制这个路径,修改php.ini文件。

修改extension_dir路径:

extension_dir = “上图生成的路径”

为PHP添加模块

extension=memcache.so

重启php-fpm,Apache直接重启Apache就好,NGINX还是都重启下吧。

在你的网站中放入一个PHP文件,里面写上

<?php
phpinfo();
?>

浏览器访问这个文件,使用Ctrl+F查找memcace,有则安装成功。

未分类

CentOS上PHP完全卸载

想把PHP卸载干净,直接用yum的remove命令是不行的,需要查看有多少rpm包,然后按照依赖顺序逐一卸载。

1. 首先查看机器上安装的所有php相关的rpm包

[root@localhost nginx]# rpm -qa | grep php

php-cli-5.3.3-22.el6.x86_64

php-pdo-5.3.3-22.el6.x86_64

php-gd-5.3.3-22.el6.x86_64

php-fpm-5.3.3-22.el6.x86_64

php-common-5.3.3-22.el6.x86_64

php-5.3.3-22.el6.x86_64

php-xml-5.3.3-22.el6.x86_64

php-pear-1.9.4-4.el6.noarch

2. 按依赖顺序进行删除

rpm -e php-fpm-5.3.3-22.el6.x86_64

rpm-e php-pdo-5.3.3-22.el6.x86_64

rpm -e php-pear-1.9.4-4.el6.noarch

rpm-e php-cli-5.3.3-22.el6.x86_64

rpm -e php-5.3.3-22.el6.x86_64

rpm-e php-xml-5.3.3-22.el6.x86_64

rpm -e php-gd-5.3.3-22.el6.x86_64

rpm-e php-common-5.3.3-22.el6.x86_64

Nginx利用fastcgi_cache缓存php页面

前言

fastcgi_cache是一个nginx的插件,用于缓存fastcgi接口的执行结果,例如缓存php的执行结果。特别是php网站的首页与一些非交互页面,利用fastcgi_cache可以大幅度提升访问速度,并且降低php的执行压力。

配置

1. 在nginx的主配置文件

在主配置文件(nginx.conf)中添加缓存域

fastcgi_cache_path /dev/shm/nginx-cache levels=1:2 keys_zone=cgi_wpcache:200m inactive=1d;

fastcgi_cache_path:缓存文件的路径,/dev/shm/为tmfs缓存文件系统,

实际储存在内存中,所以读写IO性能更高。
levels:缓存目录的结构层次,例如1:2,缓存文件会就生成在指定目录的再下两层目录中。
keys_zone:缓存域名称,在vhost内进行缓存时需要调用。
inactive:缓存不活动时间,若缓存内容在指定时间内未被访问将会被清理出缓存域。

2. 站点配置

location /archives/ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /data/webroot/$fastcgi_script_name;
include fastcgi_params;
  fastcgi_cache cgi_wpcache;
  fastcgi_cache_methods GET HEAD;
  fastcgi_cache_key $request_method$host$request_uri;
  fastcgi_cache_valid 200 2d;
  fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
  add_header X-Cache “$upstream_cache_status”;
}

fastcgi_cache:指定缓存域
fastcgi_cache_methods:指定缓存的请求方式
fastcgi_cache_key:指定缓存文件的标识,这个标识会MD5转码存储在缓存域的目录下
fastcgi_cache_valid:指定缓存状态,例如上文中只缓存响应状态码为200的请求所产生的返回页面两天
fastcgi_ignore_headers:默认情况下fastcgi_cache会忽略有特殊header的请求,并不进行缓存,官网说明。但当我们添加这个参数后,这些限制将不在存在。
add_header 将会在返回请求的response的header中添加一个X-Cache字段表示是否进行了缓存。如果需要也可以在nginx日志中通过log_format添加$upstream_cache_status字段

  • ·MISS 未命中,请求被传送到后端
  • ·HIT 缓存命中
  • ·EXPIRED 缓存已经过期请求被传送到后端
  • ·UPDATING 正在更新缓存,将使用旧的应答
  • ·STALE 后端将得到过期的应答

3.验证

配置完成后重新加载nginx后通过curl -I 访问如下:

[root@localhost local]# curl -I localhost/archives/1.php
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Mon, 25 Jun 2018 06:48:05 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.30
Expires: Tue, 26 Jun 2018 06:48:05 GMT
Cache-Control: max-age=86400
X-Cache: MISS

第一次访问 X-Cache: MISS 说明还未进行缓存。

[root@localhost local]# curl -I localhost/archives/1.php
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Mon, 25 Jun 2018 06:50:57 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.30
Expires: Tue, 26 Jun 2018 06:48:05 GMT
Cache-Control: max-age=86400
X-Cache: HIT

第二次访问发现X-Cache: HIT,表明/archives/1.php这个url已经被缓存,再下次访问nignx将不再会去请求php-fpm进行执行,而会直接从缓存中读取并返回,能够大大提高网站速度。

4. 遇到问题

a)访问空白
配置完毕后发现时常会出现页面访问空白的情况,再清空缓存目录后重新访问就恢复了。
经过测试发现是由于第一次使用HEAD方式访问,返回一个body为空的响应并被缓存了,所以之后再次访问就获取到了空白的页面。
这是由于fastcgi_cache_key中没有设置$request_method,将GET和HEAD的请求存储到了同一个key中。

b)页面缓存失败,一直MISS
默认情况下,请求的header中包含“Expires”, “Cache-Control”, “Set-Cookie”等,页面将不会被缓存,所以添加fastcgi_ignore_headers Cache-Control Expires Set-Cookie;即可。