質問: file_get_contents('http://122.example.com/csv_hyoji.php?csv='); ``` と事前に書いてあり、そのあとで下記のようなif文での表示をさせるようにしています。 ``` if ((strpos($array100[0],'OK')) { print($word100); } elseif ((strpos($array111[0],'OK')) { print($word111); } elseif ((strpos($array122[0],'OK')) { print($word122); } ``` 【最初の質問】 (1) 上記の場合、「file_get_contents」が事前にある関係上、「if文」が来る前にあらかじめ「file_get_contents」を読み込んでしまってから(通信してしまってから)、if文を解釈して適切に表示するものなのか? (2) それとも、php上で、「file_get_contents」があったとしても、それをprintなりechoなりで表示の指示が出るまでは「file_get_contents」は行わず、printなりechoなりで表示の指示が出た後に「file_get_contents」を行い、通信を開始するものなのか が最初の質問です。 よろしくお願いいたします。 【次の質問】 もし上記の(1)と(2)の選択の中では(2)が正解だった場合、次の質問として下記があります。 if文でcsvファイルの存在を確認して($arrayで200 OKが返ってくるかの確認)、OKが返ってきたらそのサーバーのcsvファイルを表示することになっています。 今回のif文では、最初のifで100のサーバーを探し、elseifで111のサーバーを探し、次のelseifで122のサーバーを探すことになります。 当方としては、「最初のifで100のサーバーを探した末csvファイルが見つかったら、次のelseif以降の111&122への通信はして欲しくありません。 質問です。 phpのif文は、 ``` if ((strpos($array100[0],'OK')) { print($word100); } elseif ((strpos($array111[0],'OK')) { print($word111); } elseif ((strpos($array122[0],'OK')) { print($word122); } ``` となっていた場合、最初にOKが出てきた時点で、次の作業に移らず(通信をせず)打ち切るということで問題ありませんでしょうか? 普通に考えると次の処理には移らず終了するものとは思いますが、 「実はPHPというものは、全てを読み取った後(上記では100、111、122のサーバーとの通信を全て終了した後)に、あらためてIF文を解釈してprintするものだ」ということがないかを確認する次第です。 よろしくお願いいたします。
回答: > > 【最初の質問】 > > (1) > > 上記の場合、「file_get_contents」が事前にある関係上、「if文」が来る前にあらかじめ「file_get_contents」を読み込んでしまってから(通信してしまってから)、if文を解釈して適切に表示するものなのか? > > > YES これは実際に検証してみればわかることなので、 検証方法を考えて検証してみる事を習慣づけると良いです。 今回の件だと、ブレークポイントを仕掛けられるデバッガを使うと簡単に確認できますし、 デバッガを使わなくても、ifの前でファイル内容が格納されている変数をvar_dump()すればifで評価される前に読み込みが終わっていることを確認できます。