用阿里云函数计算部署thinkphp5.1

Posted 987432com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用阿里云函数计算部署thinkphp5.1相关的知识,希望对你有一定的参考价值。

thinkphp国内还是用的很多的哈,我自己就用哈。所以研究了一下用函数计算部署tp5。

步骤:

1.后台创建php7.2环境的函数,创建http触发器,这些就不详细写了,可以去看文档。

2.打开tp5的入口文件(/public/index.php)在namespace think; 这句的下面,加如下代码:

if(!$_SERVER[‘PATH_INFO‘]) $_SERVER[‘PATH_INFO‘] = preg_replace("/^(?s=/)/","",$_SERVER[‘REQUEST_URI‘]);

3.准备tp5源码,在根目录创建index.php文件(作为函数的入口文件),代码如下:
(第一次在阿里云博客上写文章哈,有点手生)

<?php
#自定义的域名,绑定了自定义域名的,可以换成自己自定义的。
$MY_HOST    = "31199382.cn-beijing.fc.aliyuncs.com";
#web目录,默认是tp5的public目录,绝对路径,如:/code/public
$WWW_DIR = ‘/code/public‘;

function handler($request, $context){

    #如果不使用函数计算后台提供的那个厂厂的域名,这句可以注释掉。
    if(strpos($request->getAttribute("requestURI"),"/2016-08-15/proxy") !== false) $request = clearFcHost($request,$context);#兼容 fc后台的url地址

    $uri  = $request->getAttribute("requestURI");
    $file = explode("?", $uri)[0];
    if($file==‘/‘) $uri=‘/‘;#
    $file = $GLOBALS[‘WWW_DIR‘].$file;

    if(file_exists($file) and $uri!=‘/‘){
        if(strpos($uri,".php")) return php_run(basename($file), $request, $context);#php_run
        return static_run($uri);#static_run
    }

    $request = $request->withAttribute("requestURI", "?s=".$uri);
    return php_run(‘index.php‘, $request, $context);# php_run

}

function php_run($name,$request, $context)
{
    return $GLOBALS[‘fcPhpCgiProxy‘]->requestPhpCgi($request, $GLOBALS[‘WWW_DIR‘], $name,[‘SERVER_NAME‘ => $GLOBALS[‘MY_HOST‘], ‘SERVER_PORT‘ => ‘80‘, ‘HTTP_HOST‘ => $GLOBALS[‘MY_HOST‘]],[‘debug_show_cgi_params‘ => false, ‘readWriteTimeout‘ => 15000]);
}
use RingCentralPsr7Response;
function static_run($uri): Response{
    $file_dir = $GLOBALS[‘WWW_DIR‘].$uri; #完整文件路径
    $file_dir = explode("?", $file_dir)[0]; #去掉动态路径
    if(is_dir($file_dir)) $file_dir .= ‘/index.html‘;# 可以这里定义目录的默认索引页
    $handle   = fopen($file_dir, "r");
    $contents = fread($handle, filesize($file_dir));
    fclose($handle);
    return new Response(200, [‘Content-Type‘  => $GLOBALS[‘fcPhpCgiProxy‘]->getMimeType($file_dir),‘Cache-Control‘ => "max-age=8640000",‘Accept-Ranges‘ => ‘bytes‘], $contents);
}

function clearFcHost($request,$context){
    $uri  = $request->getAttribute("requestURI");
    $uri  = str_replace("/2016-08-15/proxy/".$context[‘service‘][‘name‘]."/".$context[‘function‘][‘name‘],"",$uri);
    $request = $request->withAttribute("requestURI", $uri);
    return $request;
}

#错误处理
function error($code) {
    #if($resp->getStatusCode() !=200) return error($resp->getStatusCode());
    return ‘这里还木有写哈~~‘;
}

4.由于函数计算只有/tmp 目录可写,所以要改一下tp5的配置文件
编辑/config/log.php

‘path‘  => ‘/tmp/log‘,

编辑/config/cache.php

‘path‘  => ‘/tmp/cache‘,

好了,至此就部署好了。



以上是关于用阿里云函数计算部署thinkphp5.1的主要内容,如果未能解决你的问题,请参考以下文章

阿里云函数计算对接kafka实战

无需修改代码,用 fcapp.run 运行你的 REST 应用

如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存

无需修改代码,用 fcapp.run 运行你的 REST 应用

阿里云服务器 怎么用git部署代码

阿里云函数计算组件感知线上“异动”:让发布更安全