12

我正在 Puppet 中迈出第一步,但遇到了问题。我已经在 Linux 服务器上安装了 PHP,我想对php.ini文件进行一些细微的更改。我不想ini用存储库中的一个文件覆盖整个文件,只需更改/创建一个简单的配置值。

我想确保upload_max_filesizein的属性php.ini具有10M.

我怎样才能做到这一点?

4

4 回答 4

36

我的首选选项是单独保留 php.ini,并让 puppet 在 php 的 conf.d 目录中创建一个文件以覆盖您要更改的值。

您对 php.ini 所做的更改越少,当您需要在将来升级 php.ini 时将更改与包提供程序更改合并时,就越容易看到发生了什么。

file {'/etc/php5/conf.d/upload_limits.conf':
  ensure => present,
  owner => root, group => root, mode => 444,
  content => "post_max_size = 10M \nupload_max_filesize = 10M \n",
}
于 2012-08-24T21:03:39.823 回答
31

基本上有3个选项:

  1. 在 puppet 中使用 augeas 支持(您需要安装 ruby​​ augeas 库),例如:

    augeas { "php.ini":
      notify  => Service[httpd],
      require => Package[php],
      context => "/files/etc/php.ini/PHP",
      changes => [
        "set post_max_size 10M",
        "set upload_max_filesize 10M",
      ];
    }
    

    您可以使用“augtool ls /files/etc/php.ini”查看这些部分以了解 augeas 如何解析文件并使用它来计算出您需要的路径。

  2. 您可以使用执行程序。就像是:

    define set_php_var($value) {
      exec { "sed -i 's/^;*[[:space:]]*$name[[:space:]]*=.*$/$name = $value/g' /etc/php.ini":
        unless  => "grep -xqe '$name[[:space:]]*=[[:space:]]*$value' -- /etc/php.ini",
        path    => "/bin:/usr/bin",
        require => Package[php],
        notify  => Service[httpd];
      }
    }
    set_php_var {
      "post_max_size":       value => '10M';
      "upload_max_filesize": value => '10M';
    }
    

    不幸的是,这个解决方案不理解 php.ini 中的部分,因此添加一个尚不存在的变量将需要额外的努力。如果变量出现在多个部分中,这将做错事(但我正在查看的示例似乎具有所有唯一的变量名称)。这应该适用于存在但用分号注释掉的变量。

  3. 将原始 php.ini 文件复制到您的 puppet 存储库中,并使用 file withsource => 'puppet:///...'content => template(...)完全替换该文件,正如您所指示的那样,您不希望这样做。
于 2012-05-31T20:43:51.203 回答
6

您还可以使用 stdlib 模块中的 file_line 资源。

file_line{ 'php_upload_max_filesize':
  path => '/path/to/php.ini',
  line => "upload_max_filesize = 10M",
}

因为如果不存在完全匹配的行,这会将行附加到文件中,并且由于配置值的最后一个实例优先于文件中较早的那些实例,因此它将起作用。当我只有几件事要改变时,我就是这样做的。

于 2013-02-06T19:42:28.507 回答
2

如果您使用 Apache 作为您的 Web 服务器,另一种方法是在您的 Apache 虚拟主机文件中设置 php 变量(可能在您的 Puppet 清单目录中的某个位置)。

例如:

<VirtualHost *:80>
  ServerName app.dev
  DocumentRoot /srv/app/public
  ## etc...

  php_value upload_max_filesize 10M

</VirtualHost>

这实际上并没有改变 php.ini,但是 - 根据您的设置 - 可能是实现相同效果的简单方法。

于 2014-04-01T14:30:28.837 回答