×

sae部署php

sae部署php(phpstudy部署网站)

admin admin 发表于2023-03-26 00:32:18 浏览44 评论0

抢沙发发表评论

本文目录一览:

thinkPHP部署到sae后 display不出来html,网页空白也没报错。(一模一样的代码,在本地一切正常。)

查看下是否能执行php, 通过查看phpinfo,看看php版本是否符合thinkphp的版本要求(thinkphp3.2

PHP版本要求

PHP5.3以上版本(注意:PHP5.3dev版本和PHP6均不支持)

php部署到新浪云sae不能正常运行了,求解

sae文档

运行环境

基本环境

新浪云 PHP 运行环境目前的 Web 服务器使用的是:

CentOS-6.x

Apache-2.2.x

PHP-5.3.x / PHP-5.6.x

Web 服务器运行在 64 位 Linux 环境下。

Apache 运行在 Prefork 模式下,即每个请求都会对应一个 Apache 进程,请求结束后该进程才能服务于下一个请求。平台通过模块方式扩展了 Apache 和 PHP 的相关功能。

禁用函数和类

出于平台安全性考虑,我们禁用了以下函数和类,禁用的标准主要有四点:

出于对安全性的考虑

出于对资源管理的考虑

不常用的 API

我们提供更好替代方案的 API

禁用的函数:

symlink

link

exec

system

escapeshellcmd

escapeshellarg

passthru

shell_exec

proc_open

proc_close

proc_terminate

proc_get_status

proc_nice

dl

pclose

popen

stream_socket_server

stream_socket_accept

stream_socket_pair

stream_wrapper_restore

mail

mb_send_mail

posix_kill

apache_child_terminate

apache_lookup_uri

apache_reset_timeout

apache_setenv

virtual

socket_create

socket_create_pair

realpath_cache_get

禁用的类:

SQLiteDatabase

SQLiteResult

SQLiteUnbuffered

SQLiteException

沙箱

代码和数据的隔离:每个应用在运行期间,只能“看”到自己的代码和数据,即 A 应用无法访问 B 应用的代码和数据。注意,这里提到的在 Web 服务器上的数据,往往指一些中间处理过程的临时数据,并非最终落地的数据,比如用户上传照片会临时存储到 TmpFS。-sae部署php

连接数的隔离:我们知道,程序写的不好,很容易导致阻塞,并进一步导致连接数的飙升。单个应用过多占用 Apache 连接数,原因往往是多方面的,应用请求外部资源被阻塞是一个最为常见的因素,另外应用页面过大浏览器下载慢也是常见因素之一。公有云平台同一时刻往往运行着大量的应用,如果某一应用出现连接数异常,最直接的后果是整个平台上的所有应用都将陷入瘫痪。新浪云平台目前有设置“应用最大 HTTP 并发连接数”,目前这个值是 500,如果应用平均单个请求处理时长是 100ms,那么该应用每秒的 HTTP 并发连接将可以到达 5000,每天的请求超过 1 亿没有问题。但如果您的应用平均每个请求处理时长 2 秒,那么该应用每秒的 HTTP 并发连接只能到达 250,每天支撑的请求数将在千万。总体而言,尽量迅速处理完请求对应用是有利的,而且也是平台所鼓励的。-sae部署php

内存隔离:目前新浪云平台上对单个 PHP 脚本的处理,设置了 128MB 的上限 (max_memory,ini_set 不可修改),我们认为这个设置是一个相对很高的值,可以说能够满足绝大部分应用的需求。设想一台服务器 8G 内存,如果每个 PHP 处理都消耗 64M 内存,那么该服务器最多只能同时运行 128 个 PHP 脚本。新浪云引入了”应用最大并发内存数“的概念,目前的设置是 4GB。如果应用程序单个请求的内存消耗平均在 16MB,那么可同时运行 256 个请求,这和上面的并发连接数的设定是基本一致的。-sae部署php

CPU 隔离:这主要是通过新浪云的配额系统来达到 CPU 时间的隔离。每个应用都有 CPU 时间消耗的分钟速度限制,避免了某一应用过多非法获取 CPU 资源导致其它应用响应慢的问题。

目前新浪云平台上允许的“单请求最大存活时长”是 300 秒 。

注解

当应用并发超过限制,系统会返回 508 错误,并显示 Connections out of quota。当应用内存占用超过限制,系统会返回 509 错误,并显示 Memory usage out of quota。-sae部署php

环境变量

您可以通过打印 PHP 的全局变量 $_SERVER 来获取跟新浪云相关的环境变量信息,每个环境变量的信息如下:

变量名

说明

HTTP_APPNAME    标志该请求属于哪个应用  

HTTP_APPVERSION    标志该请求对应该应用的哪个版本  

HTTP_ACCESSKEY    该应用访问各种服务资源的帐号  

HTTP_SECRETKEY    该应用访问各种服务资源的密码  

HTTP_APPCOOKIE    一些和 app 管理相关信息  

警告

不要直接打印出 $_SERVER 变量,这样可能会造成应用的 AccessKey 和 SecretKey 的泄露。为了应用的安全考虑,请保护好自己的 AccessKey 和 SecretKey。

常用字体文件路径:

constant SAE_Font_Sun

宋体字体文件路径

constant SAE_Font_Kai

楷体字体文件路径

constant SAE_Font_Hei

文泉驿正黑字体文件路径

constant SAE_Font_MicroHei

文泉驿微米黑字体文件路径

全局函数

is_https()

判断客户端是以 http 还是以 https 的方式连接。

返回:

如果是 https 连接返回 true,否则返回 false。    

把php程序运行到sae上有什么用

首次听说SAE是在丛磊大牛在两年多前的一次小范围讲座中,但是真正开始使用SAE则是在2013年9月。当时自己的个人网站使用的还是传统的虚拟主机服务,运营商的不作为和服务器的频繁抽风导致我的小站几乎无法访问。忍无可忍的我再次想到了SAE。说起来自己也是学计算机的学生,应该沿着IT发展趋势以实际行动拥抱云计算。但是SAE毕竟不是虚拟主机,而是PaaS服务。这里简单写一篇短文,介绍一下自己的用PHP开发网站迁移到SAE的经历过程中总结的一些小经验。-sae部署php

以文章或类文章内容为主的网站,或者说CMS,通常的架构是PHP处理程序+MySQL数据库+前端模板。PHP处理程序对数据库进行读写操作,并将处理后的数据套用前端模板呈现给Web用户。但是这类程序部署或迁移到SAE时会主要遇到两个问题,一是存储空间的域名和程序空间的不同,二是程序空间不可写。这就使得以前直接生成静态页面的程序无法直接使用了,也会使得在程序空间生成缓存数据的程序无法直接使用了。怎么解决这些问题呢?-sae部署php

一、生成静态页面?

由于程序空间不可写,生成静态页面只能将页面创建到KVDB、MemCache(以下简称MC)和Storage中。但是前两者是不能被Web用户直接访问的,而Storage空间的域名和主域名不同,直接将页面跳转到Storage空间无疑对Web用户不太友好。因此,需要结合URL重写功能和PHP程序来完成这一任务。-sae部署php

1、PHP程序+Storage存储

简单来说,就是Web用户访问一个URL,但是该URL并不存在,通过URL重写转移到某个PHP程序,比如show.php吧,然后将URL中的path作为参数传递给show.php。show.php以该path到Storage中找到相应的静态页面,然后加载该文件并显示出来。但是这里用header功能跳转到该页面是没有意义的,URL将又转到Storage空间的域名了。因此,需要使用Storage服务的read方法,将文件读取出来,再在show.php中显示出来。-sae部署php

需要说明的是,Storage的流出是要计费的,而show.php读取后再以HTTP方式在用户的浏览器中显示出来还是需要计费的,个人猜想这样做会造成网站内容部分的双重计费(个人猜测未经证实,请大家指正)。而MySQL、KVDB和MC是按照请求数量计费的。考虑到Storage的流出计费是150云豆/GB,而另外三种中最贵的MySQL的请求计费是150云豆/百万次,因此,当平均每次请求的流量(1G/100万),即约1.05KB时,使用MySQL就更便宜的了。然而,现在网页的源文件动不动就超过1KB了,所以不一定非得生成静态。同时,生成静态后的网页也不便于更新或更改风格。-sae部署php

2、PHP程序+KVDB或MC

和前面的类似,无非就是将生成的静态页面以值的形式存储在KVDB或MC中。这种存储和Storage相比,计费的方式发生了变化,是按照请求次数计费的。KVDB是50云豆/百万次,MC是25云豆/百万次。但是需要注意的是,MC的存储费用相当昂贵,是200云豆/GB•天,而KVDB、MySQL和Storage的存储费用都是5云豆/GB•天。因此,当网站内容稍微多一点点的时候,使用KVDB要比MC更合适。-sae部署php

MySQL和KVDB的计费相比,MySQL的请求费用是KVDB的3倍。但是使用MySQL不需要生成静态页面,使用KVDB时相当于读取MySQL后生成的静态页面存储在KVDB中,多占用了一份存储空间(别告诉我说准备将数据只存储在KVDB中,真要是SAE的KVDB再瘫痪一次,那网站就麻烦大了)。-sae部署php

因此,我的网站在实现方式上,首页和列表页等频繁访问的页面中通过MySQL查询的结果存储在KVDB中,减少对数据库的查询请求操作。而其他页面不再缓存,直接从数据库中读取,这样做可以更好的更新页面中的访问量等动态信息。如果考虑进行进一步优化,可以统计页面的访问量,将访问量较大的页面存储到KVDB中。反正现在PHP的CPU时间是不计费的,多增加几个条件判断语句也没啥^_^-sae部署php

二、缓存

接下来讨论缓存的问题。网站中经常会有一些数据需要运行时加载而不是直接写到程序代码里,这样可以便于在网站后台直接进行设置而不是每次都修改程序代码文件。典型的,比如网站栏目列表、页面显示的一些配置、网站的一些全局配置等。这些配置虽然存储在MySQL中,但是通常还是生成缓存文件在运行时加载。这里使用KVDB和MC都可以。KVDB每次请求贵但是存储很廉价。MC每次请求便宜一半但是存储则为40倍。具体怎么选择看用户了。这里需要说明的是,既然按照请求次数计费而不是按照流量计费,那么最合适的优化方法是将全站所有页面都通用的数据存储到一个缓存中,这样就极大程度减少了因为请求数量造成的计费。-sae部署php

三、模板

模板文件应该放到什么地方呢?因为程序空间不能写,而KVDB和MC不能直接由用户上传和修改,因此要想通过网站后台方便地修改模板,还是应该将模板文件放到Storage中。我的做法是,将模板文件放到Storage中,需要修改时,在网站后台的编辑器中修改,或者在本地修改后使用Cyberduck上传。否则,每次修改模板都得重新部署代码实在是太麻烦了。-sae部署php

模板直接放到Storage中也不便使用,因为读取Storage要比读取KVDB/MC要慢。特别是模板这种每个页面都会用到的文件,还是应该以缓存的方式使用。我的做法是,将模板文件放在Storage中,然后读取它,将其中的一些模板标记改为相应的PHP代码,存储到KVDB中。-sae部署php

但是,这种嵌入了PHP代码的“编译”后的模板怎样执行呢?KVDB提供的get方法只能得到值,因为这些值不全都是PHP代码,毕竟还有html的标签,不能被evel。所以,需要使用KVDB的wrapper,以include的方式加载它。PHP中的include是可以有返回值的,可以据此判断是否成功地加载了缓存。如果不成功,可以重新生成缓存再加载。如果重新生成还不成功,为了网站的正常运行,可以从Storage中加载模板原文件再进行处理。这样可以保证即使部分服务出现故障时网站依然可以最大程度保持正常访问。-sae部署php

综上,我的网站迁移到SAE后的实现思路就是:

1、频繁访问的页面存入KVDB,不频繁访问的页面只存储在数据库,页面均动态生成,用AppConfig实现伪静态。

2、通用缓存尽可能存储到一个KVDB或MC的键值中。

3、模板源文件放到Storage中,模板标签预处理为PHP代码后缓存到KVDB或MC中

4、通过include加载缓存,并在include返回异常时重新生成缓存并加载,如果重新生成缓存的过程发生异常则不再使用缓存而直接输出。

我的个人网站已迁移到SAE中,除去上次SAE故障导致KVDB出现异常之外,一直稳定运行。欢迎大家围观和留言。由于使用SAE也不过半年,才疏学浅。文中的错误还请大家批评指正。

thinkphp怎么部署到ubuntu

1、开启服务

部分必需使用服务没有默认开启,必需开启后才能正常使用Thinkphp sae引擎,使网站正常工作。必需服务:MySql服务,用于mysql数据库存储数据、Strorage服务,用于存储上传文件、Memcache服务,用于存储Thinkphp 缓存、KVDB,用于存储键值数据。根据网站需要开启相关服务,以上为常见的sae服务。-sae部署php

2、缓存清除

如果开启了调试输出trace,然后关闭了,但是网页还是显示trace信息,需要把网站的缓存数据删除后生效,点击Memcache服务,Memcache状态下选择清空即可,如果没有在sae上部署则是直接删除相关缓存文件。-sae部署php

3、原生sae服务

由于sae提供原生服务不能与其他环境兼容,为使网站移植性更好,应该尽量少直接使用原生服务,可以选择使用Thinkphp中相应的方法来实现。sae禁止本地IO,所有直接操作本地IO的函数都失效,需要使用sae其他服务来实现,这点一定要注意。-sae部署php

4、代码上传

可以直接上传代码包到sae上,可以使用svn来上传代码

5、屏蔽index.php

在代码根目录下的config.yaml中加入以下代码即可

handle:

- rewrite: if(!is_dir() !is_file() path~"^(.*)$") goto "index.php/$1"

ThinkPHP3.2部署新浪sae怎么做

绑定域名要咨询saemail@sina.cn,域名必须已备案,经过SAE同意绑定的独立域名,只需要在其DNS中将其对应的域名CName到目前的二级域名即可使用。

sae更适合开发者,一些函数被禁用不能直接写操作,需要使用sae提供的类库~