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'); /* ["wrapper_type"]=> ["ストリームタイプ"]=> ["モード"]=> ["unread_bytes"]=> ["シーク可能"]=> ["uri"]=> ["タイムアウト"]=> ["ブロックされました"]=> ["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");
|
状況から判断すると、問題は DNS 解決にあり、localhost は自動的に 127.0.0.1 にマッピングされます。実際、http://localhost へのアクセスと http://127.0.0.1 へのアクセスも同じになります。住所。
解決策は、Windows ホスト ファイルを確認することです。通常、システム ディスクは、以下に示すように C ドライブのホスト パスです。
コードをコピー | |||||||||||||
|
コードは次のとおりです | コードをコピー |
# localhost の名前解決は DNS 自体内で処理されます |
URLをファイルとして扱うのは何の役に立つのですか
たとえば、値をインクルードファイルに渡すには、次のようにすることができます
コードは次のとおりです | コードをコピー |
example.inc.php内
コードは次のとおりです | コードをコピー |
var_dump($_GET['foo']);
var_dump($_GET['bar']);
?> |
文字列(1) "1" 文字列(1) "2"
http://www.bkjia.com/PHPjc/632063.html