PHPer成长之路

一、常见模式与框架

学习PHP技术体系,设计模式,流行框架

  • 常见的设计模式,编码必备
  • Laravel、ThinkPHP开发必不可少的最新框架
  • YII、Symfony4核心源码剖析

二、微服务架构与性能优化

业务体系越来越复杂,Swoole协程编程、PHP并发编程、MySQL底层优化是架构升级的必经之路,PHP性能优化和微服务相关的技术有哪些呢?

  • Tars分布式RPC框架
  • Swoft微服务框架
  • 服务器性能优化
  • 算法与数据结构

三、工程化与网站架构

任何脱离细节的PPT架构师都是耍流氓,向上能运筹帷幄,向下能解决一线开发问题,PHP架构师需深入工程化、高并发、高可用,海量数据,如果没有分布式的架构知识肯定是玩不转的:

  • Linux操作/shell脚本编程
  • docker容器/自动化部署
  • 分布式缓存/消息中间件
  • 分布式架构原理/高并发分流

亚马逊免费服务器搭建wordpress博客

1. 申请免费amazon服务器

使用邮箱注册amazon账号,绑定一张有效的信用卡(会扣$1),开启aws服务需要通过验证手机验证(语音或短信验证码),完成之后正常会收到开启成功的邮件。这时候就可以申请一个免费的服务器。

2.设置服务器密码登录

  • 1)使用密钥对文件(.pem)登陆服务器
  • ssh ubuntu@your-server-address -i ~/.ssh/zizizi.pem
  • sudo passwd root , 按提示输入密码:
  • Enter new UNIX password:
  • Retype new UNIX password:
  • passwd: password updated successfully
  • 2)更新 /etc/ssh/sshd_config 文件中的两个参数(值改为yes):
  • PasswordAuthentication yes
  • PermitRootLogin yes
  • 重启服务 sudo service ssh restart
  • 3)退出服务器,重新用密码登陆:
  • ssh root@your-server-address
  • root@your-server-address's password:
  • 输入密码后,enter键登入服务器

3.搭建lamp环境

  • 1)安装nginx
  • sudo apt-get install nginx
  • 安装成功后浏览器输入服务器地址,如果出现“Welcome to nginx!”页面,即安装成功,否则登录服务器控制台,设置安全组添加入站HTTP 80 端口
  • 2)安装php和常用php扩展
  • sudo apt-get install php
  • sudo apt-get install php-fpm php-gd php-mbstring php-curl php-xml php-mysql php-zip php-json php-redis php-memcached
  • 3)解决php7.2无法直接安装php-mcrypt的问题
  • sudo apt install php-dev libmcrypt-dev php-pear
  • sudo pecl channel-update pecl.php.net
  • sudo pecl install mcrypt-1.0.1
  • 成功安装php-mcrypt扩展后,编辑php.ini启动扩展:
  • 添加extension=mcrypt.so 到php.ini
  • 注:/etc/php/7.2/cli/php.ini为终端环境;/etc/php/7.2/apache2/php.ini为apache服务器;/etc/php/7.2/fpm/php.ini为nginx服务器

4.建立测试站点(以安装phpmyadmin为例)

  • sudo apt-get install phpmyadmin
  • sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
  • 建立nginx配置文件并重启nginx服务
  server {
        listen  500;
        server_name localhost;
        set $root_path '/var/www/html/phpmyadmin/';
        root $root_path;

        index index.php index.html index.htm;

        try_files $uri $uri/ @rewrite;

        location @rewrite {
            rewrite ^/(.*)$ /index.php?_url=/$1;
        }

        location ~ \.php {
             include snippets/fastcgi-php.conf;
             # With php-fpm (or other unix sockets):
             fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         #   fastcgi_pass 127.0.0.1:9000;
         #   fastcgi_index /index.php;

            fastcgi_split_path_info       ^(.+\.php)(/.+)$;
            fastcgi_param PATH_INFO       $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include                       fastcgi_params;
        }

        location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
            root $root_path;
        }

        location ~ /\.ht {
            deny all;
        }
    }
  • 访问服务器500端口,进入phpmyadmin登陆界面即配置成功。

4.无缝迁移wordpress博客

  • 上传网站文件到新主机的网站目录并解压。
  • 在新服务器创建一个同名数据库,并导入上面的网站数据库 sql 文件。
  • wp-option表字段option_name为siteurl和home对应的option_value对应修改为http://your-server-address

PHP session机制

转自 https://www.cnblogs.com/acpp/archive/2011/06/10/2077592.html

一、默认机制,用磁盘文件来实现PHP会话。php.ini配置:session.save_handler = files

1、session_start()

A、 session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,但是有的系统是 session.gc_probability =0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。 session.gc_probability =1
session.gc_divisor =1000
session.gc_maxlifetime =1440 //过期时间 默认24分钟
//概率是 session.gc_probability/session.gc_divisor 结果 1/1000, 

B、 session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,这个值可以从php.ini找到 session.name = PHPSESSID(默认值)

C、 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端。相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。

setcookie(session_name(),
    session_id(),
    session.cookie_lifetime, // 默认0
    session.cookie_path, // 默认'/'当前程序跟目录下都有效
    session.cookie_domain, // 默认为空
 )

D、 如果存在那么session_id =$_COOKIE[session_name];然后去session.save_path指定的文件夹里去找名字为’SESS_』.session_id()的文件。读取文件的内容反序列化,然后放到$_SESSION中。

2、 为$_SESSION赋值

比如新添加一个值$_SESSION[『test』] =’blah』; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.      这个阶段有可能执行更改session_id的操作,比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上,
比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id。

 if (isset($_COOKIE[session_name()])) {
     setcookie(session_name(),'',time() -42000,'/'); // 旧session cookie过期
 }
 session_regenerate_id(); // 这一步会生成新的session_id
 // session_id()返回的是新的值

3、 写入SESSION操作

在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,可能需要创建新的文件。

4、 销毁SESSION

SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多:
A、 setcookie(session_name(),session_id(),time() -8000000,..); // 退出登录前执行
B、 usset($_SESSION); // 这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据
C.、session_destroy(); // 这个作用更彻底,删除$_SESSION 、session文件和session_id 当不关闭浏览器的情况下,再次刷新,B和C都会有COOKIE传过来,但是找不到数据

附:如何设置一个严格30分钟过期的Session
http://www.laruence.com/2012/01/10/2469.html