我有一个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使用和访问服务脚本?
我有一个正在尝试针对 PostgreSQL 9.2 进行优化的查询:
select coalesce(max(id),0) as m from tbl
Run Code Online (Sandbox Code Playgroud)
它需要永远运行,所以我想我可以将其重写为
select id from tbl order by id desc limit 1
Run Code Online (Sandbox Code Playgroud)
0但如果表中没有行则需要返回。我尝试了几种 case 语句的组合,但它们似乎不起作用。有什么建议么?
计划空表:
Aggregate (cost=11.25..11.26 rows=1 width=4)
-> Seq Scan on tbl (cost=0.00..11.00 rows=100 width=4)
Run Code Online (Sandbox Code Playgroud)
具有 1,190,000 行的表的成本为 58k,但执行计划相同。
postgresql coalesce aggregate-functions postgresql-9.2 postgresql-performance