# SOME DESCRIPTIVE TITLE. # Copyright (C) 2001-2022, Python Software Foundation # This file is distributed under the same license as the Python package. # FIRST AUTHOR , YEAR. # # Translators: # Rafael Fontenelle , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Python 3.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-12-30 14:59+0000\n" "PO-Revision-Date: 2022-11-05 17:21+0000\n" "Last-Translator: Rafael Fontenelle , 2022\n" "Language-Team: Japanese (https://www.transifex.com/python-doc/teams/5390/" "ja/)\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../library/cgi.rst:2 msgid ":mod:`cgi` --- Common Gateway Interface support" msgstr ":mod:`cgi` --- CGI (ゲートウェイインターフェース規格) のサポート" #: ../../library/cgi.rst:8 msgid "**Source code:** :source:`Lib/cgi.py`" msgstr "**ソースコード:** :source:`Lib/cgi.py`" #: ../../library/cgi.rst:18 msgid "" "The :mod:`cgi` module is deprecated (see :pep:`PEP 594 <594#cgi>` for " "details and alternatives)." msgstr "" #: ../../library/cgi.rst:24 msgid "Support module for Common Gateway Interface (CGI) scripts." msgstr "" "ゲートウェイインターフェース規格 (CGI) に準拠したスクリプトをサポートするため" "のモジュールです。" #: ../../library/cgi.rst:26 msgid "" "This module defines a number of utilities for use by CGI scripts written in " "Python." msgstr "" "このモジュールでは、Python で CGI スクリプトを書く際に使える様々なユーティリ" "ティを定義しています。" #: ../../library/cgi.rst:31 msgid "Introduction" msgstr "はじめに" #: ../../library/cgi.rst:35 msgid "" "A CGI script is invoked by an HTTP server, usually to process user input " "submitted through an HTML ``
`` or ```` element." msgstr "" "CGI スクリプトは、HTTP サーバによって起動され、通常は HTML の ```` また" "は ```` エレメントを通じてユーザが入力した内容を処理します。" #: ../../library/cgi.rst:38 msgid "" "Most often, CGI scripts live in the server's special :file:`cgi-bin` " "directory. The HTTP server places all sorts of information about the request " "(such as the client's hostname, the requested URL, the query string, and " "lots of other goodies) in the script's shell environment, executes the " "script, and sends the script's output back to the client." msgstr "" "ほとんどの場合、CGI スクリプトはサーバ上の特殊なディレクトリ :file:`cgi-bin` " "の下に置きます。HTTP サーバは、まずスクリプトを駆動するためのシェルの環境変数" "に、リクエストの全ての情報 (クライアントのホスト名、リクエストされている " "URL、クエリ文字列、その他諸々) を設定し、スクリプトを実行した後、スクリプトの" "出力をクライアントに送信します。" #: ../../library/cgi.rst:44 msgid "" "The script's input is connected to the client too, and sometimes the form " "data is read this way; at other times the form data is passed via the " "\"query string\" part of the URL. This module is intended to take care of " "the different cases and provide a simpler interface to the Python script. " "It also provides a number of utilities that help in debugging scripts, and " "the latest addition is support for file uploads from a form (if your browser " "supports it)." msgstr "" "スクリプトの入力端もクライアントに接続されていて、この経路を通じてフォーム" "データを読み込むこともあります。それ以外の場合には、フォームデータは URL の一" "部分である「クエリ文字列」を介して渡されます。このモジュールでは、上記のケー" "スの違いに注意しつつ、Python スクリプトに対しては単純なインターフェースを提供" "しています。このモジュールではまた、スクリプトをデバッグするためのユーティリ" "ティも多数提供しています。また、最近はフォームを経由したファイルのアップロー" "ドをサポートしています (ブラウザ側がサポートしていればです)。" #: ../../library/cgi.rst:51 msgid "" "The output of a CGI script should consist of two sections, separated by a " "blank line. The first section contains a number of headers, telling the " "client what kind of data is following. Python code to generate a minimal " "header section looks like this::" msgstr "" "CGI スクリプトの出力は 2 つのセクションからなり、空行で分割されています。最初" "のセクションは複数のヘッダからなり、後続するデータがどのようなものかをクライ" "アントに通知します。最小のヘッダセクションを生成するための Python のコードは" "以下のようなものです::" #: ../../library/cgi.rst:59 msgid "" "The second section is usually HTML, which allows the client software to " "display nicely formatted text with header, in-line images, etc. Here's " "Python code that prints a simple piece of HTML::" msgstr "" "二つ目のセクションは通常、ヘッダやインラインイメージ等の付属したテキストをう" "まくフォーマットして表示できるようにした HTML です。以下に単純な HTML を出力" "する Python コードを示します::" #: ../../library/cgi.rst:71 msgid "Using the cgi module" msgstr "cgi モジュールを使う" #: ../../library/cgi.rst:73 msgid "Begin by writing ``import cgi``." msgstr "``import cgi`` と記述して開始します。" #: ../../library/cgi.rst:75 msgid "When you write a new script, consider adding these lines::" msgstr "" "新たにスクリプトを書く際には、以下の行を付加するかどうか検討してください::" #: ../../library/cgi.rst:80 msgid "" "This activates a special exception handler that will display detailed " "reports in the web browser if any errors occur. If you'd rather not show " "the guts of your program to users of your script, you can have the reports " "saved to files instead, with code like this::" msgstr "" "これによって、特別な例外処理が有効にされ、エラーが発生した際に web ブラウザ上" "に詳細なレポートを出力するようになります。ユーザにスクリプトの内部を見せたく" "ないのなら、以下のようにしてレポートをファイルに保存できます::" #: ../../library/cgi.rst:88 msgid "" "It's very helpful to use this feature during script development. The reports " "produced by :mod:`cgitb` provide information that can save you a lot of time " "in tracking down bugs. You can always remove the ``cgitb`` line later when " "you have tested your script and are confident that it works correctly." msgstr "" "スクリプトを開発する際には、この機能はとても役に立ちます。 :mod:`cgitb` が生" "成する報告はバグを追跡するためにかかる時間を大幅に減らせるような情報を提供し" "てくれます。スクリプトをテストし終わり、正確に動作することを確認したら、いつ" "でも ``cgitb`` の行を削除できます。" #: ../../library/cgi.rst:93 msgid "" "To get at submitted form data, use the :class:`FieldStorage` class. If the " "form contains non-ASCII characters, use the *encoding* keyword parameter set " "to the value of the encoding defined for the document. It is usually " "contained in the META tag in the HEAD section of the HTML document or by " "the :mailheader:`Content-Type` header. This reads the form contents from " "the standard input or the environment (depending on the value of various " "environment variables set according to the CGI standard). Since it may " "consume standard input, it should be instantiated only once." msgstr "" "入力されたフォームデータを取得するには、 :class:`FieldStorage` クラスを使いま" "す。フォームが非 ASCII 文字を含んでいる場合は、 *encoding* キーワードパラメー" "タを使用してドキュメントに対して定義されたエンコーディングの値を設定してくだ" "さい。それは、通常 HTML ドキュメントの HEAD セクション中の META タグ、あるい" "は :mailheader:`Content-Type` ヘッダーに含まれています。これは、標準入力また" "は環境変数からフォームの内容を読み出します (どちらから読み出すかは、複数の環" "境変数の値が CGI 標準に従ってどのように設定されているかで決まります)。インス" "タンスが標準入力を使うかもしれないので、インスタンス生成を行うのは一度だけに" "しなければなりません。" #: ../../library/cgi.rst:102 msgid "" "The :class:`FieldStorage` instance can be indexed like a Python dictionary. " "It allows membership testing with the :keyword:`in` operator, and also " "supports the standard dictionary method :meth:`~dict.keys` and the built-in " "function :func:`len`. Form fields containing empty strings are ignored and " "do not appear in the dictionary; to keep such values, provide a true value " "for the optional *keep_blank_values* keyword parameter when creating the :" "class:`FieldStorage` instance." msgstr "" ":class:`FieldStorage` のインスタンスは Python の辞書型のように添え字アクセス" "が可能です。 :keyword:`in` を使用することによって要素が含まれているかの判定も" "出来ますし、標準の辞書メソッド :meth:`~dict.keys` 及び組み込み関数 :func:" "`len` もサポートしています。空の文字列を含むフォーム要素は無視され、辞書には" "現れません。そのような値を保持するには、:class:`FieldStorage` のインスタンス" "作成の際にオプションのキーワードパラメータ *keep_blank_values* に true を指定" "してください。" #: ../../library/cgi.rst:110 msgid "" "For instance, the following code (which assumes that the :mailheader:" "`Content-Type` header and blank line have already been printed) checks that " "the fields ``name`` and ``addr`` are both set to a non-empty string::" msgstr "" "例えば、以下のコード (:mailheader:`Content-Type` ヘッダと空行はすでに出力され" "た後とします) は ``name`` および ``addr`` フィールドが両方とも空の文字列に設" "定されていないか調べます::" #: ../../library/cgi.rst:124 msgid "" "Here the fields, accessed through ``form[key]``, are themselves instances " "of :class:`FieldStorage` (or :class:`MiniFieldStorage`, depending on the " "form encoding). The :attr:`~FieldStorage.value` attribute of the instance " "yields the string value of the field. The :meth:`~FieldStorage.getvalue` " "method returns this string value directly; it also accepts an optional " "second argument as a default to return if the requested key is not present." msgstr "" "ここで、 ``form[key]`` で参照される各フィールドはそれ自体が :class:" "`FieldStorage` (または :class:`MiniFieldStorage` 。フォームのエンコードによっ" "て変わります) のインスタンスです。インスタンスの属性 :attr:`~FieldStorage." "value` の内容は対応するフィールドの値で、文字列になります。 :meth:" "`~FieldStorage.getvalue` メソッドはこの文字列値を直接返します。 :meth:" "`getvalue` の 2 つめの引数にオプションの値を与えると、リクエストされたキーが" "存在しない場合に返すデフォルトの値になります。" #: ../../library/cgi.rst:131 msgid "" "If the submitted form data contains more than one field with the same name, " "the object retrieved by ``form[key]`` is not a :class:`FieldStorage` or :" "class:`MiniFieldStorage` instance but a list of such instances. Similarly, " "in this situation, ``form.getvalue(key)`` would return a list of strings. If " "you expect this possibility (when your HTML form contains multiple fields " "with the same name), use the :meth:`~FieldStorage.getlist` method, which " "always returns a list of values (so that you do not need to special-case the " "single item case). For example, this code concatenates any number of " "username fields, separated by commas::" msgstr "" "入力されたフォームデータに同じ名前のフィールドが二つ以上あれば、 " "``form[key]`` で得られるオブジェクトは :class:`FieldStorage` や :class:" "`MiniFieldStorage` のインスタンスではなく、そうしたインスタンスのリストになり" "ます。この場合、 ``form.getvalue(key)`` も同様に、文字列からなるリストを返し" "ます。もしこうした状況が起きうると思うなら (HTML のフォームに同じ名前をもった" "フィールドが複数含まれているのなら) 、 :meth:`~FieldStorage.getlist` メソッド" "を使ってください。これは常に値のリストを返します (単一要素のケースを特別扱い" "する必要はありません)。例えば、以下のコードは任意の数のユーザ名フィールドを結" "合し、コンマで分割された文字列にします::" #: ../../library/cgi.rst:144 msgid "" "If a field represents an uploaded file, accessing the value via the :attr:" "`~FieldStorage.value` attribute or the :meth:`~FieldStorage.getvalue` method " "reads the entire file in memory as bytes. This may not be what you want. " "You can test for an uploaded file by testing either the :attr:`~FieldStorage." "filename` attribute or the :attr:`~FieldStorage.file` attribute. You can " "then read the data from the :attr:`!file` attribute before it is " "automatically closed as part of the garbage collection of the :class:" "`FieldStorage` instance (the :func:`~io.RawIOBase.read` and :func:`~io." "IOBase.readline` methods will return bytes)::" msgstr "" "フィールドがアップロードされたファイルを表している場合、 :attr:" "`~FieldStorage.value` 属性や :meth:`~FieldStorage.getvalue` メソッドを使って" "フィールドの値にアクセスすると、ファイルの内容をすべてメモリ上にバイト列とし" "て読み込みます。これは場合によっては望ましい動作ではないかもしれません。アッ" "プロードされたファイルがあるかどうかは :attr:`~FieldStorage.filename` 属性お" "よび :attr:`~FieldStorage.file` 属性のいずれかで調べられます。そして、 :" "class:`FieldStorage` インスタンスのガベージコレクションの一部として自動的に閉" "じられるまでの間に、 :attr:`!file` 属性から以下のようにデータを読み込むことが" "できます (:func:`~io.RawIOBase.read` および :func:`~io.IOBase.readline` メ" "ソッドはバイト列を返します):" #: ../../library/cgi.rst:164 msgid "" ":class:`FieldStorage` objects also support being used in a :keyword:`with` " "statement, which will automatically close them when done." msgstr "" ":class:`FieldStorage` オブジェクトは :keyword:`with` 文での使用にも対応してい" "ます。 with 文を使用した場合、オブジェクトは終了時に自動的に閉じられます。" #: ../../library/cgi.rst:167 msgid "" "If an error is encountered when obtaining the contents of an uploaded file " "(for example, when the user interrupts the form submission by clicking on a " "Back or Cancel button) the :attr:`~FieldStorage.done` attribute of the " "object for the field will be set to the value -1." msgstr "" "アップロードされたファイルの内容を取得している間にエラーが発生した場合 (例え" "ば、ユーザーが戻るボタンやキャンセルボタンで submit を中断した場合)、その" "フィールドのオブジェクトの :attr:`~FieldStorage.done` 属性には -1 が設定され" "ます。" #: ../../library/cgi.rst:172 msgid "" "The file upload draft standard entertains the possibility of uploading " "multiple files from one field (using a recursive :mimetype:`multipart/\\*` " "encoding). When this occurs, the item will be a dictionary-like :class:" "`FieldStorage` item. This can be determined by testing its :attr:`!type` " "attribute, which should be :mimetype:`multipart/form-data` (or perhaps " "another MIME type matching :mimetype:`multipart/\\*`). In this case, it can " "be iterated over recursively just like the top-level form object." msgstr "" "現在ドラフトとなっているファイルアップロードの標準仕様では、一つのフィールド" "から (再帰的な :mimetype:`multipart/\\*` エンコーディングを使って) 複数のファ" "イルがアップロードされる可能性を受け入れています。この場合、アイテムは辞書形" "式の :class:`FieldStorage` アイテムとなります。複数ファイルかどうかは :attr:" "`!type` 属性が :mimetype:`multipart/form-data` (または :mimetype:`multipart/" "\\*` にマッチする他の MIME 型) になっているかどうかを調べれば判別できます。こ" "の場合、トップレベルのフォームオブジェクトと同様にして再帰的に個別処理できま" "す。" #: ../../library/cgi.rst:180 msgid "" "When a form is submitted in the \"old\" format (as the query string or as a " "single data part of type :mimetype:`application/x-www-form-urlencoded`), the " "items will actually be instances of the class :class:`MiniFieldStorage`. In " "this case, the :attr:`!list`, :attr:`!file`, and :attr:`filename` attributes " "are always ``None``." msgstr "" "フォームが「古い」形式で入力された場合 (クエリ文字列または単一の :mimetype:" "`application/x-www-form-urlencoded` データで入力された場合)、データ要素の実体" "は :class:`MiniFieldStorage` クラスのインスタンスになります。この場合、 :" "attr:`!list` 、 :attr:`!file` 、および :attr:`filename` 属性は常に ``None`` " "になります。" #: ../../library/cgi.rst:185 msgid "" "A form submitted via POST that also has a query string will contain both :" "class:`FieldStorage` and :class:`MiniFieldStorage` items." msgstr "" "フォームがPOSTによって送信され、クエリー文字列も持っていた場合、 :class:" "`FieldStorage` と :class:`MiniFieldStorage` の両方が含まれます。" #: ../../library/cgi.rst:188 msgid "" "The :attr:`~FieldStorage.file` attribute is automatically closed upon the " "garbage collection of the creating :class:`FieldStorage` instance." msgstr "" ":attr:`~FieldStorage.file` 属性は、それを作成した :class:`FieldStorage` イン" "スタンスのガベージコレクションによって自動的に閉じられます。" #: ../../library/cgi.rst:192 msgid "" "Added support for the context management protocol to the :class:" "`FieldStorage` class." msgstr "" ":class:`FieldStorage` クラスにコンテキスト管理プロトコルのサポートが追加され" "ました。" #: ../../library/cgi.rst:198 msgid "Higher Level Interface" msgstr "高水準インターフェース" #: ../../library/cgi.rst:200 msgid "" "The previous section explains how to read CGI form data using the :class:" "`FieldStorage` class. This section describes a higher level interface which " "was added to this class to allow one to do it in a more readable and " "intuitive way. The interface doesn't make the techniques described in " "previous sections obsolete --- they are still useful to process file uploads " "efficiently, for example." msgstr "" "前節では CGI フォームデータを :class:`FieldStorage` クラスを使って読み出す方" "法について解説しました。この節では、フォームデータを分かりやすく直感的な方法" "で読み出せるようにするために追加された、より高水準のインターフェースについて" "記述します。このインターフェースは前節で説明した技術を撤廃するものではありま" "せん --- 例えば、前節の技術は依然としてファイルのアップロードを効率的に行う上" "で便利です。" #: ../../library/cgi.rst:209 msgid "" "The interface consists of two simple methods. Using the methods you can " "process form data in a generic way, without the need to worry whether only " "one or more values were posted under one name." msgstr "" "このインターフェースは 2 つの単純なメソッドからなります。このメソッドを使え" "ば、一般的な方法でフォームデータを処理でき、ある名前のフィールドに入力された" "値が一つなのかそれ以上なのかを心配する必要がなくなります。" #: ../../library/cgi.rst:213 msgid "" "In the previous section, you learned to write following code anytime you " "expected a user to post more than one value under one name::" msgstr "" "前節では、一つのフィールド名に対して二つ以上の値が入力されるかもしれない場合" "には、常に以下のようなコードを書くよう学びました::" #: ../../library/cgi.rst:222 msgid "" "This situation is common for example when a form contains a group of " "multiple checkboxes with the same name::" msgstr "" "こういった状況は、例えば以下のように、同じ名前を持った複数のチェックボックス" "からなるグループがフォームに入っているような場合によく起きます::" #: ../../library/cgi.rst:228 msgid "" "In most situations, however, there's only one form control with a particular " "name in a form and then you expect and need only one value associated with " "this name. So you write a script containing for example this code::" msgstr "" "しかしながら、ほとんどの場合、あるフォーム中で特定の名前を持ったコントロール" "はただ一つしかないので、その名前に関連付けられた値はただ一つしかないはずだと" "考えるでしょう。そこで、スクリプトには例えば以下のようなコードを書くでしょ" "う::" #: ../../library/cgi.rst:234 msgid "" "The problem with the code is that you should never expect that a client will " "provide valid input to your scripts. For example, if a curious user appends " "another ``user=foo`` pair to the query string, then the script would crash, " "because in this situation the ``getvalue(\"user\")`` method call returns a " "list instead of a string. Calling the :meth:`~str.upper` method on a list " "is not valid (since lists do not have a method of this name) and results in " "an :exc:`AttributeError` exception." msgstr "" "このコードの問題点は、クライアントがスクリプトにとって常に有効な入力を提供す" "るとは期待できないところにあります。例えば、もし好奇心旺盛なユーザがもう一つ" "の ``user=foo`` ペアをクエリ文字列に追加したら、 ``getvalue(\"user\")`` メ" "ソッドは文字列ではなくリストを返すため、このスクリプトはクラッシュするでしょ" "う。リストに対して :meth:`~str.upper` メソッドを呼び出すと、引数が有効でない " "(リスト型はその名前のメソッドを持っていない) ため、例外 :exc:" "`AttributeError` を送出します。" #: ../../library/cgi.rst:242 msgid "" "Therefore, the appropriate way to read form data values was to always use " "the code which checks whether the obtained value is a single value or a list " "of values. That's annoying and leads to less readable scripts." msgstr "" "従って、フォームデータの値を読み出しには、得られた値が単一の値なのか値のリス" "トなのかを常に調べるコードを使うのが適切でした。これでは煩わしく、より読みに" "くいスクリプトになってしまいます。" #: ../../library/cgi.rst:246 msgid "" "A more convenient approach is to use the methods :meth:`~FieldStorage." "getfirst` and :meth:`~FieldStorage.getlist` provided by this higher level " "interface." msgstr "" "ここで述べる高水準のインターフェースで提供している :meth:`~FieldStorage." "getfirst` や :meth:`~FieldStorage.getlist` メソッドを使うと、もっと便利にアプ" "ローチできます。" #: ../../library/cgi.rst:252 msgid "" "This method always returns only one value associated with form field *name*. " "The method returns only the first value in case that more values were posted " "under such name. Please note that the order in which the values are " "received may vary from browser to browser and should not be counted on. " "[#]_ If no such form field or value exists then the method returns the " "value specified by the optional parameter *default*. This parameter " "defaults to ``None`` if not specified." msgstr "" "フォームフィールド *name* に関連付けられた値をつねに一つだけ返す軽量メソッド" "です。同じ名前で 1 つ以上の値がポストされている場合、このメソッドは最初の値だ" "けを返します。フォームから値を受信する際の値の並び順はブラウザ間で異なる可能" "性があり、特定の順番であるとは期待できないので注意してください。[#]_ 指定した" "フォームフィールドや値がない場合、このメソッドはオプションの引数 *default* を" "返します。このパラメタを指定しない場合、標準の値は ``None`` に設定されます。" #: ../../library/cgi.rst:263 msgid "" "This method always returns a list of values associated with form field " "*name*. The method returns an empty list if no such form field or value " "exists for *name*. It returns a list consisting of one item if only one " "such value exists." msgstr "" "このメソッドはフォームフィールド *name* に関連付けられた値を常にリストにして" "返します。*name* に指定したフォームフィールドや値が存在しない場合、このメソッ" "ドは空のリストを返します。値が一つだけ存在する場合、要素を一つだけ含むリスト" "を返します。" #: ../../library/cgi.rst:267 msgid "Using these methods you can write nice compact code::" msgstr "" "これらのメソッドを使うことで、以下のようにナイスでコンパクトにコードを書けま" "す::" #: ../../library/cgi.rst:279 msgid "Functions" msgstr "関数" #: ../../library/cgi.rst:281 msgid "" "These are useful if you want more control, or if you want to employ some of " "the algorithms implemented in this module in other circumstances." msgstr "" "より細かく CGI をコントロールしたり、このモジュールで実装されているアルゴリズ" "ムを他の状況で利用したい場合には、以下の関数が便利です。" #: ../../library/cgi.rst:287 msgid "" "Parse a query in the environment or from a file (the file defaults to ``sys." "stdin``). The *keep_blank_values*, *strict_parsing* and *separator* " "parameters are passed to :func:`urllib.parse.parse_qs` unchanged." msgstr "" "環境変数、またはファイルからからクエリを解釈します (ファイルは標準で ``sys." "stdin`` になります) *keep_blank_values*, *strict_parsing*, *separator* 引数は" "そのまま :func:`urllib.parse.parse_qs` に渡されます。" #: ../../library/cgi.rst:294 msgid "" "Parse input of type :mimetype:`multipart/form-data` (for file uploads). " "Arguments are *fp* for the input file, *pdict* for a dictionary containing " "other parameters in the :mailheader:`Content-Type` header, and *encoding*, " "the request encoding." msgstr "" #: ../../library/cgi.rst:299 msgid "" "Returns a dictionary just like :func:`urllib.parse.parse_qs`: keys are the " "field names, each value is a list of values for that field. For non-file " "fields, the value is a list of strings." msgstr "" #: ../../library/cgi.rst:303 msgid "" "This is easy to use but not much good if you are expecting megabytes to be " "uploaded --- in that case, use the :class:`FieldStorage` class instead which " "is much more flexible." msgstr "" "この関数は簡単に使えますが、数メガバイトのデータがアップロードされると考えら" "れる場合にはあまり適していません --- その場合、より柔軟性のある :class:" "`FieldStorage` を代りに使ってください。" #: ../../library/cgi.rst:307 msgid "" "Added the *encoding* and *errors* parameters. For non-file fields, the " "value is now a list of strings, not bytes." msgstr "" #: ../../library/cgi.rst:311 msgid "Added the *separator* parameter." msgstr " *separator* 引数が追加されました。" #: ../../library/cgi.rst:317 msgid "" "Parse a MIME header (such as :mailheader:`Content-Type`) into a main value " "and a dictionary of parameters." msgstr "" "(:mailheader:`Content-Type` のような) MIME ヘッダを解釈し、ヘッダの主要値と各" "パラメタからなる辞書にします。" #: ../../library/cgi.rst:323 msgid "" "Robust test CGI script, usable as main program. Writes minimal HTTP headers " "and formats all information provided to the script in HTML format." msgstr "" "メインプログラムから利用できる堅牢性テストを行う CGI スクリプトです。最小の " "HTTP ヘッダと、スクリプトで供給された全ての情報をHTML形式で書式化して出力しま" "す。" #: ../../library/cgi.rst:329 msgid "Format the shell environment in HTML." msgstr "シェル変数を HTML に書式化して出力します。" #: ../../library/cgi.rst:334 msgid "Format a form in HTML." msgstr "フォームを HTML に初期化して出力します。" #: ../../library/cgi.rst:339 msgid "Format the current directory in HTML." msgstr "現在のディレクトリを HTML に書式化して出力します。" #: ../../library/cgi.rst:344 msgid "Print a list of useful (used by CGI) environment variables in HTML." msgstr "意味のある (CGI の使う) 環境変数を HTML で出力します。" #: ../../library/cgi.rst:350 msgid "Caring about security" msgstr "セキュリティへの配慮" #: ../../library/cgi.rst:354 msgid "" "There's one important rule: if you invoke an external program (via :func:`os." "system`, :func:`os.popen` or other functions with similar functionality), " "make very sure you don't pass arbitrary strings received from the client to " "the shell. This is a well-known security hole whereby clever hackers " "anywhere on the web can exploit a gullible CGI script to invoke arbitrary " "shell commands. Even parts of the URL or field names cannot be trusted, " "since the request doesn't have to come from your form!" msgstr "" "重要なルールが一つあります: (:func:`os.system`, :func:`os.popen` またはその他" "の同様の機能によって) 外部プログラムを呼び出すなら、クライアントから受信した" "任意の文字列をシェルに渡していないことをよく確かめてください。これはよく知ら" "れているセキュリティホールであり、これによって web のどこかにいる悪賢いハッ" "カーが、だまされやすい CGI スクリプトに任意のシェルコマンドを実行させてしまえ" "ます。URL の一部やフィールド名でさえも信用してはいけません。CGI へのリクエス" "トはあなたの作ったフォームから送信されるとは限らないからです!" #: ../../library/cgi.rst:362 msgid "" "To be on the safe side, if you must pass a string gotten from a form to a " "shell command, you should make sure the string contains only alphanumeric " "characters, dashes, underscores, and periods." msgstr "" "安全な方法をとるために、フォームから入力された文字をシェルに渡す場合、文字列" "に入っているのが英数文字、ダッシュ、アンダースコア、およびピリオドだけかどう" "かを確認してください。" #: ../../library/cgi.rst:368 msgid "Installing your CGI script on a Unix system" msgstr "CGI スクリプトを Unix システムにインストールする" #: ../../library/cgi.rst:370 msgid "" "Read the documentation for your HTTP server and check with your local system " "administrator to find the directory where CGI scripts should be installed; " "usually this is in a directory :file:`cgi-bin` in the server tree." msgstr "" "あなたの使っている HTTP サーバのドキュメントを読んでください。そしてローカル" "システムの管理者と一緒にどのディレクトリに CGI スクリプトをインストールすべき" "かを調べてください; 通常これはサーバのファイルシステムツリー内の :file:`cgi-" "bin` ディレクトリです。" #: ../../library/cgi.rst:374 msgid "" "Make sure that your script is readable and executable by \"others\"; the " "Unix file mode should be ``0o755`` octal (use ``chmod 0755 filename``). " "Make sure that the first line of the script contains ``#!`` starting in " "column 1 followed by the pathname of the Python interpreter, for instance::" msgstr "" "あなたのスクリプトが \"others\" によって読み取り可能および実行可能であること" "を確認してください; Unix ファイルモードは 8 進表記で ``0o755`` です (``chmod " "0755 filename`` を使ってください)。スクリプトの最初の行の 1 カラム目が、``#!" "`` で開始し、その後に Python インタプリタへのパス名が続いていることを確認して" "ください。例えば::" #: ../../library/cgi.rst:381 msgid "" "Make sure the Python interpreter exists and is executable by \"others\"." msgstr "" "Python インタプリタが存在し、\"others\" によって実行可能であることを確かめて" "ください。" #: ../../library/cgi.rst:383 msgid "" "Make sure that any files your script needs to read or write are readable or " "writable, respectively, by \"others\" --- their mode should be ``0o644`` for " "readable and ``0o666`` for writable. This is because, for security reasons, " "the HTTP server executes your script as user \"nobody\", without any special " "privileges. It can only read (write, execute) files that everybody can read " "(write, execute). The current directory at execution time is also different " "(it is usually the server's cgi-bin directory) and the set of environment " "variables is also different from what you get when you log in. In " "particular, don't count on the shell's search path for executables (:envvar:" "`PATH`) or the Python module search path (:envvar:`PYTHONPATH`) to be set to " "anything interesting." msgstr "" "あなたのスクリプトが読み書きしなければならないファイルが全て \"others\" に" "よって読み出しや書き込み可能であることを確かめてください --- 読み出し可能の" "ファイルモードは ``0o644`` で、書き込み可能のファイルモードは ``0o666`` にな" "るはずです。これは、セキュリティ上の理由から、 HTTP サーバがあなたのスクリプ" "トを特権を全く持たないユーザ \"nobody\" の権限で実行するからです。この権限下" "では、誰でもが読める (書ける、実行できる) ファイルしか読み出し (書き込み、実" "行) できません。スクリプト実行時のディレクトリや環境変数のセットもあなたがロ" "グインしたときの設定と異なります。特に、実行ファイルに対するシェルの検索パス " "(:envvar:`PATH`) や Python のモジュール検索パス (:envvar:`PYTHONPATH`)が何ら" "かの値に設定されていると期待してはいけません。" #: ../../library/cgi.rst:394 msgid "" "If you need to load modules from a directory which is not on Python's " "default module search path, you can change the path in your script, before " "importing other modules. For example::" msgstr "" "モジュールを Python の標準設定におけるモジュール検索パス上にないディレクトリ" "からロードする必要がある場合、他のモジュールを取り込む前にスクリプト内で検索" "パスを変更できます。例えば::" #: ../../library/cgi.rst:402 msgid "(This way, the directory inserted last will be searched first!)" msgstr "(この方法では、最後に挿入されたディレクトリが最初に検索されます!)" #: ../../library/cgi.rst:404 msgid "" "Instructions for non-Unix systems will vary; check your HTTP server's " "documentation (it will usually have a section on CGI scripts)." msgstr "" "非 Unix システムにおける説明は変わるでしょう; あなたの使っている HTTP サーバ" "のドキュメントを調べてください (普通は CGI スクリプトに関する節があります)。" #: ../../library/cgi.rst:409 msgid "Testing your CGI script" msgstr "CGI スクリプトをテストする" #: ../../library/cgi.rst:411 msgid "" "Unfortunately, a CGI script will generally not run when you try it from the " "command line, and a script that works perfectly from the command line may " "fail mysteriously when run from the server. There's one reason why you " "should still test your script from the command line: if it contains a syntax " "error, the Python interpreter won't execute it at all, and the HTTP server " "will most likely send a cryptic error to the client." msgstr "" "残念ながら、CGI スクリプトは普通、コマンドラインから起動しようとしても動きま" "せん。また、コマンドラインから起動した場合には完璧に動作するスクリプトが、不" "思議なことにサーバからの起動では失敗することがあります。しかし、スクリプトを" "コマンドラインから実行してみなければならない理由が一つあります: もしスクリプ" "トが文法エラーを含んでいれば、Python インタプリタはそのプログラムを全く実行し" "ないため、HTTP サーバはほとんどの場合クライアントに謎めいたエラーを送信するか" "らです。" #: ../../library/cgi.rst:418 msgid "" "Assuming your script has no syntax errors, yet it does not work, you have no " "choice but to read the next section." msgstr "" "スクリプトが構文エラーを含まないのにうまく動作しないなら、次の節に読み進むし" "かありません。" #: ../../library/cgi.rst:423 msgid "Debugging CGI scripts" msgstr "CGI スクリプトをデバッグする" #: ../../library/cgi.rst:427 msgid "" "First of all, check for trivial installation errors --- reading the section " "above on installing your CGI script carefully can save you a lot of time. " "If you wonder whether you have understood the installation procedure " "correctly, try installing a copy of this module file (:file:`cgi.py`) as a " "CGI script. When invoked as a script, the file will dump its environment " "and the contents of the form in HTML format. Give it the right mode etc., " "and send it a request. If it's installed in the standard :file:`cgi-bin` " "directory, it should be possible to send it a request by entering a URL into " "your browser of the form:" msgstr "" "何よりもまず、些細なインストール関連のエラーでないか確認してください --- 上" "の CGI スクリプトのインストールに関する節を注意深く読めば時間を大いに節約でき" "ます。もしインストールの手続きを正しく理解しているか不安なら、このモジュール" "のファイル (:file:`cgi.py`) をコピーして、CGI スクリプトとしてインストールし" "てみてください。このファイルはスクリプトとして呼び出すと、スクリプトの実行環" "境とフォームの内容を HTML 形式で出力します。ファイルに正しいモードを設定する" "などして、リクエストを送ってみてください。標準的な :file:`cgi-bin` ディレクト" "リにインストールされていれば、以下のような URL をブラウザに入力してリクエスト" "を送信できるはずです:" #: ../../library/cgi.rst:440 msgid "" "If this gives an error of type 404, the server cannot find the script -- " "perhaps you need to install it in a different directory. If it gives " "another error, there's an installation problem that you should fix before " "trying to go any further. If you get a nicely formatted listing of the " "environment and form content (in this example, the fields should be listed " "as \"addr\" with value \"At Home\" and \"name\" with value \"Joe Blow\"), " "the :file:`cgi.py` script has been installed correctly. If you follow the " "same procedure for your own script, you should now be able to debug it." msgstr "" "もしタイプ 404 のエラーになるなら、サーバはスクリプトを発見できないでいます " "-- おそらくあなたはスクリプトを別のディレクトリに入れる必要があるのでしょう。" "他のエラーになるなら、先に進む前に解決しなければならないインストール上の問題" "があります。もし実行環境の情報とフォーム内容 (この例では、各フィールドは" "フィールド名 \"addr\" に対して値 \"At Home\"、およびフィールド名 \"name\" に" "対して \"Joe Blow\") が綺麗にフォーマットされて表示されるなら、 :file:`cgi." "py` スクリプトは正しくインストールされています。同じ操作をあなたの自作スクリ" "プトに対して行えば、スクリプトをデバッグできるようになるはずです。" #: ../../library/cgi.rst:449 msgid "" "The next step could be to call the :mod:`cgi` module's :func:`test` function " "from your script: replace its main code with the single statement ::" msgstr "" "次のステップでは :mod:`cgi` モジュールの :func:`test` 関数を呼び出すことにな" "ります: メインプログラムコードを以下の 1 文と置き換えてください ::" #: ../../library/cgi.rst:454 msgid "" "This should produce the same results as those gotten from installing the :" "file:`cgi.py` file itself." msgstr "" "この操作で :file:`cgi.py` ファイル自体をインストールした時と同じ結果を出力す" "るはずです。" #: ../../library/cgi.rst:457 msgid "" "When an ordinary Python script raises an unhandled exception (for whatever " "reason: of a typo in a module name, a file that can't be opened, etc.), the " "Python interpreter prints a nice traceback and exits. While the Python " "interpreter will still do this when your CGI script raises an exception, " "most likely the traceback will end up in one of the HTTP server's log files, " "or be discarded altogether." msgstr "" "通常の Python スクリプトが例外を処理しきれずに送出した場合 (様々な理由: モ" "ジュール名のタイプミス、ファイルが開けなかった、など)、Python インタプリタは" "ナイスなトレースバックを出力して終了します。Python インタプリタはあなたの " "CGI スクリプトが例外を送出した場合にも同様に振舞うので、トレースバックは大抵" "HTTP サーバのいずれかのログファイルに残るかまったく無視されるかです。" #: ../../library/cgi.rst:464 msgid "" "Fortunately, once you have managed to get your script to execute *some* " "code, you can easily send tracebacks to the web browser using the :mod:" "`cgitb` module. If you haven't done so already, just add the lines::" msgstr "" "幸運なことに、あなたが自作のスクリプトで *何らかの* コードを実行できるように" "なったら、 :mod:`cgitb` モジュールを使って簡単にトレースバックを web ブラウザ" "に送信できます。まだそうでないなら、以下の2行::" #: ../../library/cgi.rst:471 msgid "" "to the top of your script. Then try running it again; when a problem " "occurs, you should see a detailed report that will likely make apparent the " "cause of the crash." msgstr "" "をスクリプトの先頭に追加してください。そしてスクリプトを再度走らせます; 問題" "が発生すれば、クラッシュの原因を見出せるような詳細な報告を読めます。" #: ../../library/cgi.rst:475 msgid "" "If you suspect that there may be a problem in importing the :mod:`cgitb` " "module, you can use an even more robust approach (which only uses built-in " "modules)::" msgstr "" ":mod:`cgitb` モジュールのインポートに問題がありそうだと思うなら、(組み込みモ" "ジュールだけを使った) もっと堅牢なアプローチを取れます::" #: ../../library/cgi.rst:484 msgid "" "This relies on the Python interpreter to print the traceback. The content " "type of the output is set to plain text, which disables all HTML " "processing. If your script works, the raw HTML will be displayed by your " "client. If it raises an exception, most likely after the first two lines " "have been printed, a traceback will be displayed. Because no HTML " "interpretation is going on, the traceback will be readable." msgstr "" "このコードは Python インタプリタがトレースバックを出力することに依存していま" "す。出力のコンテント型はプレーンテキストに設定されており、全ての HTML 処理を" "無効にしています。スクリプトがうまく動作する場合、生の HTML コードがクライア" "ントに表示されます。スクリプトが例外を送出する場合、最初の 2 行が出力された" "後、トレースバックが表示されます。HTML の解釈は行われないので、トレースバック" "を読めるはずです。" #: ../../library/cgi.rst:493 msgid "Common problems and solutions" msgstr "よくある問題と解決法" #: ../../library/cgi.rst:495 msgid "" "Most HTTP servers buffer the output from CGI scripts until the script is " "completed. This means that it is not possible to display a progress report " "on the client's display while the script is running." msgstr "" "ほとんどの HTTP サーバはスクリプトの実行が完了するまで CGI からの出力をバッ" "ファします。このことは、スクリプトの実行中にクライアントが進捗状況報告を表示" "できないことを意味します。" #: ../../library/cgi.rst:499 msgid "Check the installation instructions above." msgstr "上のインストールに関する説明を調べましょう。" #: ../../library/cgi.rst:501 msgid "" "Check the HTTP server's log files. (``tail -f logfile`` in a separate " "window may be useful!)" msgstr "" "HTTP サーバのログファイルを調べましょう。(別のウィンドウで ``tail -f " "logfile`` を実行すると便利かもしれません!)" #: ../../library/cgi.rst:504 msgid "" "Always check a script for syntax errors first, by doing something like " "``python script.py``." msgstr "" "常に ``python script.py`` などとして、スクリプトが構文エラーでないか調べま" "しょう。" #: ../../library/cgi.rst:507 msgid "" "If your script does not have any syntax errors, try adding ``import cgitb; " "cgitb.enable()`` to the top of the script." msgstr "" "スクリプトに構文エラーがないなら、``import cgitb; cgitb.enable()`` をスクリプ" "トの先頭に追加してみましょう。" #: ../../library/cgi.rst:510 msgid "" "When invoking external programs, make sure they can be found. Usually, this " "means using absolute path names --- :envvar:`PATH` is usually not set to a " "very useful value in a CGI script." msgstr "" "外部プログラムを起動するときには、スクリプトがそのプログラムを見つけられるよ" "うにしましょう。これは通常、絶対パス名を使うことを意味します --- :envvar:" "`PATH` は普通、あまり CGI スクリプトにとって便利でない値に設定されています。" #: ../../library/cgi.rst:514 msgid "" "When reading or writing external files, make sure they can be read or " "written by the userid under which your CGI script will be running: this is " "typically the userid under which the web server is running, or some " "explicitly specified userid for a web server's ``suexec`` feature." msgstr "" "外部のファイルを読み書きする際には、CGI スクリプトを動作させるときに使われる " "userid でファイルを読み書きできるようになっているか確認しましょう: userid は" "通常、Web サーバを動作させている userid か、Web サーバの ``suexec`` 機能で明" "示的に指定している userid になります。" #: ../../library/cgi.rst:519 msgid "" "Don't try to give a CGI script a set-uid mode. This doesn't work on most " "systems, and is a security liability as well." msgstr "" "CGI スクリプトを set-uid モードにしてはいけません。これはほとんどのシステムで" "動作せず、セキュリティ上の信頼性もありません。" #: ../../library/cgi.rst:523 msgid "Footnotes" msgstr "脚注" #: ../../library/cgi.rst:524 msgid "" "Note that some recent versions of the HTML specification do state what order " "the field values should be supplied in, but knowing whether a request was " "received from a conforming browser, or even from a browser at all, is " "tedious and error-prone." msgstr "" "最近のバージョンの HTML 仕様ではフィールドの値を供給する順番を取り決めてはい" "ますが、ある HTTP リクエストがその取り決めに準拠したブラウザから受信したもの" "かどうか、そもそもブラウザから送信されたものかどうかの判別は退屈で間違いやす" "いので注意してください。"