我打赌它最终会是一个简单的东西…但我可以帮你发现它。
问题:
当我试图通过file_get_contents()
获取特定本地URL的内容时,它返回为空字符串"(长度=0)。
我试过了:
$url = 'http://localhost/bbq/index.php/company/get/id/2131/return/json';
$results = file_get_contents($url);
echo'<pre>Results:<br />',var_export($results),'</pre>';
当直接访问http://localhost/bbq/index.php/company/get/id/2131/return/json
时,一切都很美:{"id":"2131","value":"Acme Anvil Corp."}
为了检查我自己,我用$url = 'http://www.google.com'
尝试了它,它如预期的工作,所以然后我尝试了一个单独的本地uri, http://localhost/?phpinfo=1
,它也工作很好。
问题:
我错过了什么?
allow_url_fopen
is ON
我可能刚刚发现一些东西。
作为CODEIGNITER项目中的安全措施,控制器脚本的第一行有:
if ( !defined('BASEPATH')) exit('No direct script access allowed');
注释它并没有提供任何改进,但我认为它仍然值得提及。
另外,这里有一个HTTP响应头的转储。也许有人能看到里面有什么。对我来说,这一切似乎都很简单,但我真的不知道我应该找什么。
array (size=13)
0 => string 'HTTP/1.1 200 OK' (length=15)
1 => string 'Date: Thu, 27 Dec 2012 19:58:47 GMT' (length=35)
2 => string 'Server: Apache/2.4.2 (Win64) PHP/5.4.3' (length=38)
3 => string 'X-Powered-By: PHP/5.4.3' (length=23)
4 => string 'Set-Cookie: csrf_cookie_name=4ae46f9a7e612ae22a080a4e88bd349c; expires=Thu, 27-Dec-2012 21:58:47 GMT; path=/' (length=108)
5 => string 'Set-Cookie: PHPSESSID=ah70p0ldl5qptcauei1t8ihud3; path=/' (length=56)
6 => string 'Expires: Thu, 19 Nov 1981 08:52:00 GMT' (length=38)
7 => string 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' (length=77)
8 => string 'Pragma: no-cache' (length=16)
9 => string 'Refresh: 0;url=http://localhost/bbq/index.php/index.php/user/login' (length=66)
10 => string 'Content-Length: 0' (length=17)
11 => string 'Connection: close' (length=17)
12 => string 'Content-Type: text/html' (length=23)
[/附加信息]
BTW,我正在运行:
- WAMPSERVER for Win7 64 Apache 2.4.2 php 5.4.3
- CodeIgniter 2.1.2
现在开始调试:
# we want text output for debugging. Either this works or you need to look into
# source in your browser (or even better, debug with the `curl` commandline client.)
header('Content-Type: text/plain');
# For quick and dirty debugging - start to tell about if something is worth
# to warn or notice about. (do logging in production)
error_reporting(~0); ini_set('display_errors', 1);
$url = 'http://localhost/bbq/company/get/id/2131/return/json';
$results = file_get_contents($url);
var_dump($http_response_header, $results);
# hard exit, flush all (potential) buffers.
die();
由于var_dump
,对文件的请求现在必须至少返回一些文本输出。您还可以在头调用下面的开头添加一些标记输出,这样就可以清楚地看到脚本已经被调用并且已经开始运行了。
然而,一个更好的变体是使用一个分步调试器并创建一个带有断点的调试会话。我推荐Xdebug
我可以看到这是一个旧的帖子,但我今天有一个类似的问题与file_get_contents()使用相对文件路径,返回一个空字符串。
我在所有文件上使用UTF-8编码,我发现我忘记更改一个文件的编码(我无法通过file_get_contents()检索)。当我改变编码时,它"神奇地"工作了。
三个问题是由ANSI编码文件中的非ANSI字符引起的(例如:: a、e,űő)。
希望这能帮助到一些人!
检查是否在php.ini中启用
ini_get('allow_url_fopen')