php Symfony应用程序正在将配置文件写入临时目录

56lgkhnf  于 2022-11-21  发布在  PHP
关注(0)|答案(3)|浏览(149)

我继承了一个旧的Symfony应用程序(Symfony1.4),不得不将其迁移到一个新的服务器上。新服务器的管理员抱怨应用程序每分钟都会将文件写入/tmp目录:
来自管理员的部分示例输出:

-rw-------  1 www-data  www-data      17133 Dec 18 14:45 config_routing.yml.php4VSPbj
-rw-------  1 www-data  www-data      17133 Dec 18 14:47 config_routing.yml.php8ZZlxn
-rw-------  1 www-data  www-data      17133 Dec 18 14:38 config_routing.yml.php9NH03d
-rw-------  1 www-data  www-data      17133 Dec 18 14:38 config_routing.yml.phpGA9YrM
-rw-------  1 www-data  www-data      17133 Dec 18 14:45 config_routing.yml.phpO9fYz5
-rw-------  1 www-data  www-data      17133 Dec 18 14:47 config_routing.yml.phpOiXAYC
-rw-------  1 www-data  www-data      17133 Dec 18 14:43 config_routing.yml.phpptNyFw

和这些文件:
您可以在这里输入您的配置信息。
我已经确保在生产环境中禁用了调试,但是仍然会发生这种情况。有人知道是什么原因导致了这种情况吗?

fcipmucu

fcipmucu1#

应用程序缓存目录似乎不存在,sfConfigCache类使用的tempnam()函数默认使用系统临时目录。
默认位置是./cache,创建它并使其可由apache写入。
要了解所发生的情况,请参阅sfConfigCache类中的代码片段:
第344行:$tmpFile = tempnam(dirname($cache), basename($cache));这里创建了/tmp/config_routing.yml.php*文件,几行之后将被重命名或复制:

if (!@rename($tmpFile, $cache))
{
  if (copy($tmpFile, $cache))
  {
    unlink($tmpFile);
  }
}

显然,重命名和复制都失败了。

hc2pp10m

hc2pp10m2#

Symfony创建了yml配置文件的缓存版本,因此它不必在每次请求时重新解析它们,这在开发和生产中都发生。
防止这些错误的最简单方法是为Apache www-data用户(或Apache运行的任何用户)启用写权限。例如:
sudo chmod 775 /tmp
或者,通过添加/修改以下行,在settings.yml文件中禁用缓存:
prod: .settings: cache: false
如果你的应用程序覆盖了系统默认设置,也可能需要在它们的配置文件中完成此操作。

qlfbtfca

qlfbtfca3#

我有一个类似的问题,有很多文件some.classes.phpRT8i4j5填充了/tmp目录。
我发现的是不同的,但仍然希望它能帮助别人。我的情况是因为我把日志级别调试在生产中,这显然不是一个好的做法。所以我不得不把它放回错误,而不是这里是例子,文件位置是app/config/config_prod.yml -〉更改级别:调试到绿色光标框中的错误。祝你好运!

相关问题