file_get_contents在我的服务器上不起作用

时间:2014-03-19 14:53:58

标签: php file-get-contents

我创建了两个文件,一个在我的wamp服务器(localhost)上,另一个在我的ovh.com私有空间中。这两个文件仅包含以下内容:

echo $search = file_get_contents('https://prod.api.pvp.net/api/lol/euw/v1.3/game/by-summoner/19319907/recent?api_key=6fa73a35-6477-412d-97a6-b6739cb6cf1b');

在我的服务器上,有一些错误的字符,如â,þ或¬等......

如何发生,我该如何解决?

编辑:这不是关于文件!这是关于服务器,原因文件是完全一样的! 您可以在此处查看好的:http://www.dietadom.fr/test.php,以及此处的错误:http://82.124.50.144/test.php

从请求到这两个脚本的标头:

工作:

curl -I  http://www.dietadom.fr/test.php
HTTP/1.1 200 OK
Set-Cookie: clusterBAK=R1564861669; path=/; expires=Wed, 19-Mar-2014 16:38:43 GMT
Date: Wed, 19 Mar 2014 15:19:31 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: cluster=R1649376954; path=/; expires=Wed, 19-Mar-2014 16:32:22 GMT
Server: Apache
X-Powered-By: PHP/5.4.24
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Vary: Accept-Encoding

不工作:

curl -I http://82.124.50.144/test.php
HTTP/1.1 200 OK
Date: Wed, 19 Mar 2014 15:19:48 GMT
Server: Apache/2.4.4 (Win64) OpenSSL/1.0.1d PHP/5.4.12
X-Powered-By: PHP/5.4.12
Content-Type: text/plain; charset: UTF-8

1 个答案:

答案 0 :(得分:2)

您的两台服务器提供的默认字符编码标头很可能不同。您可以通过更改服务器配置来确保它们都具有默认值来解决此问题。或者您可以修改您的脚本以覆盖它,添加内容编码标题将使这一点保持一致。

如果您为UTF-8普通测试内容修改PHP文件,那么该行将是

header('Content-type: text/plain; charset=UTF-8');

您的源网址正在响应:

Content-Type: application/json; charset=UTF-8

使用

检索
curl -I https://prod.api.pvp.net/api/lol/euw/v1.3/game/by-summoner/19319907/recent?api_key=6fa73a35-6477-412d-97a6-b6739cb6cf1b

因此我如何知道它的UTF-8编码。

编辑

检查过您的服务器后,我可以看到错误页面的标题:

curl -I http://82.124.50.144/404.html
HTTP/1.1 403 Forbidden
Date: Wed, 19 Mar 2014 17:24:17 GMT
Server: Apache/2.4.4 (Win64) OpenSSL/1.0.1d PHP/5.4.12
Content-Type: text/html; charset=iso-8859-1

显示默认字符编码的最后一行是iso-8859-1,这意味着来自您的源的utf-8数据使用错误的编码进行传输。在脚本中添加正确的标题行可以解决问题。

您也可以通过添加AddDefaultCharset UTF-8来更改Apache服务器配置。

我确定你的问题是使用字符编码,所以你应该研究一下。