Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php '&';变成'&;amp';尝试从URL获取内容时_Php_Html_Apache_Nginx - Fatal编程技术网

Php '&';变成'&;amp';尝试从URL获取内容时

Php '&';变成'&;amp';尝试从URL获取内容时,php,html,apache,nginx,Php,Html,Apache,Nginx,我使用相同的算法运行了几个月的Web服务器,在该算法中,我使用以下代码行获取URL的内容: $response = file_get_contents('http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw),'','&')); 但现在一定有什么改变了,因为它突然停止了工作 在早期,URL看起来应该

我使用相同的算法运行了几个月的Web服务器,在该算法中,我使用以下代码行获取URL的内容:

$response = file_get_contents('http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw),'','&'));
但现在一定有什么改变了,因为它突然停止了工作

在早期,URL看起来应该是:

http://femoso.de:8019/api/2/getVendorLogin?vendor=100&user=test&pw=test
但是现在我在我的nginx日志中得到一个错误,说我请求了以下URL,返回了403

http://femoso.de:8019/api/2/getVendorLogin?vendor=100&user=test&pw=test
我知道目标服务器上发生了一些变化,但我认为这不应该影响我

我已经花了好几个小时在谷歌和Stackoverflow上阅读和搜索,但所有建议的方法都是一样的

urlencode()或 htmlspecialchars()等

不适合我

请注意,该环境是一个zend应用程序,在我的一端是一个nginx服务器,在另一端是一个带有apache的php Web服务

就像我说的,我这边没有任何变化


谢谢

我不是专家,但这是计算机读取地址的方式,因为地址是一个特殊字符。有编码的东西。简单的修复方法是使用str_replace()进行过滤。沿着这条线的东西。

让我们找出罪犯


1) 是http\u build\u query吗?尝试替换:

'http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw)
与:


2) 是否有某种后处理?尝试用
chr(38)


3) 也许试试卷发

$ch = curl_init();

curl_setopt_array($ch, array(
    CURLOPT_URL => 'http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true, // include response header in result
    //CURLOPT_FOLLOWLOCATION => true, // uncomment to follow redirects
    CURLINFO_HEADER_OUT => true, // track request header, see var_dump below
));

$data = curl_exec($ch);
curl_close($ch);

var_dump($data, curl_getinfo($ch, CURLINFO_HEADER_OUT));
exit;

听起来像是您的
arg\u分隔符。在php.ini中,输出设置为
“&;”
。要么把那行注释掉,要么换成有趣的。更改arg_分隔符(http_build_query的第三个参数
)对生成的url是否有任何影响?如果我将arg_分隔符更改为“&;”例如,我使用&;amp;用户等…表示某个地方正在进行某些后期处理。可能有一个整洁的输出缓冲区改变URL。出于好奇,生成的HTML是显示实体还是只有nginx告诉您?我对后期处理有同样的感觉,但由于我没有改变任何东西,我认为这可能是远程服务器的问题?!nginx告诉我,我请求了这个错误的url,并说它返回了一个403,这导致了一个php错误error@Evils,您的服务器当前运行的PHP版本是什么?
arg_分隔符
参数已添加到5.1.2中。(意外的)降级不太可能…尝试过了,没有任何效果…这真是太奇怪了。。。第一个选项的输出与之前相同&;而不是&第二个选项带来的是chr(38)而不是$。。。奇怪的世界,你没有在chr(38)周围留下引号吗?这就是我现在尝试的$response=file_get_内容(''.$vendor.chr(38)'.'user='.$login.chr(38)'.'pw='.$pw');如果我在$response=file_get_contents('.$vendor.chr(38)。'user='.$login.chr(38)。'pw='.$pw)中没有任何引号;我要买一个&;假设您没有犯错误,问题似乎不在PHP中,因此您的服务器或远程应用程序不知何故出现了故障。我在答案中添加了一个带有卷曲的有趣的游乐场。
$ch = curl_init();

curl_setopt_array($ch, array(
    CURLOPT_URL => 'http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true, // include response header in result
    //CURLOPT_FOLLOWLOCATION => true, // uncomment to follow redirects
    CURLINFO_HEADER_OUT => true, // track request header, see var_dump below
));

$data = curl_exec($ch);
curl_close($ch);

var_dump($data, curl_getinfo($ch, CURLINFO_HEADER_OUT));
exit;