⽤阿⾥云函数计算部署thinkphp5.1 thinkphp国内还是⽤的很多的哈,我⾃⼰就⽤哈。所以研究了⼀下⽤函数计算部署tp5。
其中借鉴和学习了@rsong 的⽂章:《》
步骤:
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-beijing.fc.aliyuncs";
#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_POR }
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' }
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) {国内php空间
#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.简单的测试了⼀下,应该没什么问题。⾸次发布在阿⾥云博客,有什么问题请来原⽂留⾔哈。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。