当前位置: 首页 > news >正文

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

thinkphp国内还是用的很多的哈,我自己就用哈。所以研究了一下用函数计算部署tp5。
其中借鉴和学习了@rsong 的文章:《十分钟上线-函数计算玩转 WordPress》

这里是TP5的演示:https://31199382.cn-beijing.fc.aliyuncs.com/2016-08-15/proxy/web-site/tp5/
其实也没什么好演示的,就是纯净的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 RingCentral\Psr7\Response;
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',

好了,至此就部署好了。

ps.简单的测试了一下,应该没什么问题。首次发布在阿里云博客,有什么问题请来原文留言哈。

相关文章:

  • 01什么是面向对象,面向对象的基本操作
  • day-19 django2
  • Go 语言编译器的 //go: 详解
  • 《2019年世界发展报告》发布,阿里巴巴助力小企业发展创造就业
  • @Service注解让spring找到你的Service bean
  • python 3.5 解决csv 读入中的'utf-8' codec can't decode办法
  • 2018 JVM 生态报告:79% 的 Java 开发者使用 Java 8
  • 微信小程序 - 使用七牛云 API 截取第 n 秒图像为封面图
  • 《netty入门与实战》笔记-03:数据传输载体 ByteBuf 介绍
  • 【转】使用 lsof 查找打开的文件
  • 实验报告五201521460014 综合渗透
  • EDMA3浅析
  • Lua与C/C++的交互
  • java网络编程之IO
  • 最好用的中间人***工具mitmproxy
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • C# 免费离线人脸识别 2.0 Demo
  • Hibernate最全面试题
  • iOS小技巧之UIImagePickerController实现头像选择
  • Odoo domain写法及运用
  • Sass Day-01
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SQLServer之索引简介
  • 大主子表关联的性能优化方法
  • 服务器从安装到部署全过程(二)
  • 理清楚Vue的结构
  • 前端技术周刊 2019-02-11 Serverless
  • 驱动程序原理
  • 深入浅出webpack学习(1)--核心概念
  • 树莓派 - 使用须知
  • 思维导图—你不知道的JavaScript中卷
  • 我的zsh配置, 2019最新方案
  • 用Canvas画一棵二叉树
  • 原生Ajax
  • 正则表达式
  • ​Java并发新构件之Exchanger
  • ​虚拟化系列介绍(十)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # .NET Framework中使用命名管道进行进程间通信
  • #大学#套接字
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (理论篇)httpmoudle和httphandler一览
  • (生成器)yield与(迭代器)generator
  • (转)ORM
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)母版页和相对路径
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net Application的目录
  • .NET BackgroundWorker