$this->input->get()的获取数据不全 求教大神们!!!
信息如下:config.php$config['uri_protocol'] = 'PATH_INFO';$config['allow_get_array'] = TRUE;
Nginx配置:location / {
root /home/$domain/git/backend/;
try_files $uri $uri/ /index.php?$query_string;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_indexindex.php;
include fastcgi_params;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_paramSERVER_NAME backend.xxxx.com;
fastcgi_paramUNIQUE_ID $uniqueid;
fastcgi_paramPHP_ROOT /home/$domain/git/backend/;
}
这是我发现的get取的数据不全:(我访问的URL:http://backend.xxxx.org/register/test?cellphone=138xxxxxxxx&pic_code=11)
public function test(){
$a=$this->input->get('cellphone');
$b=$this->input->get('pic_code');
var_dump($a,$b) ;exit;
结果:string(11) "13821783943" NULL
然后我追踪到问题到URI.PHP_parse_request_uri()方法中 206行左右var_dump('111======',$_SERVER['REQUEST_URI']);
$uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']);
var_dump('222======',$uri);
$query = isset($uri['query']) ? $uri['query'] : '';
var_dump('333======',$query);exit;
$uri = isset($uri['path']) ? $uri['path'] : '';
string(9) "111======"
string(52) "/register/test?cellphone=138xxxxxxxx&pic_code=11"
string(9) "222======"
array(5) {
["scheme"]=>
string(4) "http"
["host"]=>
string(5) "dummy"
["path"]=>
string(14) "/register/test"
["query"]=>
string(22) "cellphone=138xxxxxxxx&"
["fragment"]=>
string(14) "38;pic_code=11"
}
string(9) "333======"
string(22) "cellphone=138xxxxxxxx&"
这里$query的数据 是在$uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']); 发生变化的,,,我就是不明白$uri中的["fragment"]=> string(14) "38;pic_code=11"是怎么来的? 求教大神们!!!!
本帖最后由 phillu 于 2017-3-30 11:13 编辑
Hex 发表于 2017-3-30 10:44
感觉可能是配置有问题,你用这个 nginx 配置试试,CI 中国用的就是类似这样,应该可以正确获取 QUERY_STRI ...
我Nginx配置
server {
listen 80;
listen 443 ssl;
server_name ~^(?<domain>\w+).driver-backend.xxxx.org$ ;
index index.html index.php
ssl on;
ssl_certificate /etc/pki/tls/certs/alphassl.xxxx.org.ngx.crt;
ssl_certificate_key/etc/pki/tls/private/alphassl.xxxx.org.nopass.key;
ssl_session_timeout5m;
ssl_protocolsSSLv2 SSLv3 TLSv1;
ssl_ciphersALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
root /home/$domain/git/driver-backend/;
gzip on;
gzip_min_length 1000;
#gzip_proxied expired no-cache no-store private auth;
gzip_proxied any;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_disable "MSIE \.";
gzip_http_version 1.0;
error_log/var/log/nginx/driver-backend_error_log;
access_log /var/log/nginx/${domain}_driver-backend_access_log main;
error_page 404 /error/404.php;
rewrite ^/error/404.php /error/404.php break;
if ( $scheme = https ) {
rewrite !^/(payment|login|register|ajax|images|order|brand\/payment|brand\/ajax|i|corp|touch)/ http://www.xxxx.com/$1/ redirect;
}
location / {
root /home/$domain/git/driver-backend/;
try_files $uri $uri/ /index.php$uri?$args;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_indexindex.php;
include fastcgi_params;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_paramPATH_INFO $path_info;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_paramSERVER_NAME driver-backend.xxxx.com;
fastcgi_paramUNIQUE_ID $uniqueid;
fastcgi_paramPHP_ROOT /home/$domain/git/driver-backend/;
}
location ~* \.(js|css|ico|gif|jpg|jpeg|png|swf|htc|xml|mp3|otf|svg|ttf|woff|xap|txt|eot|bin)$ {
root /home/$domain/git/driver-backend/;
}
location ~ ^/(app|bd|demo|job|intro|car|service|help|xw|car|service) {
root /home/y/var/www/cms/cms/page/;
try_files $uri $uri/index.html $uri/index.php =404;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_indexindex.php;
include fastcgi_params;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_paramUNIQUE_ID $uniqueid;
fastcgi_paramPHP_ROOT /home/$domain/git/driver-backend/;
}
location /cms {
root /home/y/var/www/cms/;
try_files $uri $uri/index.html $uri/index.php =404;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_indexindex.php;
include fastcgi_params;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_paramUNIQUE_ID $uniqueid;
fastcgi_paramPHP_ROOT /home/$domain/git/driver-backend/;
}
}
本帖最后由 phillu 于 2017-3-30 10:34 编辑
Hex 发表于 2017-3-29 17:02
你把打印的结果 var_dump 一下我看看。
另外,你把 & 替换了,肯定可以啊,$this->input->server('QUE ...
这个是$uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']); 打出来的
array(5) {
["scheme"]=>
string(4) "http"
["host"]=>
string(5) "dummy"
["path"]=>
string(14) "/register/test"
["query"]=>
string(22) "cellphone=138xxxxxxxx&"
["fragment"]=>
string(14) "38;pic_code=11"
}
这个是parse_url('http://dummy/register/test?cellphone=138xxxxxxxx&pic_code=11') 打出来的
array(4) {
["scheme"]=>
string(4) "http"
["host"]=>
string(5) "dummy"
["path"]=>
string(14) "/register/test"
["query"]=>
string(33) "cellphone=138xxxxxxxx&pic_code=11"
}
还有我用preg_replace('&','&',$_SERVER['REQUEST_URI']),,,报错说找不到以&;
这个是$this->input->server('QUERY_STRING', false)打出来的
string(16) "QUERY_STRING===="
string(22) "cellphone=138xxxxxxxx&" phillu 发表于 2017-3-30 10:12
这个是$uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']); 打出来的
array(5) {
["scheme"]=>
感觉可能是配置有问题,你用这个 nginx 配置试试,CI 中国用的就是类似这样,应该可以正确获取 QUERY_STRING:
location / {
try_files $uri $uri/ /index.php$uri?$args;
}
location ~ ^(.+\.php)(.*)$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
还是我哪里配置的不正确呢? 在控制器构造函数里执行这句话试试:
parse_str($this->input->server('QUERY_STRING', false), $_GET); Hex 发表于 2017-3-29 14:49
在控制器构造函数里执行这句话试试:
还是不行的 他把url中&给实体化了 然后再parse_url() 后就把#当作fragment了,,,,,,,我想把URI.php里$query = isset($uri['query']) ? $uri['query'] : '';改成$query = isset($_SERVER['QUERY_STRING']) ?$_SERVER['QUERY_STRING'] : ''; 因为初次使用 这样改不知道会不会 造成其他功能影响 phillu 发表于 2017-3-29 14:57
还是不行的 他把url中&给实体化了 然后再parse_url() 后就把#当作fragment了,,,,,,,我想把URI.php里$ ...
那你就做一个 urldecode 或者把 & 替换成 & 试试? Hex 发表于 2017-3-29 15:05
那你就做一个 urldecode 或者把 & 替换成 & 试试?
还是不可以 请教 源码里$uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']);和 parse_url('http://dummy/register/test?cellphone=13821783943&pic_code=11'); 这么写打出来的结果为什么不一样呢? phillu 发表于 2017-3-29 15:31
还是不可以 请教 源码里$uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']);和 parse_u ...
你把打印的结果 var_dump 一下我看看。
另外,你把 & 替换了,肯定可以啊,$this->input->server('QUERY_STRING', false) 这个取出来的是什么?
Hex 发表于 2017-3-30 10:44
感觉可能是配置有问题,你用这个 nginx 配置试试,CI 中国用的就是类似这样,应该可以正确获取 QUERY_STRI ...
额 Access denied. 了
页:
[1]
2