Symfony app将配置文件写入tmp目录

时间:2015-01-12 09:19:47

标签: php symfony1 symfony-1.4 tmp

我继承了旧的Symfony应用程序(Symfony 1.4)并且必须将其迁移到新服务器。我没有Symfony的经验,但迁移进展顺利,除了一件事,一切正常;新服务器的管理员抱怨应用程序每分钟将文件写入/ 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

以及这些文件:

config_settings.yml.php,config_databases.yml.php,config_autoload.yml.php。

我确保在prod环境中禁用调试,但这仍然会发生。有没有人知道可能导致这种情况的原因?

2 个答案:

答案 0 :(得分:2)

似乎应用程序缓存目录不存在,tempnam()类使用的sfConfigCache函数默认使用系统临时目录。

默认位置为./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);
  }
}

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

答案 1 :(得分:0)

Symfony创建了yml配置文件的缓存版本,因此它不必在每个请求上重新解析它们。这在开发和生产中都会发生。

防止这些错误的最简单方法是为Apache www-data用户(或运行Apache的任何人)启用写权限。 e.g:

sudo chmod 775 /tmp

或者,您可以通过添加/修改以下行来禁用settings.yml文件中的缓存:

prod: .settings: cache: false

如果它们覆盖了系统默认值,则可能还需要在应用程序的配置文件中完成。例如,在文件apps/frontend/config/settings.yml