質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1451閲覧

PHP file_get_contents() で出る no route to host というエラーを解消したいです

koyablue

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/12/11 04:46

バージョン

  • PHP 7.1.1
  • Laravel 5.8.37

発生している問題・エラーメッセージ

http://ykaku.com/ginkokensaku/ginkositen1.zip
から銀行店舗情報のzipをダウンロードし、内容をDBに保存するバッチ処理を実装しています。
バッチ処理用にartisan command クラスを作成し、毎月指定の日時に実行するようスケジューリングしています。
ファイルダウンロードはfile_get_contents()で行っていますが、その部分でno route to hostというエラーが出てしまいダウンロードできません。
ただ、常にそのエラーが出るわけではなく

  • ローカルでコマンド実行 -> エラーなし。zipは正常にダウンロードされ、DBの内容は更新される
  • 本番用サーバー(AWS EC2)にssh接続してコマンド実行 -> エラーなし 。zipは正常にダウンロードされ、DBの内容は更新される
  • 本番用サーバー内でスケジューリングされた日時に自動実行 -> no route for host のエラー発生

といった感じで、手動でコマンドを実行した場合はエラーが出ず、自動実行された場合のみエラーが出るようなのです

allow_url_fopenが向こうになっているのかと思い確認しましたが、しっかり有効になっていました。
他に確認すべき点や原因と思われるものがあれば、教えていただきたくおもいます。
よろしくお願いいたします。

該当のソースコード

php

1 2 3 /** 4 * Execute the console command. 5 * 6 * @return mixed 7 */ 8 public function handle() 9 { 10 //テキストファイルの並び 11 //金融機関コード, 支店番号, カナ, 銀行名or支店名, 名称区分(1:銀行名称 2:支店名称), 並びコード(1:重複なしor母店 2~:出張所) 12 13 14 $url = 'http://ykaku.com/ginkokensaku/ginkositen1.zip'; 15 $zipFilePath = 'BankMaster/tmp/bank_master.zip'; 16 $zipFileFullPath = config('filesystems.disks.command.root').'/'.$zipFilePath; 17 18 try{ 19 //zipファイルダウンロード 20 if (!$this->fileDownload($url, $zipFilePath)) { 21 throw new FailedToSaveFileException(); 22 } 23 //zipファイルの内容でデータを更新 24 $this->importBankData($zipFileFullPath); 25 26 }catch (\Exception $e){ 27 if ($e instanceof FailedToImportBankDataException) { 28 $e->outputEachErrorMessage(); 29 $this->outputLog($e, trans('error_message.command.update_bank_master.failed_to_import_data')); 30 }else { 31 $this->outputLog($e); 32 } 33 }finally{ 34 //ファイルの削除 35 if (\Storage::disk('command')->exists($zipFilePath)) { 36 \Storage::disk('command')->delete($zipFilePath); 37 } 38 \CustomLog::info('DONE: updateBankMaster'); 39 } 40 } 41 42 /** 43 * zipファイルダウンロード 44 * @param string $url 45 * @param string $zipFilePath 46 * @return bool 47 * @throws FailedToSaveFileException 48 * @throws FileExistsException 49 */ 50 private function fileDownload(string $url, string $zipFilePath) 51 { 52 if (\Storage::disk('command')->exists($zipFilePath)) { 53 throw new FileExistsException(trans('error_message.command.update_bank_master.file_exists')); 54 } 55 56 //zipファイルダウンロード 57 //ここで no route to host のエラー 58     //ただし、手動でコマンドを実行した時は出ない。スケジューリングされた自動実行時のみ出る 59 $tmp = file_get_contents($url); 60 //zipファイルダウンロード失敗時 61 if (!$tmp) { 62 throw new FailedToSaveFileException(trans('error_message.command.update_bank_master.failed_to_save_file')); 63 } 64 65 //指定のディレクトリにファイルを保存 66 return \Storage::disk('command')->put($zipFilePath, $tmp); 67 } 68 69以下略 70 71} 72

/app/Console/Kernel.phpでは以下のようにスケジュールを設定しています

php

1 2//毎月8,18,28日の8:00amに実行 3$schedule->command('updateBankMaster')->cron('0 6 8,18,28 * *')->withoutOverlapping();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

cron実行時間ですが、コメントには「//毎月8,18,28日の8:00amに実行」と書かれてますが、cron書式からは、毎月8,18,28日の午前6時0分に設定されてるように思います。

アクセス先のトップページを見ると

「当サイトの運用時間はAMP7:00~PM9:00の運用となります。」

と記載されています。

cron実行時間をサイト運用時間に変更したらいかがでしょうか?

投稿2020/12/11 06:55

hiok

総合スコア595

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koyablue

2020/12/11 07:07

回答ありがとうございます! cron実行時間がサイト運用時間外になっているせいでエラーが起きているかもしれないという点は、考えから漏れていました... ・cron実行時間をサイト運用時間内に変更して正常に動作するか ・サイト運用時間外にコマンド実行して同じエラーが再現されるか など検証してみます!
koyablue

2020/12/11 12:27

やはりサイトの運用時間の問題でほぼ間違いなさそうです ここで質問して回答がつかなければ、ドツボにハマってしまっていた可能性がありました... 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問