5

簡単なものになると思いますが…でも、手を使って見つけることができます。

問題:
を介して特定のローカルURLのコンテンツを取得しようとするとfile_get_contents()、空の文字列''(長さ= 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がオンになっています

私はちょうど何かを見つけたかもしれません。 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) 

[/追加情報]

ところで、私は実行しています:

  • Win764のWAMPSERVER
  • Apache 2.4.2
  • PHP 5.4.3
  • CodeIgniter 2.1.2
4

3 に答える 3

5

今すぐデバッグを開始してください:

# 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をお勧めします。

于 2012-12-27T19:54:43.847 に答える
1

php.iniで有効になっていることを確認してください

ini_get('allow_url_fopen')
于 2012-12-27T19:19:06.947 に答える