検索
ホームページバックエンド開発PHPチュートリアルPHP サービス nginx は file_get_contents ソリューションを使用できません

Windows環境にローカル開発サービス環境を構築し、サービスとしてNginxを利用していましたが、file_get_contents()でローカルリンクを取得する際にエラーが発生したため、次の記事で解決方法を紹介します。

1. 問題の内容

Windows環境でローカル開発サービス環境を構築し、サービスとしてNginxを使用していましたが、file_get_contents()を使用してローカルリンクhttp:/を取得すると、 /127.0. 0.1/index.php、そのようなエラーが発生しました:

file_get_contents(http://127.0.0.1/index.php) [<a>function.file-get-contents</a>]: failed to open stream: HTTP request failed!

ローカル コンピューターの PHP 環境は: nginx php mysql; そこで、この記事を見つけてメモしたので、記録します。

過去 2 日間、私は Windows で nginx fastcgi の file_get_contents リクエストに取り組んできました。多くの学生は、Baidu のページを表示する echo file_get_contents(‘http://www.baidu.com’) など、file_get_contents が外部ネットワーク上の http/https php ファイルをリクエストするときに何のプレッシャーも感じなかったと思います。しかし、localhost/127.0.0.1 ローカル ネットワーク上で PHP サービスをリクエストすると、常にタイムアウトが表示され、リクエスト時間とスクリプト実行時間をどれだけ長く設定しても、file_get_contents('http: //localhost/phpinfo.php' )。ただし、htmlなどの静的ファイルをリクエストする場合には全く問題ありません。理由は何ですか? !

まず、file_get_contents/curl/fopen が tcp/ip に基づいて http リクエストを開くと、リクエスト データが nginx に送信され、nginx が php-cgi (fastcgi) に php の処理を​​委託することがわかります。一般に、fastcgi PHP リクエストを処理した後、すぐに終了シグナルを解除して次の処理リクエストを待ちます (もちろん、プログラムがフリーズしてリソースを占有し続ける場合もあります)。 nginx.conf を開くと、次の行が表示されます:

location ~ .php {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  d:/www/htdocs$fastcgi_script_name;
        include        fastcgi_params;
}

php で終わるすべてのファイルが fastcgi によって処理されることが明らかにわかりました。また、php.ini 設定ファイルには次の文もあります。 ##

cgi.force_redirect = 1
は、すべての PHP プログラムが処理のために CGI へのリダイレクトを安全に強制できることを示します。

しかし、Windows では、ローカル 127.0.0.1:9000 はどのようにして php-cgi に接続するのでしょうか? !答えは、php-cgi プロセスを追加し、それを使用して 127.0.0.1:9000 をリッスンすることです。コントローラー コマンド

RunHiddenConsole.exe D:/www/php/php-cgi.exe  -b 127.0.0.1:9000 -c C:/WINDOWS/php.ini
を使用して、php-cgi.exe プロセスを開始して、Windows の起動時に 127.0.0.1:9000 からのリクエストをリッスンできます。 dos コマンドで netstat -a を開くと、ローカル コンピューターのポート 9000 が待機状態 (つまり、要求が送信されない場合は空) であることがわかります。

それでは、PHP で file_get_contents()、curl()、および fopen() 関数を使用して localhost にアクセスするときに結果が返されない理由について話しましょう。 file_get_contents('http://127.0.0.1/phpinfo.php') ステートメントを Index.php に追加して、phpinfo.php にリクエストを送信してみましょう。このとき、ブラウザのステータス インジケーターが回転し続け、仕事中です。 Dos で netstat コマンドを開くと、ローカル 9000 ポートのステータスが ESTABLISHED であることがわかり、プロセスがオンラインで処理されていることを示します。実際、ここでは 2 つの http ベースの php リクエストを同時に nginx に送信しています。1 つはindex.php の解析で、もう 1 つは phpinfo.php です。Windows システムは 1 つの http しか読み込まないため、矛盾が生じます。したがって、2 つの php リクエストを同時に処理することはできず、最初のリクエスト (index.php) を最初に処理することしかできず、一方、index.php は phpinfo.php の処理結果を待っており、誰もそれを助けません。 phpinfo.php. リクエストを処理します。これは、index.php が終了シグナルを解放するのを待っているため、プログラムがブロックされ、無限ループに陥ってしまいます。したがって、ブラウザのステータス インジケーターが常に回転していることがわかります。 Curl() と fopen 関数の理由は同じです。

2. 解決策

理由がわかれば、解決策も見つかります。

まず、システムに http リクエストを追加します。別のリクエストが php-cig にロードされると、追加の php リクエストを処理するために他の http を割り当てることができます。現時点では、別のポート (8080 など) を別の http サーバーに割り当てる必要があります。 nginx の場合は次のとおりです。

http {  
    server {  
        listen          80;  
        server_name     127.0.0.1;  
        location / {  
            index index.php;  
            root  /web/www/htdocs;  
        }  
    }  
    server {  
        listen          8080;  
        server_name     127.0.0.1;  
        location / {  
            index index.html;  
            root  /web/www/htdocs;  
        }  
    }  
    include    /opt/nginx/conf/vhosts/php.conf;  
}
このようにして、ポート 80 と 8080 はそれぞれ次のような異なるプログラムを処理できます。

test.php

 echo file_get_contents('http://localhost:8080/phpinfo.php');
もちろん、 *unix では fork などの選択肢が増えました。

念のためですが、インターネット上の一部の人は、アドレスの http:// プロトコル マークを削除し、相対アドレスを使用することで機能チェックを回避できると言っていますが、実際はそうなのでしょうか? ! Index.php で file_get_contents('phpinfo.php'); を使用すると、この関数が phpinfo.php のソース コードを出力することがわかります。これは file_get_contents('file:c:wwwphpinfo.php'); と同等です。実際、上記はテキストコンテンツを読み取るだけです。これは、file_get_contents() 関数が最初にファイルプロトコルを処理し、curl が直接エラーを報告し、解析できないためです。したがって、これらの人々は単に懲りない嘘つきです。

ホスト ファイルを変更して、関係を暗示するローカルホスト www.xxx.com を追加することを提案する人もいます。この関数は、www.xxx.com を通じてローカル PHP にアクセスします。これは実際には民間療法であり、治癒するものではありません根本的な原因は、コンピュータの DNS 解決を容易にするだけであるため、最終的に www.xxx.com が 127.0.0.1 に引き渡され、後者は依然としてブロックされている唯一の http に引き渡されます。

関連する推奨事項:

file_get_contents 関数が使用できない問題の解決策

Nginx サーバーに PHP を接続し、Nginx ログを解析する方法

以上がPHP サービス nginx は file_get_contents ソリューションを使用できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPを使用して電子メールを送信する最良の方法は何ですか?PHPを使用して電子メールを送信する最良の方法は何ですか?May 08, 2025 am 12:21 AM

BestappRoachforseminginphpisusingthephpmailerlibrarydueToitsReliability、featurrichness、andeaseofuse.phpmailerSupportssmtpは、detairederorhandlingを提供します

PHPでの依存関係注射のベストプラクティスPHPでの依存関係注射のベストプラクティスMay 08, 2025 am 12:21 AM

依存関係注射(DI)を使用する理由は、コードのゆるい結合、テスト可能性、および保守性を促進するためです。 1)コンストラクターを使用して依存関係を注入します。2)サービスロケーターの使用を避け、3)依存関係噴射コンテナを使用して依存関係を管理する、4)依存関係を注入することでテスト可能性を向上させる、5)注入依存性を回避、6)パフォーマンスに対するDIの影響を考慮します。

PHPパフォーマンスのチューニングのヒントとコツPHPパフォーマンスのチューニングのヒントとコツMay 08, 2025 am 12:20 AM

phpperformancetuningisucial cuseenhancess andandandadsand。

PHP電子メールセキュリティ:電子メールを送信するためのベストプラクティスPHP電子メールセキュリティ:電子メールを送信するためのベストプラクティスMay 08, 2025 am 12:16 AM

bestpracticesforsendingemails securlyinphpinclude:1)sutureconsmttarttlsencryptionとの使用の使用、2)検証およびサンシジン化のinputStopReventinjectuctacks、3)adinitivedinitivedInemailsopenslsl、4)adlinglinglingemailoaに

パフォーマンスのためにPHPアプリケーションをどのように最適化しますか?パフォーマンスのためにPHPアプリケーションをどのように最適化しますか?May 08, 2025 am 12:08 AM

tooptimizephpapplicationsforporformance、usecaching、databaseoptimization、opcodecaching、andserverconfiguration.1)cachingwithedatedatedatafethtimes.2)最適化バイズビーインデキシング、readedandandandwriteoperations.3)

PHPの依存噴射とは何ですか?PHPの依存噴射とは何ですか?May 07, 2025 pm 03:09 PM

依存関係の依存性、テスト可能性、および維持可能性の依存性の依存性の依存性、および維持可能性は、エクステルンド依存性を維持する可能性があります

最高のPHPパフォーマンス最適化手法最高のPHPパフォーマンス最適化手法May 07, 2025 pm 03:05 PM

PHPパフォーマンスの最適化は、次の手順を通じて実現できます。1)スクリプトの上部にrequire_onceまたはinclude_onceを使用して、ファイルの負荷数を減らすことができます。 2)プリプロセシングステートメントとバッチ処理を使用して、データベースクエリの数を減らします。 3)OpCodeキャッシュのOpCacheを構成します。 4)PHP-FPM最適化プロセス管理を有効にして構成します。 5)CDNを使用して静的リソースを配布します。 6)コードパフォーマンス分析には、XdebugまたはBlackfireを使用します。 7)配列などの効率的なデータ構造を選択します。 8)最適化実行のためのモジュラーコードを記述します。

PHPパフォーマンスの最適化:OpCodeキャッシングの使用PHPパフォーマンスの最適化:OpCodeキャッシングの使用May 07, 2025 pm 02:49 PM

opcodeCachingsificlyprovesppherformanceBycachingCompiledCode、reducingServerloadandResponsetimes.1)itStoresPhpCodeInMemory、バイパス補助補強団体

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター