You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地正常线上服务器$_GET数组变量返回空字符串问题求助

问题原因分析与解决方案

看起来你遇到的是本地与线上环境PHP解析GET数组参数的差异问题,结合你给出的信息,大概率是线上服务器的配置或者重写规则导致的,下面是具体排查方向:

1. PHP配置参数异常

线上服务器的PHP配置可能没有正确处理GET数组参数,重点检查以下几个php.ini配置项:

  • request_order / variables_order:确保这两个配置里包含G(代表GET参数),比如request_order = "GP"。如果配置成不包含G的取值,PHP就无法正确填充$_GET数组;如果是解析逻辑异常,也可能出现键存在但值为空的情况。
  • arg_separator.input:这个配置定义了URL中参数的分隔符,默认是&。如果线上被改成了其他字符(比如;),你的&分隔的参数会被解析成一个整体,导致数组参数无法被识别,最终变成空字符串。
  • max_input_vars:虽然你的参数数量不多,但如果这个值设置得极小(小于你传递的参数总数),PHP会截断超出的参数,不过这个情况导致所有数组参数为空的概率稍低,可以顺便确认下,默认值是1000,一般没问题。

你可以在服务器上创建一个phpinfo.php文件,内容如下:

<?php phpinfo(); ?>

访问这个文件,搜索上述配置项,对比本地环境的配置差异。

2. 服务器重写规则丢失参数

如果你的线上服务器使用了Apache的mod_rewrite或者Nginx的重写规则,可能规则不小心丢弃了GET查询字符串:

  • Apache:检查.htaccess文件中的RewriteRule,如果规则末尾没有加[QSA](Query String Append)标志,重写时会丢失原来的GET参数。比如错误的规则:
    RewriteRule ^index.php$ /new.php [L]
    
    正确的写法应该带上QSA:
    RewriteRule ^index.php$ /new.php [L,QSA]
    
  • Nginx:查看server块中的rewrite规则,如果规则中没有保留$query_string,也会导致参数丢失。比如错误的规则:
    rewrite ^/old$ /new permanent;
    
    正确的写法需要带上查询字符串:
    rewrite ^/old$ /new?$query_string permanent;
    

3. 快速排查小技巧

你可以先在代码里输出原始的查询字符串,确认服务器是否能接收到参数:

var_dump($_SERVER['QUERY_STRING']);

如果输出的是完整的start[]=0&duration_[]=2&name[]=David&setting[]=26&start[]=6&duration[]=18&name[]=john&setting[]=26,说明是PHP解析GET参数的问题(参考上面的PHP配置排查);如果输出为空,那肯定是服务器重写或者配置把查询字符串丢弃了。

另外,注意你URL里的duration_[](多了一个下划线),但代码里用的是$_GET['duration'],不过这个小错误不影响start参数的解析,建议后续统一参数名避免其他问题。

内容的提问来源于stack exchange,提问作者DJSweetness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:36:42