ホームページ >バックエンド開発 >PHPチュートリアル >PHPのfopen関数はリモートアドレス_PHPチュートリアルのコンテンツを取得できません

PHPのfopen関数はリモートアドレス_PHPチュートリアルのコンテンツを取得できません

WBOY
WBOYオリジナル
2016-07-13 10:57:371302ブラウズ

fopen 関数は主に PHP でファイルの読み取りと書き込みに使用されますが、リモート サーバーからファイルを取得するために使用されることもあります。ただし、fopen を使用してリモート ファイルを読み取る場合は、allow_url_fopen をオンにする必要があります。

解決プロセス

これらの機能を除いて、他のすべては正常に動作するため、まず DNS の問題を除外します。問題はドメイン名を持つ URL のみにありますが、gethostbyname() 関数は正しく返されます。 そこで思いついたのは、php.ini の設定の問題でしたが、allow_url_fopen がすでにオンになっていることがわかりました。 Google に助けを求めたところ、SELINUX の問題だと誰かが言いました。しかし、私はSELINUXをまったく開きませんでした。引き続き Google で調べてみると、StackOverflow からこの記事を見つけました

コードは次のとおりです コードをコピー

$file = fopen('http://www.google.com/', 'rb');
var_dump(stream_get_meta_data($file));

/*
出力結果:
配列(10) {
["wrapper_data"]=>
配列(2) {
["ヘッダー"]=>
配列(0) {
}
["readbuf"]=>
タイプ (ストリーム) のリソース(38)
}

["wrapper_type"]=>
文字列(4) "cURL"

["ストリームタイプ"]=>
文字列(4) "cURL"

["モード"]=>
文字列(2) "rb"

["unread_bytes"]=>
int(0)

["シーク可能"]=>
ブール(偽)

["uri"]=>
文字列(23) "http://www.google.com/"

["タイムアウト"]=>
ブール(偽)

["ブロックされました"]=>
ブール(真)

["eof"]=>
ブール(偽)

}*/

fopen、getimagesize、include などの関数を使用して URL を開くには、php.ini を設定する必要があります。通常、allow_url_fopen を on に設定すると fopen URL が許可され、allow_url_include を on に設定すると include/require URL が許可されますが、これは機能しません。ローカルのテスト環境は間違いなく動作します


allow_url_fopen = オン

URL (http:// や ftp:// など) をファイルとして扱うことを許可するかどうか。

allow_url_include = オン

URL (http:// や ftp:// など) をファイルとして開くことを include/require に許可するかどうか。

ローカルの wamp テスト環境では、この設定の後、fopen はリモート アドレスを正常に開くことができますが、ローカル アドレスに遭遇すると、

などのエラーが報告されます。
コードは次のとおりです コードをコピー
1 fopen("http://localhost/myfile.php", "r");
php.iniで設定されたスクリプトの最大実行時間を超えると、ファイルが存在しないなどのエラーが報告されます。これはオンライン サーバーでは発生しませんが、localhost を 127.0.0.1 に置き換えると正常に動作します。

状況から判断すると、問題は DNS 解決にあり、localhost は自動的に 127.0.0.1 にマッピングされます。実際、http://localhost へのアクセスと http://127.0.0.1 へのアクセスも同じになります。住所。

解決策は、Windows ホスト ファイルを確認することです。通常、システム ディスクは、以下に示すように C ドライブのホスト パスです。

コードは次のとおりですC:/Windows/System32/drivers/etc/hosts

hosts ファイルを開き、メモ帳や notepad++ などのツールを使用します

以下の 127.0.0.1 の前にある # を削除します。

コードをコピー

コードは次のとおりです コードをコピー

# localhost の名前解決は DNS 自体内で処理されます
# 127.0.0.1 ローカルホスト

URLをファイルとして扱うのは何の役に立つのですか
たとえば、値をインクルードファイルに渡すには、次のようにすることができます

コードは次のとおりです コードをコピー

example.inc.php内

実行結果
コードは次のとおりです コードをコピー

var_dump($_GET['foo']); var_dump($_GET['bar']); ?>

文字列(1) "1" 文字列(1) "2"

http://www.bkjia.com/PHPjc/632063.html

tru​​ehttp://www.bkjia.com/PHPjc/632063.html技術記事 fopen 関数は主に PHP でファイルの読み取りと書き込みに使用されますが、リモート サーバーからファイルを取得するために使用されることもあります。ただし、fopen を使用してリモート ファイルを読み取る場合は、allow_url_fopen をオンにする必要があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。