# PHP 随笔

# 编译安装PHP

PHP源码包下载 (opens new window)

PHP7.3下载 (opens new window)

# 示例以 php 7.2 安装

# 强烈建议不再使用php7以下版本, php7和php5的性能是两个世界

./configure 过程中, 出现error时, 浏览一下错误. 如果是缺少系统模块, 对应包管理安装就可以

# Notice
# --prefix=/usr/local/php7.2 指定安装目录  
# --with-config-file-path=/usr/local/php7.2 指定config目录

# 常用包扩展

./configure \
--prefix=/usr/local/php7.2 \
--with-config-file-path=/usr/local/php7.2 \
--enable-mysqlnd \
--enable-opcache \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-shmop \
--enable-zip \
--enable-ftp \
--enable-soap \
--enable-xml \
--enable-mbstring \
--enable-rpath  \
--enable-debug \
--enable-fileinfo \
--enable-fpm \
--enable-pcntl \
--enable-curl \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pcre-regex \
--with-iconv \
--with-zlib \
--with-gd \
--with-openssl \
--with-xmlrpc \
--with-imap-ssl \
--with-freetype-dir\
--with-mhash

# 有些包或者扩展是有问题的(不影响复制运行), 记录不仔细莫见外
# 执行需要一段时间, 完后执行下面两条命令 ps: make && make install
make
make install

#OPS: 等待安装完成吧

# PHP本地常用指令

# 查看php版本
php -v 
# 运行本地cli
php -a
# 执行本地*.php文件
php xx.php

# nginx中配置php-fpm

这里先废话一下php-fpm, 引入php-fom.org首页的第一句话.

是一种替代的PHP FastCGI实现,其中一些附加功能对任何大小的站点都有用,尤其是更繁忙的站点

linux中查看fpm是否在运行中, 如果有进程在运行则运行正常

ps aux |grep php*.fpm

详细内容 (opens new window)

这里粘贴nginx默认php-fpm片段

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php/php7.2-fpm.sock; # 127.0.0.1:9000 端口服务式进程 
    fastcgi_index  index.php; # fastgit 默认文件
    fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
    include        fastcgi_params;
}

这是一种简单的完整nginx 和 php-fpm 的写法

server {
    listen 80;
    server_name www.rat.red;

    root /var/www/www.rat.red;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php;
    }

    ocation ~ \.php$ {
        try_files $uri =404;

        include fastcgi.conf; # 引入默认nginx fastcgi_conf
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }
}

# PHP redis 扩展安装

扩展包下载 (opens new window)

# 使用 phpize, 默认目录如下
/usr/bin/phpize

./configure -with-php-config=/usr/local/php7.2

make install

一般会自动配置php.ini文件

PS: 如果未生效, 可以手动创建conf.d目录下redis.ini文件 (写入导入so文件的信息)

# PHP包管理 Composer

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

# 依赖管理

Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

这种想法并不新鲜,Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当时 PHP 下并没有类似的工具。

Composer 将这样为你解决问题:

  1. 你有一个项目依赖于若干个库
  2. 其中一些库依赖于其他库
  3. 你声明你所依赖的东西
  4. Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)

# 声明依赖关系

比方说,你正在创建一个项目,你需要一个库来做日志记录。你决定使用 monolog。为了将它添加到你的项目中,你所需要做的就是创建一个 composer.json 文件,其中描述了项目的依赖关系。

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}

我们只要指出我们的项目需要一些 monolog/monolog 的包,从 1.2 开始的任何版本。

# 使用 Composer

现在我们将使用 Composer 来安装项目的依赖。如果在当前目录下没有一个 composer.json 文件,请查看基本用法章节。

要解决和下载依赖,请执行 install 命令:

php composer.phar install

如果你进行了全局安装,并且没有 phar 文件在当前目录,请使用下面的命令代替:

composer install

继续 上面的例子,这里将下载 monolog 到 vendor/monolog/monolog 目录。

# 自动加载

除了库的下载,Composer 还准备了一个自动加载文件,它可以加载 Composer 下载的库中所有的类文件。使用它,你只需要将下面这行代码添加到你项目的引导文件中:

require 'vendor/autoload.php';

现在我们就可以使用 monolog 了!想要学习更多关于 Composer 的知识,请查看“基本用法”章节。

# 不考虑当前php环境扩展安装包

在开发机器上往往扩展安装不与生产环境同步,这时候开发环境想要预览扩展的源码需要安装,composer默认是需要扩展支持才可以安装扩展,使用指定参数可以忽略扩展检查

composer install --ignore-platform-reqs

# 常用日期,时间函数

# date()

date函数需要format参数指定如何格式化日期, 第二个参数可以指定时间戳来获取格式化时间。

如: date('Y-m-d H:i:s', time()) // 默认即为time()

由于支持得format参数过多, 这么不做详细介绍, 详细 (opens new window)

# strtotime()

strtotime函数是将format格式化日期或者指定得英文文本日期时间描述解析为Unix时间戳

这里写些指定英文文本日期时间描述操作

strtotime("+1 week 2 days 4 hours 2 seconds") 当前时间 + 1周后2天4小时2秒

strtotime( "2009-01-31 +1 month" ) 2009年01月31号 + 下个月 (ps: 这里不是31或者30天 会自动为28天 及 2月28日

strtotime("first day of next month") 下个月第一天

详细 (opens new window)

# json_encode 和 json_decode

json_encode(arr || obj) 将数组或者对象 转成json字符串 详细 (opens new window)

json_decode((json)str) 将json字符串转成数组或者对象(取决于第二个(bool)assoc参数) 详细 (opens new window)