PhpBoot
🌐

PhpBoot

Tag
Last Edited Time
Dec 20, 2021 08:44 PM
Created
Dec 14, 2020 09:26 AM

配置

APC

PHP配置文件:/usr/local/php/etc/php.ini
 
Get APC Package from official web
linux安装apc服务加速php-红日-51CTO博客
二、APC使用方法1、系统缓存系统缓存是当你安装之后就开始了自行运行,并将php编译后产生的opcode缓存起来,当第二次调用时会对比你在php.ini中设置的超时时间是否过期,类似于memcache过期机制。而apc一般在使用上都只做本地cache这层。 2、用户缓存由开发人员在开发php时用apc_store和apc_fetch函数操作读取、写入,但不支持分布式,而且apc本身最大的利用价值就在于加速php。如果用apc去缓存用户数据,还是推荐memcache。毕竟,涉及到缓存这层的架构已经不是小型网站了。而且memcache支持分布式,使用方便灵活。 apc源码包自带了一个apc.php程序,用来监控系统、用户缓存和占用量数据。 /usr/local/php/bin/phpize./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-configmake && make install Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ Installing header files: /usr/local/php/include/php/ 2) 或查看是否安装成功,(安装后会默认生成apc.so文件在php扩展包中) ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/apc.so (no-debug-non-zts-20100525 根据php版本变动,不一定是这个目录) 3) 或者查看phpinfo信息,是否有apc模块 vim /usr/local/php/etc/php.ini [apc]extension=apc.soapc.enabled = 1apc.cache_by_default = onapc.shm_segments = 1apc.shm_size = 64mapc.ttl = 7200apc.user_ttl = 7200apc.num_files_hint = 0apc.write_lock = On /usr/local/php/sbin/php-fpm 其中有这么一项:apc.stat=1/0这个选项是否启用脚本更新检查。 改变这个指令值要非常小心。 默认值 On 表示APC在每次请求脚本时都检查脚本是否被更新, 如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。 如果设为 Off 则表示不进行检查,从而使性能得到大幅提高。 但是为了使更新的内容生效,你必须重启Web服务器(译者注:如果采用cgi/fcgi类似的,需重启cgi/fcgi进程)。 生产服务器上脚本文件很少更改, 可以通过禁用本选项获得显著的性能提升。 这个指令对于include/require的文件同样有效。但是需要注意的是, 如果你使用的是相对路径,APC就必须在每一次include/require时都进行检查以定位文件。 而使用绝对路径则可以跳过检查,所以鼓励你使用绝对路径进行include/require操作。 [apc]extension=apc.so#加载apc扩展apc.enabled = 1#是否启用APCapc.cache_by_default = on#是否默认对所有文件启用缓冲。 若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存apc.shm_segments = 1#为编译器缓冲区分配的共享内存块数量(建议值为1)。apc.shm_size = 64每个共享内存块的大小(以MB为单位,建议值为128~256)。apc.ttl = 7200#缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。apc.user_ttl = 7200#类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。apc.num_files_hint = 0#Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。apc.write_lock = On#是否启用写入锁。在非常繁忙的服务器上,无论是启动服务还是修改文件,都可能由于多个进程企图同时缓存一个文件而导致竞争条件启用该指令可以避免竞争条件的出现。
linux安装apc服务加速php-红日-51CTO博客
But, the latest version was released on 2012
So just wget it
wget http://pecl.php.net/get/APC-3.1.13.tgz
// unzip
tar xf APC-3.1.13.tgz
cd APC-3.1.13/
// execute
/usr/local/php/bin/phpize
// config
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
// make
make && make install
But Fail!
error: ext/standard/php_smart_str.h: No such file or directory
PHP安装好的头文件目录:/php/include/php/ext/standard/,这些头文件,在php7之前的版本,是包含 php_smart_str.h 的,但7版本中没有 ,而是 php_smart_string.h ,所以需要根据php的版本来下载不同的redis扩展包;
 
 
APC(Alternative PHP Cache 可选的PHP缓存)
APC包含两个功能:用户缓存(用户数据缓存,类似MemCache)、opcode缓存
注意:apc的3.1.14版本存在严重的内存问题,被官方废弃。最新可用的apc版本为3.1.13,仅支持php 5.3.* 。之后的PHP版本中自带了opCache
 

开启OpCache

OpCache在PHP 5.5及之后的版本是默认安装的,不需要我们去下载源码进行编译了,只要在PHP配置文件中开启即可:
💡
enable opcache if APC not work
php.ini
; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
opcache.save_comments=1
⚠️
opcache.load_comments=1 we did not find this one
 
 

WebServer 配置

为了使用PhpBoot,你需要配置 WebServer,将所有动态请求指向 index.php
server {
    listen 80;
    server_name example.com;
    index index.php;
    error_log /path/to/example.error.log;
    access_log /path/to/example.access.log;
    root /path/to/public;

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

    location ~ \.php {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index index.php;
        fastcgi_pass 127.0.0.1:9000;
    }
}
 
 

Restful

当前 RESTful 已经不是新鲜的名词了,抛开抽象的定义,我认为一个通俗的解释可以是:按文件系统的方式去设计接口,即把接口提供的功能,当做是对“目录”的“操作”。比如一个登录接口,按 RESTful 设计,可以是POST /tokens/,即把登录,当做新建一个令牌,这里的/tokens/就是“目录”,POST就是对目录的“操作”。
Principle:
  • 显式地使用 HTTP 方法。
    • 若要在服务器上创建资源,应该使用 POST 方法。
    • 若要检索某个资源,应该使用 GET 方法。
    • 若要更改资源状态或对其进行更新,应该使用 PUT 方法。
    • 若要删除某个资源,应该使用 DELETE 方法。
  • 无状态。
  • 公开目录结构式的 URI。
  • 传输 XML、JavaScript Object Notation (JSON),或同时传输这两者。
 
 

Construction

  • app
    • Controllers
      • Books.php 接口实现
    • Entities
      • Book.php 数据实体定义
  • config
    • config.php 配置
  • public
    • index.php 入口
  • vendor 依赖包
 
 

Swagger

url+/docs/swagger.json

Loading Comments...