回答編集履歴

1

tuiki

2016/07/23 20:04

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -67,3 +67,75 @@
67
67
 
68
68
 
69
69
  ちなみに逮捕者が出た例の図書館の事件では,1秒ごとにリクエストを行っていました.正直1秒ごとでもまともなシステムならびくともしないはずなんですが,バグのある低品質なプロダクトが納品されていたのが原因の1つで,かつ図書館側にもIT業界の人間からすればかなり横暴に思えてしまう対応が為され,逮捕者が出る悲劇に繋がってしまったようです.
70
+
71
+
72
+
73
+ ----
74
+
75
+
76
+
77
+ 【補足】
78
+
79
+
80
+
81
+ 「ページが有効かどうか」のみを調べたい場合,HEADリクエストを送るのが正解です.これが最も効率が良く,サーバにも負荷をかけない方法です. (「GETで1バイトだけ受信する」という方法はあまりお行儀が良くないです)
82
+
83
+
84
+
85
+ ```php
86
+
87
+ $ch = curl_init();
88
+
89
+ curl_setopt_array($ch, [
90
+
91
+ CURLOPT_FOLLOWLOCATION => true, // Locationヘッダを自動で追跡する
92
+
93
+ CURLOPT_NOBODY => true, // GETリクエストの代わりにHEADリクエストを送る (HTMLを取得しない),
94
+
95
+ ]);
96
+
97
+
98
+
99
+ for ($i = 1; $i <= 2000; ++$i) {
100
+
101
+ if ($i !== 1) sleep(15);
102
+
103
+ curl_setopt($ch, CURLOPT_URL, "http://example.com/$i");
104
+
105
+ $result = curl_exec($ch);
106
+
107
+ $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
108
+
109
+ if ($result === false || $code >= 500) {
110
+
111
+ // 通信障害,またはサーバが不調
112
+
113
+ continue;
114
+
115
+ }
116
+
117
+ if ($code === 404) {
118
+
119
+ // コンテンツが見つからない
120
+
121
+ continue;
122
+
123
+ }
124
+
125
+ if ($code >= 400) {
126
+
127
+ // 何かしら問題のあるアクセスをしている
128
+
129
+ continue;
130
+
131
+ }
132
+
133
+ // ほぼ成功と考えていい
134
+
135
+ }
136
+
137
+ ```
138
+
139
+
140
+
141
+