如何设置更高的memory_limit,post_max_size,以及Apache/PHP中的特定脚本?

tan*_*oan 5 php memory apache

我有一个Web应用程序,将对虚拟主机的所有请求重定向到控制器,然后控制器根据URL决定要包含和运行的文件.有一个Web服务通过POST接受大型XML文件.对于应用程序,我需要memory_limit和post_max_为~32M,但接受XML的服务除外,这需要它们的限制接近1024M. ini_set('memory_limit','1024M')在脚本中工作,但不适用于post_max_size.

我似乎无法弄明白该怎么做.我正在尝试类似的东西:

<VirtualHost *:80>
ServerName test.com
DocumentRoot /var/www/test.com/html


php_admin_value include_path .:/var/www/test.com/includes:/var/www/test.com/includes/libs

php_value session.use_only_cookie 1
<Location />
    php_value memory_limit 32M
    php_value post_max_size 30M
    php_value upload_max_filesize 29M
</Location>
<Location /services/big-service>
    php_value memory_limit 1024M
    php_value post_max_size 128M
</Location>

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.*)$
RewriteCond %{REQUEST_URI} !^/(.*)(html|gif|jpg|png|ico|css|js|dtd|swf|flv|xml)$
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^/(.*)$ /Controller.php/$1 [PT]

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

所以,使用上面的配置,如果Controller.php看起来像

<?php
echo '<pre>';
var_dump(ini_get('memory_limit'));
var_dump(ini_get('post_max_size'));
var_dump(ini_get('upload_max_filesize'));
Run Code Online (Sandbox Code Playgroud)

我将收到string(3)"32M"string(3)"30M"string(3)"29M"

如果我访问http://test.comhttp://test.com/services/big-service,但我希望看到后续网址的更高限制.

有没有人有任何解决方案,不诉诸直接通过URL使用和访问服务脚本?

tan*_*oan 2

问题是 mod_rewrite 导致它始终转到 /Controller.php,因此永远不会使用包含服务的 Location 块。使用额外的 mod_rewrite 规则

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/services/(.*)$
RewriteCond %{REQUEST_URI} !^/(.*)(html|gif|jpg|png|ico|css|js|dtd|swf|flv|xml)$
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^/(.*)$ /ControllerBig.php/services/$1 [PT]
Run Code Online (Sandbox Code Playgroud)

然后让 ControllerBig 成为 Controller 的克隆

<?php
require_once('Controller.php');
Run Code Online (Sandbox Code Playgroud)

将工作。

编辑:完整的 VirtualHost 块:

<VirtualHost *:80>
ServerName test.com
DocumentRoot /var/www/test.com/html

php_admin_value include_path .:/var/www/test.com/includes:/var/www/test.com/includes/libs

php_value session.use_only_cookie 1
<Location />
    php_value memory_limit 32M
    php_value post_max_size 30M
    php_value upload_max_filesize 29M
</Location>
<Location /services/big-service>
    php_value memory_limit 1024M
    php_value post_max_size 128M
</Location>

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/services/(.*)$
RewriteCond %{REQUEST_URI} !^/(.*)(html|gif|jpg|png|ico|css|js|dtd|swf|flv|xml)$
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^/(.*)$ /ControllerBig.php/services/$1 [PT]

RewriteCond %{REQUEST_URI} ^/(.*)$
RewriteCond %{REQUEST_URI} !^/(.*)(html|gif|jpg|png|ico|css|js|dtd|swf|flv|xml)$
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^/(.*)$ /Controller.php/$1 [PT]

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)