teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

tuiki

2016/07/23 20:04

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -32,4 +32,39 @@
32
32
 
33
33
  15秒という数字には何の根拠もありませんが,かなり余裕を持って設定した「よほどアホなプログラマが作ったシステムじゃなければ普通は迷惑にならない」と判断できる数字です.主観なので,これによってトラブルが発生しても私は責任をとりません.**最低限,利用規約をよく読んで禁止事項がないか確認してから行うべきです.**
34
34
 
35
- ちなみに逮捕者が出た例の図書館の事件では,1秒ごとにリクエストを行っていました.正直1秒ごとでもまともなシステムならびくともしないはずなんですが,バグのある低品質なプロダクトが納品されていたのが原因の1つで,かつ図書館側にもIT業界の人間からすればかなり横暴に思えてしまう対応が為され,逮捕者が出る悲劇に繋がってしまったようです.
35
+ ちなみに逮捕者が出た例の図書館の事件では,1秒ごとにリクエストを行っていました.正直1秒ごとでもまともなシステムならびくともしないはずなんですが,バグのある低品質なプロダクトが納品されていたのが原因の1つで,かつ図書館側にもIT業界の人間からすればかなり横暴に思えてしまう対応が為され,逮捕者が出る悲劇に繋がってしまったようです.
36
+
37
+ ----
38
+
39
+ 【補足】
40
+
41
+ 「ページが有効かどうか」のみを調べたい場合,HEADリクエストを送るのが正解です.これが最も効率が良く,サーバにも負荷をかけない方法です. (「GETで1バイトだけ受信する」という方法はあまりお行儀が良くないです)
42
+
43
+ ```php
44
+ $ch = curl_init();
45
+ curl_setopt_array($ch, [
46
+ CURLOPT_FOLLOWLOCATION => true, // Locationヘッダを自動で追跡する
47
+ CURLOPT_NOBODY => true, // GETリクエストの代わりにHEADリクエストを送る (HTMLを取得しない),
48
+ ]);
49
+
50
+ for ($i = 1; $i <= 2000; ++$i) {
51
+ if ($i !== 1) sleep(15);
52
+ curl_setopt($ch, CURLOPT_URL, "http://example.com/$i");
53
+ $result = curl_exec($ch);
54
+ $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
55
+ if ($result === false || $code >= 500) {
56
+ // 通信障害,またはサーバが不調
57
+ continue;
58
+ }
59
+ if ($code === 404) {
60
+ // コンテンツが見つからない
61
+ continue;
62
+ }
63
+ if ($code >= 400) {
64
+ // 何かしら問題のあるアクセスをしている
65
+ continue;
66
+ }
67
+ // ほぼ成功と考えていい
68
+ }
69
+ ```
70
+