新浪sae上php部署 本地IO

sae文档

本地 IO

考虑到安全和分布式问题,PHP 运行环境对本地的 IO 做了限制:

  • 应用可以以只读权限访问应用目录以及 PHP 语言的系统库目录。
  • 可写 TmpFS
  • 为最大程度降低应用移植的难度,PHP 为 Storage、Memcached 提供了 wrapper 封装,用户可以像读写文件一样来读写 Memcached 和 Storage。

其中 TmpFS 的路径可以通过 SAE_TMP_PATH 这个全局变量获取,该路径具有写权限,用户可以往这个目录下写文件。

警告

  • 临时文件的生存周期等同于 PHP 请求,也就是当该 PHP 请求完成执行时,所有写入 TmpFS 的临时文件都会被销毁
  • TmpFS 是本地临时文件,不是共享存储,而新浪云是全分布式环境,所以不同请求之间无法通过 TmpFS 共享操作文件
  • TmpFS 操作的文件限于 SAE_TMP_PATH 目录内,这个目录对每个应用是不一样的
  • TmpFS 的文件为纯内存存储

Wrappers

PHP 自 4.3 版本以来,引入了 stream 流的概念,简单说,就是可以用通用的 IO 读写函数来操作各种资源,比如:tcp、udp、http、ftp 等等,这样做的好处是统一了接口的封装。这就像在 Unix 中将各种设备都抽象成文件,你可以使用 read/write 来操作各种设备,这样统一了操作接口,易于理解和使用。Wrappers 就是用来告诉 stream 流该如何处理(读写)特定的资源。

Wrappers 使用非常简单,比如下面就是一个最常见一个使用 Wrapper 的语句:


$c = file_get_contents("http://sae.sina.com.cn");
?>

这里就是使用 http:// Wrapper 实现抓取远程内容并赋值给一个变量的操作。

由于新浪云的 PHP 运行环境并不提供持久性本地 IO 能力,所以 PHP 运行环境提供了提供了 Memcached,Storage,KVDB 的 Wrappers 来方便开发者迁移原有程序。

如果你的原有程序中,使用了本地文件型缓存,那么你可以方便地使用 saemc:// 替换本地文件缓存的前缀。

如果你的原有程序中,有文件存储的需求,你原来可能是通过 NFS 或者就是单机提供的存储服务,那么你可以方便地使用 saestor:// 或 saekv:// 来替换原来的存储前缀,注意存储的用途是用于文件落地的永久存储,任何缓存、中间临时交换数据的需求都是不适合使用 Storage 和 KVDB 存储的。


# 使用"saekv://"这个 Wrapper 将配置文件 config.php 的内容以"config.php"为 key 保存到 KVDB 中,
# 然后用 include 引用了这个文件
file_put_contents('saekv://config.php','');
include 'saekv://config.php';
?>

重要

使用 Wrappers 请要先初始化相应的服务,上例中 KVDB 服务必须是开启的状态。

核心模块

MySQL 相关 新浪云提供的 MySQL 驱动是原生的,支持 mysql、mysqli 和 pdo_mysql 三个模块。
Session 新浪云提供了 session cluster,使用标准的 session 相关函数即可。
Memcached 新浪云提供的 memcache 模块,调用 memcache_connect() 时,会忽略传入的地址参数,直接获得连接句柄。Memcache 的 hash 使用的是一致性 hash。
GD 为保证兼容性,我们也提供了原生的 GD 模块,但由于 GD 效率问题,我们并不很鼓励使用。
cURL cURL 目前已经基本做到了基本兼容。注意新浪云的 cURL 是重载了 FetchURL 服务的,所以使用 cURL 本质上会不断消耗带宽资源。
XhProf 为方便开发者调试程序,我们也提供了 XHProf 模块,具体使用见面板的”XHProf”即可。
Yar Yar 是一个轻量级的并行 RPC 框架。
Imagick Imagick 是用 ImageMagic API 来创建和修改图像的 PHP 官方扩展。
PHP-Redis Redis 官方推荐的 PHP Redis 客户端。

注解

其中,mysql 系列函数已经在 PHP 5.5 及以上版本中被废弃,建议使用 PHP 5.6 环境的用户使用 mysqli 和 pdo_mysql 进行数据库连接。

你可能感兴趣的:(PHP7)