我有一个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.com和http://test.com/services/big-service,但我希望看到后续网址的更高限制.
有没有人有任何解决方案,不诉诸直接通过URL使用和访问服务脚本?
问题是 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)
| 归档时间: |
|
| 查看次数: |
11050 次 |
| 最近记录: |