CakePHP3 リンク切れチェックツールのサンプルコード(Shell)です。
● サンプルコードの処理
・配列に設定されたチェック対象URLリストをループ処理する。
・リダイレクト(301,302)された場合には、リダイレクト先をチェックする。
・HTTPステータス 200であれば「ok!」、200以外であれば「ng!」ログ出力する。
ex)
https://cakephp3.com/: ok!
https://twitter.com/: ok!
◯「src/Shell/urlCheckShell.php」作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <?php namespace App\Shell; use Cake\Console\Shell; use Cake\Core\Exception\Exception; // Clientどちらか使用 // CakePHP ~3.2 // use Cake\Network\Http\Client; // CakePHP 3.3~ use Cake\Http\Client; class urlCheckShell extends Shell { public function main() { // チェック対象URLリスト $url_list = ['https://cakephp3.com/', 'https://twitter.com/']; // Http Client初期化 $http = new Client(); // リンクチェック(ループ処理) $usleep_time = 500000; // 0.5秒待機 foreach ($url_list as $url) { try { // $urlページをget $response = $http->get($url); // リダイレクト(301,302)された場合、リダイレクト先にアクセス // CakePHP ~3.2 // $response->statusCode() // $response->header('Location') // CakePHP 3.3~ // $response->getStatusCode() // $response->getHeader('Location') if (in_array($response->getStatusCode(), ['301', '302'])) { $redirect_url = $response->getHeader('Location'); if (!empty($redirect_url)) { $response = $http->get($redirect_url); } } // 結果 if ($response->getStatusCode() == '200') { // 200 echo $url . ': ok!' . "\n"; } else { // 200以外 echo $url . ': ng!' . "\n"; } } catch(Exception $e) { echo $url . ': error!' . "\n"; } usleep($usleep_time); } } } |
◯ リンク切れチェックShell実行
1 2 3 4 5 | # bin/cake urlCheck // 出力ログ https://cakephp3.com/: ok! https://twitter.com/: ok! |