46

私は次のPHP関数を使用します:

file_get_contents('http://example.com');

特定のサーバーでこれを行うと、結果は空になります。他の場所でそれを行うと、結果はページのコンテンツが何であれです。ただし、結果が空のサーバーで、関数をローカルで使用する場合は、外部URL(file_get_contents('../simple/internal/path.html');)にアクセスせに機能します。

今、私はそれが特定のphp.ini構成と関係があるとかなり確信しています。しかし、私がよくわからないのは、どれかです。助けてください。

4

8 に答える 8

44

お探しの設定はですallow_url_fopen

php.iniを変更せずに回避するには、2つの方法があります。1つはを使用する方法で、もう1つはcURLfsockopen()を使用する方法です。

file_get_contents()これのために構築されているので、とにかくcURLを使用することをお勧めします。

于 2010-08-15T17:24:51.637 に答える
43

Aillyn の回答を補完すると、以下のような関数を使用して file_get_contents の動作を模倣できます。

function get_content($URL){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_URL, $URL);
      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
}

echo get_content('http://example.com');
于 2010-08-15T18:26:07.543 に答える
4

は、ini構成設定に関連していますallow_url_fopen

このオプションを有効にすると、コードのバグが悪用される可能性があることに注意してください。

たとえば、この入力の検証の失敗は、本格的なリモートコード実行の脆弱性に変わる可能性があります。

copy($_GET["file"], "."); 
于 2010-08-15T17:24:52.133 に答える
4
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.your_external_website.com");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);

http urlに最適ですが、https urlを開く方法が役立ちます

于 2013-02-28T09:55:14.453 に答える
1

これにより、php.ini を使用しなくても、外部リンクに絶対パスが与えられます。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.your_external_website.com");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
$result = preg_replace("#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#",'$1http://www.your_external_website.com/$2$3', $result);
echo $result
?>
于 2012-07-25T12:50:26.517 に答える
0

追加:

allow_url_fopen=1

あなたのphp.iniファイルに。共有ホスティングを使用している場合は、最初に作成します。

于 2012-03-31T08:10:17.040 に答える