框架篇:4.入口文件

PHP DIY系列–一起手写一个api框架

回顾

上一节我们完成了从路由解析到数据输出的过程,并且之前已经完成了Request的编写,这一节我们写完入口文件,真正的将我们的web应用跑起来了。


入口文件里需要做些什么呢?

还记得那个流程图吗?

简单流程图

我们需要加载配置,实例化Application并运行,并且引入后面可能遇到的一些常量。

<?php

require __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'library'.DIRECTORY_SEPARATOR.'System.php';

// 加载配置
$config = require SF_LIBRARY_PATH.'Config.php';


$config['debug'] = ($config['debug']?? SF_DEBUG);

if ($config['debug']) {
    ini_set("display_errors", "On");
    error_reporting(E_ALL);
}

// composer自动加载
require __DIR__ . '/../vendor/autoload.php';

// 实例化应用并运行
$app = new Library\Application(new Library\Https\Request() ,$config);
$app->run();

知识点:

  1. __DIR__是PHP的一个魔术常量,可以理解成当前文件所在路径。DIRECTORY_SEPARATOR是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是PHP的内部常量,不需要任何定义与包含即可直接使用。
  2. ini_set — 为一个配置选项设置值
  3. error_reporting — 设置应该报告何种 PHP 错误
<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

System.php

<?php

// debug默认开启
defined('SF_DEBUG') or define('SF_DEBUG', true);
// 框架开始运行时间
defined('SF_START_TIME') or define('SF_START_TIME', microtime(true));
// 核心文件目录
defined('SF_LIBRARY_PATH') or define('SF_LIBRARY_PATH', __DIR__.DIRECTORY_SEPARATOR);
// 应用目录
defined('SF_APP_PATH') or define('SF_APP_PATH', __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR);
// 入口目录
defined('SF_PUBLIC_PATH') or define('SF_PUBLIC_PATH', __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public'.DIRECTORY_SEPARATOR);

Config.php

<?php
/**
 * 系统配置
 */
return [
    'debug' => true, // 建议开发过程中开启
];

到这里,我们的框架已经可以运行起来了。

运行应用

配置Nginx

server {
    listen       80;
    server_name  saif.com;
    # 框架根目录
    root /Users/sai/Work/www/saif/public;


    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /index.php?$query_string;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    }

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

浏览器输入http://saif.com。

你会看到返回的json数组:

框架入口

备注:前面3行请忽略,是我浏览器的插件自动加入的。

到这里,我们已经完成了基础API框架的开发。


框架篇:4.入口文件
https://blog.puresai.com/2020/02/08/phpframe07/
作者
puresai
许可协议