重写php代码以避免打开流失败:HTTP请求失败


rewrite php code to avoid failed to open stream: HTTP request failed

我一直在寻找如何修复php代码中常见错误的正确答案:failed to open stream: HTTP request failed!我真的认为解决方案在于重写代码以绕过代码中的User-Agent http头。我需要访问的文件与此代码位于同一服务器上。我需要关于如何重写这个脚本的功能部分的帮助:

function runapp($dir,$latdeg,$latmin,$latsec,$longdeg,$longmin,$longsec)
{
    global $_english;
    $query= ($_english ? 'http://esnig.org/cgi-bin/ntv2_geo2_e.cgi' : 'http://esnig.org/cgi-bin/ntv2_geo2_f.cgi').
        '?' . PAR_DIR     .'=' . $dir .
        '&' . PAR_LATDEG  .'=' . $latdeg .
        '&' . PAR_LATMIN  .'=' . $latmin .
        '&' . PAR_LATSEC  .'=' . $latsec .
        '&' . PAR_LONGDEG .'=' . $longdeg .
        '&' . PAR_LONGMIN .'=' . $longmin .
        '&' . PAR_LONGSEC .'=' . $longsec;

    $response=file($query); 
    foreach ($response as $value)
    {
        echo $value;
    }
}
?>

来自file_get_content手册页面:

注意:如果您要打开一个带有特殊字符(如空格)的URI,您需要使用urlencode()对URI进行编码。

因此,请尝试在之前对查询参数进行url编码。此外,我建议使用curl从互联网url 获取文档

嗯,当我对这些URL进行请求时,我会得到403 Forbidden响应。会是这样吗?

如果没有,那么您似乎没有测试runapp()函数params是否具有非空值。它们可能是空字符串。如果在某些值为空的情况下执行请求,会发生什么情况?您会得到格式错误的查询参数。

简而言之:你应该检查你的参数的长度或!为空或诸如此类,并且仅在设置了它们的情况下将它们附加到查询字符串中。