SSI说明

一、SSI
Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均支持SSI命令。
它的工作原因是:在页面内容发送到客户端之前,使用SSI指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用SSI是一种简便的方法,将内容存入一个包含文件中即可,不必将其输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示Web服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。

二、Nginx配置
ssi: 默认值off,启用ssi时将其设为on
ssi_silent_errors: 默认值off,开启后在处理SSI文件出错时不输出错误提示”[an error occurred while processing the directive]”。
ssi_types: 默认是text/html,所以如果需支持html,则不需要设置这句,如果需要支持shtml则需要设置:ssi_types text/shtml
三个参数可以放在http, server或location作用域下

三、Apache配置
AddType text/html .shtml .html
AddOutputFilter INCLUDES .shtml .html
Options Indexes FollowSymLinks INCLUDES IncludesNOEXEC

四、file和virtual
file可以包含一些指令,virtual不可以

五、语法
<!–#include virtual=”test.html” –>

&lt;!--#include file="test.html"--&gt;

参考:http://man.chinaunix.net/newsoft/ApacheManual/howto/ssi.html

http://nginx.org/en/docs/http/ngx_http_ssi_module.html

Composer

Composer是PHP中用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮你安装这些依赖的库文件。

如果A依赖B的版本是1.0.0,如果C依赖B的版本是2.0.0,项目当中是否没导入同一包用不同版本的。

PHP的自动加载可以使用__autoload()和spl_autoload_register()两种机制,但官方推荐使用和spl_autoload_register
更多参考:http://php.net/manual/zh/language.oop5.autoload.php

Composer提供了四种自动加载的方式,分别是PSR-0、PSR-4、生成classmap以及直接包含files。
PSR-0要求目录名称和命名空间层层对应,会导致目录结构容易变得比较深。虽然已被官方废弃,但因为主流框架都已实现psr-0,因此composer仍然使用psr-0来向下兼容。按照PSR-0的规则,当试图自动加载 “Foo\Bar\Baz” 这个class时,那么会去寻找”src/Foo/Bar/Baz.php”。

psr-4方式,是composer推荐使用的一种方式,也是psr-0的替代方案,因为在PSR-0中目录结构要与命名空间层层对应,无法插入一个单独的目录。

classmap方式,则是通过配置指定的目录或文件,然后在Composer安装或更新时,它会扫描指定目录下以.php或.inc结尾的文件中的class,生成class到指定file path的映射,并加入新生成的 vendor/composer/autoload_classmap.php 文件中

files方式,就是手动指定供直接加载的文件

PHP反射机制

PHP反射机制它是用来导出或提取出关于类、方法、属性(私有保护等属性也能获取)、参数等的详细信息,包括注释。

<?php

class Test{
    public $var1 = 'var1';
    public $var2 = 'var2';
    private $var3 = 'var3';
    public function method1() {
        echo '1';
    }
    public function method2(){
        echo '2';
    }
    private function method3($v1, $v2, $v3) {
        echo '3' . $v1;
    }
}
print_r(get_class_methods('Test'));
print_r(get_class_vars('Test'));
//用反射类可以获得私有属性和私有方法
$ref = new ReflectionClass(new Test());
print_r($ref->getMethods());
print_r($ref->getProperties());

//执行私有方法
$ref = new ReflectionMethod('Test', 'method3');
$params  = $ref->getParameters();
$arg = [];
foreach ($params as $param) {
    if($param->getName()) {
        $arg[] = '参数1';
    }
}
//设置可见
$ref->setAccessible(true);
$ref->invokeArgs(new Test(), $arg);

更多内容参考:http://php.net/manual/zh/book.reflection.php