File: http.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (414 lines) | stat: -rw-r--r-- 17,561 bytes parent folder | download
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 1.19 $ -->
 <reference id="ref.http">
  <title>HTTP関連の関数</title>
  <titleabbrev>HTTP</titleabbrev>

  <partintro>
   <simpara>
    以下の関数は、リモートブラウザに送り返される出力を、HTTPプロトコル
    レベルで制御するためのものです。
   </simpara>
  </partintro>

  <refentry id="function.header">
   <refnamediv>
    <refname>header</refname>
    <refpurpose>生のHTTPヘッダを送信する</refpurpose>
   </refnamediv>
   <refsect1>
    <title>説明</title>
     <methodsynopsis>
      <type>int</type><methodname>header</methodname>
      <methodparam><type>string</type><parameter>string</parameter></methodparam>
      <methodparam choice="opt"><type>bool</type><parameter>replace</parameter></methodparam>
     </methodsynopsis>
    <para>
     <function>header</function>関数は、<acronym>HTML</acronym>ファイル
     の送信に先立って、生の<acronym>HTTP</acronym>ヘッダ文字列を送信
     するために使用します。HTTPヘッダの詳細は、
     <ulink url="&spec.http1.1;">HTTP 1.1 Specification</ulink>を参照
     して下さい。
    </para>
    <para>
     オプションのパラメータ <parameter>replace</parameter> は、ヘッダ
     が前に送信された類似のヘッダを置換するか、または、同じ形式の二番
     目のヘッダを追加するかどうかを指定します。デフォルトでは、この関
     数は、置換を行ないますが、二番目の引数に&false; を指定すると、同
     じ型の複数のヘッダを強制的に生成します。例えば、
     <informalexample>
      <programlisting role="php">
<![CDATA[
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM',false);
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
     特殊なheaderコールが2種類あります。最初のは、&quot;Location&quot;
     ヘッダーです。このヘッダーはブラウザに返されるだけではなく、
     ApacheにREDIRECTステータスコードを返します。スクリプトの作者にとっ
     ては、この点はあまり重要ではありませんが、Apacheの内部動作を知る
     人にとっては、理解しておくべき重要なこととなります。
     <informalexample>
      <programlisting role="php">
<![CDATA[
header("Location: http://www.php.net/");  /* ブラウザをPHP Web サイトに
                                            リダイレクトする */
exit;                 /* リダイレクトを行う際に以下のコードが
                         実行されないようにする */
]]>
      </programlisting>
     </informalexample>
    </para>
    <note>
     <para>
      HTTP/1.1では、スキーム、ホスト名、絶対パスを含む絶対
      <acronym>URI</acronym>が<ulink
      url="&spec.http1.1;-sec14.html#sec14.30">Location:</ulink>
      の引数として必要ですが、いくつかのクライアントでは相対URIも受け
      つけます。通常、相対URIから絶対URIを作成するために
      $HTTP_SERVER_VARS['HTTP_HOST'],$HTTP_SERVER_VARS['PHP_SELF'],
      <function>dirname</function>を使用することが可能です。
      <informalexample>
       <programlisting>
<![CDATA[
header("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST']
                      ."/".dirname($HTTP_SERVER_VARS['PHP_SELF'])
                      ."/".$relative_url);
]]>
       </programlisting>
      </informalexample>
     </para>
    </note>
    <para>
     2番目の特別なヘッダは、文字列&quot;<literal>HTTP/</literal>&quot;
     から始まる全てのヘッダ(大文字・小文字は区別されません)です。この
     ヘッダは、送信するHTTPステータスコードを示すために使用されます。
     例えば、存在しないファイルへのリクエストを処理するためにあるPHPスクリ
     プトを使用するよう(<literal>ErrorDocument</literal>ディレクティブ
     により)Apacheを設定する場合、そのスクリプトが正しいステータスコー
     ドを返すようにする必要があります。
     <informalexample>
      <programlisting role="php">
<![CDATA[
header("HTTP/1.0 404 Not Found");
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       PHP 3では、このコードは、PHPがApacheモジュール版としてコンパイ
       ルされている場合にのみ動作します。<literal>Status</literal>ヘッ
       ダを用いて同じ効果を得ることが可能です。
       <informalexample>
        <programlisting role="php">
<![CDATA[
header("Status: 404 Not Found");
]]>
        </programlisting>
       </informalexample>
      </para>
     </note>
    </para>
    <para>
     PHPスクリプトはしばしば動的に HTML を生成するため、クライアントブ
     ラウザやサーバーおよびクライアントブラウザの間でプロキシがキャッ
     シュを行ったりするべきではありません。多くのプロキシとクライアン
     トでは、以下のコードにより強制的にキャッシュを無効にできます。
     <informalexample>
      <programlisting role="php">
<![CDATA[
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // 日付が過去
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                                     // 常に修正されている
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");                          // HTTP/1.0
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       上記のヘッダを全て出力しなかったとしてもページのキャッシュが行
       われない場合があることに気付くかもしれません。デフォルトのブラ
       ウザのキャッシュの動作をユーザが変更できる手段はいくつもありま
       す。上記のヘッダを送信することにより、スクリプトの出力がキャッ
       シュされる可能性がある設定を上書きするべきです。
      </para>
      <para>
       加えて、<function>session_cache_limiter</function>および
       設定<literal>session.cache_limiter</literal>をセッションが使用
       された際にキャッシュ関係のヘッダを正しく自動的に生成するために
       使用できます。
      </para>
     </note>
    </para>
    <para>
     覚えておいて頂きたいのは、<function>header</function> 関数は、通
     常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の出
     力の前にコールする必要があることです。
     頻出するエラーとして、<function>include</function> または
     <function>require</function> 関数、他のファイルをアクセスする関数
     に空白または空行があり、<function>header</function> の前に出力が
     行われてしまうというものがあります。同じ問題は、単一の PHP/HTMLファ
     イルを使用している場合でも存在します。
    </para>
    <para>
     <informalexample>
      <programlisting role="php">
<![CDATA[
<?php require("user_logging.inc") ?>


<?php header ("Content-type: audio/x-pn-realaudio"); ?>
// 動作しません。上の空行に注意して下さい。
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       PHP 4では、この問題に対処するために出力のバッファリングを使用す
       ることが可能です。この場合、ブラウザへの出力が送信するまでサー
       バに全てバッファリングされるオーバーヘッドがあります。出力バッ
       ファリングは、<function>ob_start</function>と
       <function>ob_end_flush</function>をスクリプトでコールするか
       <filename>php.ini</filename>またはサーバ設定ファイルの設定ディ
       レクティブ<literal>output_buffering</literal>を設定することによ
       り行うことが可能です。
      </para>
     </note>
    </para>    
    <para>
     PDFファイルを生成するといったように送信するデータを保存するかどう
     かユーザにプロンプトを表示したい場合、推奨されるファイル名を指定
     してブラウザに保存ダイアログを表示させる<ulink
     url="&url.rfc2183;">Content-Disposition</ulink>ヘッダを使用可能で
     す。
     <informalexample>
      <programlisting role="php">
<![CDATA[
<?php
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=downloaded.pdf");

/* ... PDFファイルを出力 ... */
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       Microsoft Internet Explorer 4.01にはこれが動作しないというバグ
       があります。この解決策はありません。Microsoft Internet Explorer
       5.5にもこれを妨げるバグがあります。これは、サービスパック2以降
       とすることで修整可能です。
      </para>
     </note>
    </para>
    <para>
     <function>headers_sent</function>,
     <function>setcookie</function>及び
     <link linkend="features.http-auth">HTTP認証</link>の節も参照下さ
     い。
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.headers-sent">
   <refnamediv>
    <refname>headers_sent</refname>
    <refpurpose>ヘッダーが送信されている場合に &true; を返す</refpurpose>
   </refnamediv>
   <refsect1>
    <title>説明</title>
     <methodsynopsis>
      <type>boolean</type><methodname>headers_sent</methodname>
      <void/>
     </methodsynopsis>
    <para>
     この関数は、HTTPヘッダが既に送信されている場合に &true; 、そうでな
     い場合に &false; を返します。
    </para>
    <para>
     <function>header</function>も参照下さい。
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.setcookie">
   <refnamediv>
    <refname>setcookie</refname>
    <refpurpose>クッキーを送信する</refpurpose>
   </refnamediv>
   <refsect1>
    <title>説明</title>
     <methodsynopsis>
      <type>int</type><methodname>setcookie</methodname>
      <methodparam><type>string</type><parameter>name</parameter></methodparam>
      <methodparam><type>string</type><parameter>
	<replaceable><optional>value</optional></replaceable>
       </parameter></methodparam>
      <methodparam><type>int</type><parameter>
	<replaceable><optional>expire</optional></replaceable>
       </parameter></methodparam>
      <methodparam><type>string</type><parameter>
	<replaceable><optional>path</optional></replaceable>
       </parameter></methodparam>
      <methodparam><type>string</type><parameter>
	<replaceable><optional>domain</optional></replaceable>
       </parameter></methodparam>
      <methodparam><type>int</type><parameter>
	<replaceable><optional>secure</optional></replaceable>
       </parameter></methodparam>
     </methodsynopsis>
    <para>
     <function>setcookie</function> は、その他のヘッダ情報と共に
     送信するクッキーを定義します。<parameter>name</parameter>
     を除くすべての引数はオプションです。
     クッキーは他のヘッダーを送信する<emphasis>前に</emphasis>送信
     される必要があります。(これはクッキーの制約であってPHPの制約では
     ありません)この制約により<literal>&lt;html></literal>または
     <literal>&lt;head></literal>タグの前にこの関数をコールする
     必要があります。
    </para>
    <para>
     引数<parameter>name</parameter>以外の全ての引数はオプションです。
     name 引数のみが指定された場合、nameという名前のクッキーはリモート
     クライアントから削除されます。
     全ての引数に関して引数の指定をスキップするために空文字列
     (<emphasis>&quot;&quot;</emphasis>)とすることが可能です。
     <parameter>expire</parameter>および <parameter>secure</parameter> 引数
     は空文字列でスキップすることはできません。代わりにゼロ
     (<emphasis>0</emphasis>)を使用してください。
     <parameter>expire</parameter>引数は、
     <function>time</function> または <function>mktime</function> 関数により
     返されたUNIX標準時を現す整数です。
     <parameter>secure</parameter>は、クッキーがHTTPS接続によってのみ
     伝送されることを指定します。
    </para>
    <para>  
     陥りやすい失敗:
     <itemizedlist>
      <listitem>
       <simpara>
	クッキーはクッキーを有効にするためにページを再ロードするまで
	アクセスすることができません。
       </simpara>
      </listitem>
      <listitem>
       <simpara>
	クッキーは設定されたものと同じパラメータで削除する必要がありま
        す。
       </simpara>
      </listitem>
     </itemizedlist>
    </para>
    <simpara>
     PHP 3において同じスクリプトで<function>setcookie</function>を複数
     回コールした場合、逆の順番で実行されます。他のクッキーを挿入する
     前にあるクッキーを削除しようとする場合、削除する前に挿入を行う必
     要があります。PHP 4では、<function>setcookie</function>を複数回コー
     ルした場合でもコールした順番で実行されます。
    </simpara>
    <para>
     クッキーを送信するいくつかの例を以下に示します。
     <example>
      <title><function>setcookie</function>による送信の例</title>
      <programlisting role="php">
<![CDATA[
setcookie ("TestCookie", "Test Value");
setcookie ("TestCookie", $value,time()+3600);  /* 1時間で期限切れ */
setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);
]]>
      </programlisting>
     </example>
    </para>
    <para>
     上記の例で送信したクッキーを削除する方法の例を以下に示します。
     <example>
      <title><function>setcookie</function>による削除の例</title>
      <programlisting role="php">
<![CDATA[
setcookie ("TestCookie");
// 有効期限を1時間前に設定する
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
]]>
      </programlisting>
     </example>
     クッキーを削除する場合には、ブラウザの削除機構を起動するために必
     ず有効期限を過去に設定する必要があります。
    </para>
    <para>
     クッキーのvalueの部分は、クッキーの送信を行う際に自動的に
     URLエンコードされ、またクッキーを受信した際は、自動的にデコード
     されてクッキー名と同じ名前の変数に格納されることに注意して下さい。
     すなわち、スクリプト内部でTestCookieの内容を見たい場合は、以下
     の例のうちの一つを使用して下さい。
     <informalexample>
      <programlisting role="php">
<![CDATA[
echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
     クッキー名で配列を記述することにより、クッキーの配列を設定するこ
     とも可能です。これにより配列要素と同数のクッキーを設定されますが、
     クッキーがスクリプトに受信された際に、値はクッキー名を有する配列
     に置きかえられます。
     <informalexample>
      <programlisting role="php">
<![CDATA[
setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset ($cookie)) {
    while (list ($name, $value) = each ($cookie)) {
        echo "$name == $value<br>\n";
    } 
}
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
    クッキーに関する詳細は、<ulink url="&spec.cookies;">&spec.cookies;
    </ulink> にあるNetscapeのクッキーに関する仕様をご覧ください。
    </para>
    <simpara>
     サービスパック1を適用したMicrosoftインターネットエクスプローラ4 
     は、パスに関するパラメータを設定したクッキーを正確に処理することが
     できません。
    </simpara>
    <simpara>
     Netscape Communicator 4.05およびMicrosoft Internet Explorer 3.x
     は、pathとtime が設定されていない場合、クッキーを正確に処理する
     ことができないようです。
    </simpara>
   </refsect1>
  </refentry>

 </reference>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->