You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google App Engine标准环境部署Codeigniter4提示/tmp/cache无写入权限如何解决

解决方案

1. 补充子目录自动创建逻辑

你已经修改了app/Config/Paths.php中的$writableDirectory为/tmp/,但CodeIgniter 4默认需要在可写目录下使用cache、logs、session等子目录,Google App Engine的/tmp目录虽然可写,但框架默认的目录创建逻辑可能在运行时没有触发成功。

注意:请确保你修改的是app/Config/Paths.php而非system/Config目录下的同名文件,system目录下的文件会在composer更新时被覆盖,修改不生效。

你可以在项目入口文件public/index.php的最开头加入以下代码,提前创建所需的子目录并设置正确权限:

<?php
$requiredDirs = [
    '/tmp/cache',
    '/tmp/logs',
    '/tmp/session',
    '/tmp/uploads'
];
foreach ($requiredDirs as $dir) {
    if (!file_exists($dir)) {
        mkdir($dir, 0755, true);
    }
}
// 原有index.php的代码放在本段之后

2. 检查缓存配置避免硬编码

打开app/Config/Cache.php,确认$file参数的path配置没有写死原有writable/cache路径,正确配置应该是使用框架自动生成的WRITEPATH常量:

public $file = [
    'path' => WRITEPATH . 'cache',
    'mode' => 0644,
];

WRITEPATH常量会自动读取你在Paths.php中配置的$writableDirectory值,不需要手动替换为固定路径。

3. 修正app.yaml入口点配置

你当前的app.yaml中注释掉了entrypoint,Google App Engine PHP7/8运行时默认会从项目根目录查找index.php,而CodeIgniter 4的入口文件在public目录下,需要显式指定entrypoint避免路径解析错误:

runtime: php74
entrypoint: serve public/index.php

4. 修正composer配置

你当前使用的composer.json是CodeIgniter4框架本身的配置,不是项目级配置,会导致依赖加载异常。建议使用官方项目模板的composer.json,或者部署前先执行composer dump-autoload重新生成自动加载文件。

5. 可选优化

如果开启了debug模式,框架会额外频繁校验缓存目录的可写性,你可以在.env文件中设置CI_ENVIRONMENT = production关闭debug模式,减少不必要的校验逻辑。另外Google App Engine的/tmp是实例级临时存储,实例重启后数据会清空,如果需要持久化缓存可以改用Redis、Memcache等内存存储方案。

内容的提问来源于stack exchange,提问作者Fian Julio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:57:04