每个目录的PHP ini指令取决于request_uri

时间:2012-04-09 08:10:46

标签: php apache symfony1 apache2

我正在尝试更改上传的大小限制。我知道我必须在Apache配置中更改这些指令(有些不能使用ini_set更改)

php_value session.gc_maxlifetime 3600
php_value max_input_time         3600
php_value max_execution_time     3600
php_value upload_max_filesize    10M
php_value post_max_size          110M

不幸的是,我不能直接在我的虚拟主机的<Directory>中执行此操作,因为目录总是相同的(我使用前端控制器,因此所有请求都通过index.php&amp;派遣到适当的控制器 - 我使用Symfony)

那么,我的问题是如何避免这个问题呢?我不想为整个应用程序设置这些值,仅用于特定操作。

2 个答案:

答案 0 :(得分:2)

这是可能的,具体取决于您映射到前端控制器的方式。如果您是通过重写规则执行此操作,则可以使用<Location>而不是<Directory>块来指定要更改其设置的路径块。 <LocationMatch>允许你使用正则表达式来做同样的事情。

如果您的所有外部网址都以/index.php?开头,那么请考虑为这些请求设置重定向规则:

RewriteEngine on
RewriteRule ^foo/$ ^/index.php [L]

<Location /foo/>
    php_value ...
</Location>

如果情况并非如此,您需要告诉我们有关您的申请结构的更多信息。

答案 1 :(得分:1)

一种可能的解决方法是创建一个目录,其中包含一个实现您的操作的PHP文件,并且该脚本使用“自定义”URL提交POST目标文件。处理完输入后,您将通过index.php重定向回正常页面。它不干净,但应该有效。

也值得考虑一下你从中获得了什么。

  • 仅在一个操作中设置session.gc_maxlifetime没有任何意义(特别是如果你正在增加它)
  • 如果max_input_time也是一小时,
  • max_execution_time限制为一小时也没有意义
  • max_execution_time可以在运行时设置
  • 其他两个指令不能在运行时设置,但POST大小无关紧要,上传的文件大小可以在运行时检查并相应处理

那么,这里的目标是什么?