hirokawa Sat Feb 3 17:05:23 2001 EDT Modified files: /phpdoc/ja/chapters security.xml /phpdoc/ja/features file-upload.xml persistent-connections.xml /phpdoc/ja/functions array.xml calendar.xml datetime.xml image.xml pcre.xml session.xml strings.xml yaz.xml /phpdoc/ja/language operators.xml Log: update translation.
Index: phpdoc/ja/chapters/security.xml diff -u phpdoc/ja/chapters/security.xml:1.10 phpdoc/ja/chapters/security.xml:1.11 --- phpdoc/ja/chapters/security.xml:1.10 Tue Jan 16 06:46:06 2001 +++ phpdoc/ja/chapters/security.xml Sat Feb 3 17:05:21 2001 @@ -81,16 +81,16 @@ role="uri">/secret/doc.html</filename> は、 <acronym>CGI</acronym> プログラムによりオープンされて実行される ファイルの名前を指定するために従来より使用されています。 - <filename role="url">http://my.host/secret/script.php3</filename> + <filename role="url">http://my.host/secret/script.php</filename> のようなドキュメントへの要求を PHP インタプリタにリダイレクト するために、通常、何らかの Web サーバー設定用命令(Apache では Action) が使用されます。この設定により、Web サーバーは、まずディレクトリ <filename role="uri">/secret</filename> へのアクセス権をチェックし、 リダイレクト要求 <filename - role="url">http://my.host/cgi-bin/php/secret/script.php3</filename> + role="url">http://my.host/cgi-bin/php/secret/script.php</filename> を生成します。残念なことに、リクエストが最初からこの形式で与え られた場合、Web サーバーによるアクセスチェックは、 - <filename role="uri">/secret/script.php3</filename> ファイル + <filename role="uri">/secret/script.php</filename> ファイル ではなく、<filename role="uri">/cgi-bin/php</filename> ファイル に対して行われます。この手法により、<filename role="uri">/cgi-bin/php</filename> にアクセス可能なユーザーは、 @@ -123,9 +123,9 @@ --enable-force-cgi-redirect</link>を configure スクリプトに指定することができます。この場合でも、直接 的な方法 <filename - role="php">http://my.host/cgi-bin/php/dir/script.php3</filename> + role="php">http://my.host/cgi-bin/php/dir/script.php</filename> でもなくリダイレクション <filename - role="php">http://my.host/dir/script.php3</filename>でもない他の + role="php">http://my.host/dir/script.php</filename>でもない他の やり方で PHP スクリプトを呼び出せるようになっていないかどうか確認 する必要があります。 </simpara> @@ -139,7 +139,7 @@ <title>ケース 2: --enable-force-cgi-redirect を使用</title> <simpara> このコンパイル時のオプションは、 - <filename role="php">http://my.host/cgi-bin/php/secretdir/script.php3 + <filename role="php">http://my.host/cgi-bin/php/secretdir/script.php </filename> のように URL から直接 PHP を呼び出すことを禁止します。 代わりに、 Web サーバーのリダイレクションにより処理された場合は、 @@ -149,8 +149,8 @@ 通常、Apache 用設定でのリダイレクションは、 次の命令を使用して行います。</simpara> <programlisting role="apache-conf"> -Action php3-script /cgi-bin/php -AddHandler php3-script .php3 +Action php-script /cgi-bin/php +AddHandler php-script .php </programlisting> <simpara> このオプションは、Apache Web サーバーでのみテストされており、リク @@ -202,9 +202,9 @@ user_dir</link> です。user_dir が設定されていない場合、 開かれるファイル名を制御するのは、<parameter>doc_root</parameter> のみです。 - <filename role="url">http://my.host/~user/doc.php3</filename> のような + <filename role="url">http://my.host/~user/doc.php</filename> のような URL は、ユーザーホームディレクトリ以下のファイルを開かず、 - doc_root 以下の <filename role="uri">~user/doc.php3</filename> + doc_root 以下の <filename role="uri">~user/doc.php</filename> というファイルを開くことになります。 (ディレクトリ名がチルダ [<literal>~</literal>] で始まっている ということになります) @@ -212,14 +212,14 @@ <simpara> user_dir が例えば、<filename role="dir">public_php</filename>に 設定されていた場合、 - <filename role="url">http://my.host/~user/doc.php3</filename> の + <filename role="url">http://my.host/~user/doc.php</filename> の ようなリクエストは、そのユーザー user のホームディレクトリにある <filename role="dir">public_php</filename> 以下の - <filename>doc.php3</filename> という名前のファイルをオープンしま + <filename>doc.php</filename> という名前のファイルをオープンしま す。ユーザーのホームディレクトリが、 <filename role="dir">/home/user</filename> である場合、 実行されるファイルは、 - <filename>/home/user/public_php/doc.php3</filename> + <filename>/home/user/public_php/doc.php</filename> となります。 </simpara> <simpara> @@ -259,21 +259,6 @@ </sect1> - <sect1 id="security.current"> - <title>最新版を維持する</title> - <simpara> - PHPは、他の大規模なシステムと同様に、常に調査、改良されています。 - 各新バージョンにはしばしばセキュリティ上の問題や設定上の問題、そし - て、システム全体のセキュリティや安定性に影響するその他の問題を修正 - するためのメジャーまたはマイナーな変更が含まれています。 - </simpara> - <simpara> - 他のシステムレベルのスクリプト言語やプログラムと同様に、最善のアプ - ローチは、頻繁に更新し、最新のバージョンとその変更を注視し続けるこ - とです。 - </simpara> - </sect1> - <sect1 id="security.apache"> <title>Apache モジュールとしてインストール</title> <simpara> @@ -408,7 +393,7 @@ <title>より安全なファイル名の確認</title> <programlisting role="php"> <?php -$username = get_env("REMOTE_USER"); +$username = getenv("REMOTE_USER"); $homedir = "/home/$username"; if (!ereg('^[^./][^/]*$', $userfile)) @@ -587,6 +572,21 @@ 小によらず、単にオンラインであり、接続できるサーバを有しているだけ で攻撃目標となりえます。多くのクラック用プログラムはサイトの大きさ を考慮せず、犠牲者を探しつつ大きなIPブロックで網を張っています。 + </simpara> + </sect1> + + <sect1 id="security.current"> + <title>最新版を維持する</title> + <simpara> + +PHPは、他の大規模なシステムと同様に、常に調査、改良されています。 + +各新バージョンにはしばしばセキュリティ上の問題や設定上の問題、そし + +て、システム全体のセキュリティや安定性に影響するその他の問題を修正 + +するためのメジャーまたはマイナーな変更が含まれています。 + </simpara> + <simpara> + +他のシステムレベルのスクリプト言語やプログラムと同様に、最善のアプ + +ローチは、頻繁に更新し、最新のバージョンとその変更を注視し続けるこ + とです。 </simpara> </sect1> Index: phpdoc/ja/features/file-upload.xml diff -u phpdoc/ja/features/file-upload.xml:1.11 phpdoc/ja/features/file-upload.xml:1.12 --- phpdoc/ja/features/file-upload.xml:1.11 Sat Jan 20 06:21:35 2001 +++ phpdoc/ja/features/file-upload.xml Sat Feb 3 17:05:21 2001 @@ -156,7 +156,7 @@ 参照下さい。 </para> <programlisting role="php"> -<?php +<?php if (is_uploaded_file($userfile)) { copy($userfile, "/place/to/put/uploaded/file"); } else { @@ -164,7 +164,7 @@ } /* ...もしくは... */ move_uploaded_file($userfile, "/place/to/put/uploaded/file"); -?> +?> </programlisting> <para> これ以前のバージョンのPHPでは、次のような処理を行う必要がありま @@ -178,7 +178,7 @@ </note> </para> <programlisting role="php"> -<?php +<?php /* アップロードされたファイルを確認 */ function is_uploaded_file($filename) { if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { Index: phpdoc/ja/features/persistent-connections.xml diff -u phpdoc/ja/features/persistent-connections.xml:1.2 phpdoc/ja/features/persistent-connections.xml:1.3 --- phpdoc/ja/features/persistent-connections.xml:1.2 Sat Aug 26 18:43:06 2000 +++ phpdoc/ja/features/persistent-connections.xml Sat Feb 3 17:05:21 2001 @@ -51,14 +51,12 @@ </simpara> <simpara> 最後のは、PHPをマルチスレッドWebサーバーのプラグインとして使用する - 方法です。現在、この方法は理論的なものにとどまっています。PHPは、ま - だマルチスレッド型Webサーバーでプラグインとして動作しません。 - (Windows上で) ISAPI、WSAPI、NSAPI をサポートする作業が進行中です。 - これにより、PHPを Netscape FastTrack、Microsoft の Internet - Information Server (IIS)、O'Reilly の WebSite Pro のようなマルチス - レッド型サーバーのプラグインとして使用することが可能となります。 - これが実現した場合、動作は先に記したマルチプロセスモデルと同じにな - るでしょう。 + 方法です。現在、PHP 4 は、ISAPI, WSAPI, NSAPI を(Windows上で)サポー + トしており、Netscape FastTrack、Microsoftの Internet Information + Server (IIS)、O'Reillyの WebSite Proのようなマルチスレッド型サーバ + +のプラグインとしてPHPを使用することが可能です。この場合の動作は前記 + のマルチプロセス型モデルと同様です。SAPIはPHP +3では使用できないこと + に注意して下さい。 </simpara> <simpara> 持続的接続が機能を全く付加しないとしたら、優れている点はなんでしょ Index: phpdoc/ja/functions/array.xml diff -u phpdoc/ja/functions/array.xml:1.17 phpdoc/ja/functions/array.xml:1.18 --- phpdoc/ja/functions/array.xml:1.17 Thu Jan 4 22:29:04 2001 +++ phpdoc/ja/functions/array.xml Sat Feb 3 17:05:22 2001 @@ -1570,7 +1570,7 @@ <title>説明</title> <funcsynopsis> <funcprototype> - <funcdef>void <function>extract</function></funcdef> + <funcdef>int <function>extract</function></funcdef> <paramdef>array <parameter>var_array</parameter></paramdef> <paramdef>int <parameter> @@ -1592,10 +1592,17 @@ <parameter>prefix</parameter>パラメータに基づき現在のシンボルテー ブルに変数を一つ作成します。 </para> + <note> + <para> + +バージョン4.0.5以降、この関数は展開された変数の数を返します。 + </para> + </note> <para> - <function>extract</function>は存在する変数との衝突を確認します。 - 衝突時の対処法は、<parameter>extract_type</parameter>で定義されます。 - これは以下の値のどれかとなります。 + +<function>extract</function>は、各キーについて変数名として有効で + +あるかどうか、そして、シンボルテーブルの既存の変数と衝突しないか + +どうかを確認します。無効または数値キーおよび衝突に関する対処法は、 + <parameter>extract_type</parameter>で定義されます。これは以下の値 + のどれかとなります。 <variablelist> <varlistentry> <term>EXTR_OVERWRITE</term> @@ -1626,10 +1633,21 @@ <term>EXTR_PREFIX_ALL</term> <listitem> <simpara> - 全ての変数の前に<parameter>prefix</parameter>を付けます。 + 全ての変数の前に<parameter>prefix</parameter>を付けます。PHP + 4.0.5以降、接頭辞を数値とすることも可能です。 </simpara> </listitem> </varlistentry> + <varlistentry> + <term>EXTR_PREFIX_INVALID</term> + <listitem> + <simpara> + 無効または数値の変数名のみに接頭辞 + <parameter>prefix</parameter> を付ける。このフラグは、PHP + 4.0.5 で追加されました。 + </simpara> + </listitem> + </varlistentry> </variablelist> </para> <para> @@ -1637,9 +1655,11 @@ が仮定されます。 </para> <para> - <parameter>prefix</parameter>は、<parameter>extract_type</parameter>が - EXTR_PREFIX_SAMEまたはEXTR_PREFIX_ALL の場合にのみ必要であること - に注意して下さい。 + <parameter>prefix</parameter>は、 + <parameter>extract_type</parameter>がEXTR_PREFIX_SAME、 + EXTR_PREFIX_ALL、EXTR_PREFIX_INVALID の場合にのみ必要であることに + +注意して下さい。接頭辞を付けた変数名が有効な変数名でない場合、こ + の変数はシンボルテーブルにインポートされません。 </para> <para> <function>extract</function>は、各キーが有効な変数名からなるかど Index: phpdoc/ja/functions/calendar.xml diff -u phpdoc/ja/functions/calendar.xml:1.7 phpdoc/ja/functions/calendar.xml:1.8 --- phpdoc/ja/functions/calendar.xml:1.7 Thu Jan 4 22:29:04 2001 +++ phpdoc/ja/functions/calendar.xml Sat Feb 3 17:05:22 2001 @@ -425,7 +425,7 @@ 計算するために<function>easter_date</function>の代わりにしようすることが できます。 <example> - <title><function>easter_date</function>の例</title> + <title><function>easter_days</function>の例</title> <programlisting role="php"> echo easter_days (1999); /* 14, すなわち 4月4日 */ echo easter_days (1492); /* 32, すなわち 4月22日 */ @@ -483,7 +483,7 @@ </para> <note> <para> - この関数は、PHP4RC1以降のバージョンのPHPでのみ利用可能です。 + この関数は、PHP +4RC1以降のバージョンのPHPでのみ利用可能です。 </para> </note> </refsect1> @@ -514,7 +514,7 @@ </para> <note> <para> - この関数は、PHP4RC1以降のバージョンのPHPで利用可能です。 + この関数は、PHP 4RC1以降のバージョンのPHPで利用可能です。 </para> </note> </refsect1> Index: phpdoc/ja/functions/datetime.xml diff -u phpdoc/ja/functions/datetime.xml:1.17 phpdoc/ja/functions/datetime.xml:1.18 --- phpdoc/ja/functions/datetime.xml:1.17 Sat Jan 13 07:05:07 2001 +++ phpdoc/ja/functions/datetime.xml Sat Feb 3 17:05:22 2001 @@ -881,6 +881,14 @@ </simpara> </listitem> </itemizedlist> + <note> + <para> + +(上記の)全ての変換指定子が使用するCライブラリでサポートされてい + ない可能性があります。この場合、PHPの + +<function>strftime</function>で該当する変換指定子はサポートされ + ません。 + </para> + </note> <example> <title><function>strftime</function>の例</title> <programlisting role="php"> Index: phpdoc/ja/functions/image.xml diff -u phpdoc/ja/functions/image.xml:1.20 phpdoc/ja/functions/image.xml:1.21 --- phpdoc/ja/functions/image.xml:1.20 Sun Jan 7 17:39:30 2001 +++ phpdoc/ja/functions/image.xml Sat Feb 3 17:05:22 2001 @@ -67,15 +67,22 @@ 3番目の要素はIMGタグで直接利用できる文字列 "height=xxx width=xxx" です。 <example> - <title>GetImageSize</title> + <title>GetImageSize (ファイル)</title> <programlisting role="php"> <?php $size = GetImageSize ("img/flag.jpg"); ?> <IMG SRC="img/flag.jpg" <?php echo $size[3]; ?> </programlisting> </example> </para> - <para> + <example> + <title>GetImageSize (URL)</title> + <programlisting role="php"> +<?php $size = GetImageSize ("http://www.php.net/gifs/logo.gif"); ?> + </programlisting> + </example> + </para> + <para> オプションの <parameter>imageinfo</parameter> パラメータにより 画像ファイルから何らかの拡張情報を引き出すことが可能です。 現在、この変数には<acronym>JPG</acronym>ファイルについて @@ -100,6 +107,11 @@ <note> <simpara> この関数は、GD画像ライブラリを必要としません。 + </simpara> + </note> + <note> + <simpara> + URL のサポートは PHP 4.0.5 で追加されました。 </simpara> </note> </para> Index: phpdoc/ja/functions/pcre.xml diff -u phpdoc/ja/functions/pcre.xml:1.14 phpdoc/ja/functions/pcre.xml:1.15 --- phpdoc/ja/functions/pcre.xml:1.14 Thu Jan 4 22:29:04 2001 +++ phpdoc/ja/functions/pcre.xml Sat Feb 3 17:05:22 2001 @@ -4,11 +4,13 @@ <partintro> <para> - この関数で使用されるパターンに関する構文は、Perl に非常によく似ています。 - 表現は、デリミタ、例えばスラッシュ (/) で囲まれる必要があります。 - 英数字またはバックスラッシュ(\)以外の全ての文字をデリミタとして - 使用可能です。デリミタ文字を正規表現本体において使用する必要がある場合は、 - バックスラッシュでエスケープする必要があります。 + この関数で使用されるパターンに関する構文は、Perl +に非常によく似て + います。式は、デリミタ、例えばスラッシュ (/) +で囲まれる必要があり + +ます。英数字またはバックスラッシュ(\)以外の全ての文字をデリミタと + +して使用可能です。デリミタ文字を正規表現本体において使用する必要が + +ある場合は、バックスラッシュでエスケープする必要があります。PHP + 4.0.4以降、パターン指定用に Perl形式の (), {}, [], <> も + 使用可能です。 </para> <para> マッチングに影響を与える様々な修正子を終端デリミタの後に付ける @@ -20,9 +22,10 @@ <example> <title>有効なパターンの例</title> <itemizedlist> - <listitem><simpara>/<\/\w+>/</simpara></listitem> + <listitem><simpara>/<\/\w+>/</simpara></listitem> <listitem><simpara>|(\d{3})-\d+|Sm</simpara></listitem> <listitem><simpara>/^(?i)php[34]/</simpara></listitem> + <listitem><simpara>{^\s+(\s+)?$}</simpara></listitem> </itemizedlist> </example> </para> @@ -50,7 +53,7 @@ </para> <note> <simpara> - Perl互換の正規表現関数は、PHP4およびPHP3.0.9以降で利用可能です。 + Perl互換の正規表現関数は、PHP 4およびPHP +3.0.9以降で利用可能です。 </simpara> </note> </partintro> @@ -108,24 +111,27 @@ // "web"にのみマッチし、"webbing" または "cobweb"のような単語の一 // 部にはマッチしません if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of choice.")) { - print "A match was found."; + print "マッチするものが一つみつかりました。"; } else { - print "A match was not found."; + print "マッチするものはみつかりませんでした。"; } if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) { - print "A match was found."; + print "マッチするものが一つみつかりました。"; } else { - print "A match was not found."; + print "マッチするものはみつかりませんでした。"; } </programlisting> </example> <example> <title>URLからドメイン名を得る</title> <programlisting role="php"> -preg_match("/^(.*)([^\.]+\.[^\.]+)(\/.*)?/U", - "http://www.php.net/index.html", $matches); -// 2番目の括弧内のパターンを表示 -echo "domain name is: ".$matches[2]."\n"; +// URLからホスト名を得る +preg_match("/^(http:\/\/)?([^\/]+)/i", +"http://www.php.net/index.html", $matches); +$host = $matches[2]; +// ホスト名の最後の二つを得る +preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches); +echo "ドメイン名: ".$matches[0]."\n"; </programlisting> </example> この例の出力は以下となります。 @@ -255,9 +261,8 @@ <example> <title>HTMLタグにマッチするものを見付ける(greedy)</title> <programlisting role="php"> -// the \\2 is an example of backreferencing. This tells pcre that -// it must match the 2nd set of parenthesis in the regular expression -// itself, which would be the ([\w]+) in this case. +// \\2 は後方参照の例です。これは、pcre +に正規表現自体の括弧の2番目の +// 組、つまりこの場合は([\w]+)、にマッチします。 $html = "<b>bold text<b>lt;a href=howdy.html>click me<a> preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", @@ -316,7 +321,8 @@ <parameter>subject</parameter>に関して <parameter>pattern</parameter>を用いて検索を行い、 <parameter>replacement</parameter>に置換します。 - <parameter>limit</parameter>を指定した場合、<parameter>limit</parameter> + <parameter>limit</parameter>を指定した場合、 + <parameter>limit</parameter> 回のマッチまで置換が行なわれます。<parameter>limit</parameter>が 省略されるか -1 の場合、マッチするものは全て置換されます。 </para> @@ -363,16 +369,18 @@ <function>preg_replace</function>が <parameter>replacement</parameter>パラメータを適当な置換を 行った後、PHP コードとして処理するようにします。 - 注意: + ヒント: <parameter>replacement</parameter> が有効なPHPコード文字列から 構成されるようにしてください。そうでない場合、 - <function>preg_replace</function> のある行で - PHP は構文エラーを発生します。 - <note> - <para> - この修正子は PHP 4.0 で追加されました。 - </para> - </note> + <function>preg_replace</function> のある行でPHP は構文エラーを発 + 生します。 + </para> + <para> + <literal>/F</literal> 修正子は、<parameter>replacement</parameter> + +を関数名としてとることを意味します。この関数には、subject文字列の + +マッチした要素の配列が渡された状態でコールされます。この関数は、 + 置換文字列を返す必要があります。この修正子は PHP +4.0.4で追加され + ました。 </para> <para> <example> @@ -559,7 +567,7 @@ </para> <para> <example> - <title>例:</title> + <title><function>preg_quote</function>の例</title> <programlisting role="php"> $keywords="$40 for a g3/400"; $keywords = preg_quote ($keywords, "/"); @@ -570,9 +578,8 @@ <title>テキストの中の単語を置換する</title> <programlisting role="php"> -// In this example, preg_quote($word) is used to keep the -// asterisks from having special meaning to the regular -// expression. +// この例では、preg_quote($word) +が正規表現の特殊文字であるアスタリス +// クを保持するために使用されています。 $textbody = "This book is *very* hard to find."; $word = "*very*"; @@ -607,11 +614,18 @@ <parameter>input</parameter>配列の要素からなる配列を返します。 </para> <para> + PHP 4.0.4以降、<function>preg_grep</function>により返された結果は、 + +入力配列のキーを使用して添字が設定されます。この動作が好ましくな + い場合、値の添字を再設定するために<function>preg_grep</function> + により返された配列に<function>array_values</function>を適用して下 + さい。 + </para> + + <para> <example> <title><function>preg_grep</function>の例</title> <programlisting role="php"> -// return all array elements -// containing floating point numbers +// 浮動小数点数を含む全ての配列要素を返す $fl_array = preg_grep ("/^(\d+)?\.\d+$/", $array); </programlisting> </example> @@ -702,7 +716,8 @@ この修正子が設定されている場合、<function>preg_replace</function> は、置換文字列において後方参照に関する通常の置換を行った後、 PHP コードとして評価し、検索文字列を置換するためにその結果を - 使用します。 + 使用します。この修正子は、<literal>/F</literal> +修正子と共に + 使用することはできません。 </simpara> <simpara> この修正子を使用するのは、<function>preg_replace</function>のみです。 @@ -711,6 +726,24 @@ </listitem> </varlistentry> <varlistentry> + <term><emphasis>F</emphasis></term> + <listitem> + <simpara> + この修正子が設定された場合、 + <function>preg_replace</function>は、置換文字列を与えるため + +にコールされる関数名としてreplacementパラメータを処理します。 + +関数は、subject文字列中のマッチする要素に渡されます。この修 + +正子は、<literal>/e</literal>修正子と共に使用することはでき + ません。 + </simpara> + <simpara> + <function>preg_replace</function> のみがこの修正子を使用しま + す。他の PCRE関数では無視されます。この修正子はPHP +4.0.4で追 + 加されました。 + </simpara> + </listitem> + </varlistentry> + <varlistentry> <term><emphasis>A</emphasis> (PCRE_ANCHORED)</term> <listitem> <simpara> @@ -1119,7 +1152,8 @@ 文字クラスの外側では、パターンの中のドットは非出力文字を含む (デフォルトでは)改行以外の対象の全ての1文字にマッチします。 PCRE_DOTALL オプションを設定した場合、ドットは改行にもマッチ - します。ドャÈの処理は、ハット記号およびドル記号とは完全お 独立し?Dます。共通な点は共に改行文字を含むことだけです。 + +します。ドットの処理は、ハット記号およびドル記号とは完全に独立し + ています。共通な点は共に改行文字を含むことだけです。 ドットは、文字クラスの中では特別な意味を持ちません。 ブラケット @@ -1576,13 +1610,31 @@ (?<=\d{3})(?<!999)foo は前に "999" でない3桁の数字がある "foo" にマッチします。 - 更に、言明は、自由に組み合わせてネストさせることが可能です。 - 例えば、 + +各言明は対象文字列の同じ場所に独立して適用されることに注意して下 + +さい。まず、前の3文字が全て数字であることがチェックされ、続いて、 + +同じ3文字が"999"でないことが確認されます。このパターンは、"foo"の + +前に6個の文字があり、その猜疑ょが数字で最後の3文字が"999"でないパ + +ターンにはマッチしません。例えば、"123abcfoo"にはマッチしません。 + これを行うパターンは次のようになります。 + + (?<=\d{3}...)(?<!999)foo + + +この時、最初の言明は、先行する6つの文字を探し、最初の3文字が数字 + +であることを確認します。続いて、2番目の言明は、先行する3文字が + "999"でないことを確認します。 + +言明は、自由に組み合わせてネストさせることが可能です。例えば、 + (?<=(?<!foo)bar)baz は、"bar" が前にあり、逆に "foo" が前にない "baz" にマッチします。 + 一方、 + + (?<=\d{3}(?!999)...)foo + +は、3桁の数が先行し、中の3文字が"999"でない"foo"にマッチする別の + パターンです。 + 言明のサブパターンは値を取得するサブパターンではなく、繰り 返されないかもしれません。それは、同じことを複数回言明するの は意味がないからです。ある言明が値を取得するサブパターンを @@ -1658,15 +1710,43 @@ 合、最後の文字以外の全てのものにマッチするよう再度マッチを 行い、続いて最後の2文字以外という風に動作します。 "a" の検索を文字列全体に対して左から右に再度行うため、 - 効率は良くありません。しかし、パターンを次のよ?k書いた場合、 + +効率は良くありません。しかし、パターンを次のように書いた場合、 - ^(?>.*)(?<=abcd) + ^(?>.*)(?<=abcd) この場合は、.* に関する再検索は行われず、文字列全体にのみマッ チします。続く後方言明は、最後の4文字に対する試行を1回だけ行 います。これが失敗した場合、マッチはただちに失敗します。長い 文字列の場合、この方法による実行時間にはかなりの差が生じます。 + +パターンの無制限の繰り返しをサブパターン内に有しており、そのサブ + +パターン自体の無制限の反復が可能な場合、一度限りのサブパターンの + +使用がマッチに非常に長い時間かかり失敗することを回避するための唯 + 一の手段です。 + パターン + + (\D+|<\d+>)*[!?] + + +は、無制限の数の副文字列にマッチします。その副文字列は非数値から + なるか<>で括られた数値のどちらかで、後に ! または ? +が続くもので + +す。マッチした場合、実行は高速です。しかし、以下の文字列に適用し + た場合、 + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + + +エラーを出力するまでに長い時間を要します。これは、二つの反復に文 + +字列を分割する選択肢が多く、全て試みる必要があるためです。(この例 + +では、終端に単一の文字ではなく[!?]を使用しています。これは、PCRE + +とPerlは共に単一の文字を使用した場合により早く失敗と判定するよう + +に最適化するためです。マッチに必要な最後の一文字をこれらは記憶し + +ており、文字列にこれがない場合に早期に失敗と判定します。) + このパターンを次のように変更した場合、 + + ((?>\D+)|<\d+>)*[!?] + + +数字以外の並びにより不備を生じることがなくなり、失敗は早期に生じ + ます。 + 条件付きサブパターン 言明の結果または前の値を取得するサブパターンがマッチしたかど うかにより、サブパターンのマッチ処理を行ったり、サブパターンの @@ -1693,7 +1773,7 @@ 最初の部分は、オプションの左括弧にマッチし、その文字がある場 合に、最初の部分文字列として設定します。第2の部分は、括弧以外 の一つ以上の文字にマッチします。第3の部分は、最初の括弧にマッ - チしたかどうKを調べる条件ۘサブパターンです。マッチしている + +チしたかどうかを調べる条件付きサブパターンです。マッチしている 場合、つまり、対象が左括弧で始まっている場合、条件はtrueと なり、yes-pattern が実行され、右括弧が必要となります。 そうでない場合、no-pattern が存在しないため、サブパターンは @@ -1706,12 +1786,12 @@ 目に置いています。 (?(?=[^a-z]*[a-z]) - \d{2}[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) + \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) 条件は、肯定後方言明であり、英字以外の文字の並びかその後に 英字が続くものにマッチします。言いかえると、対象文字列に少な くとも文字が一つあるかどうかを調べます。文字がみつかると、 - 検索対象は最初の選択肢に対してマッチします〣]うgない場合 + +検索対象は最初の選択肢に対してマッチします。みつからない場合 は、2番目にマッチします。このパターンは、2つの形式 dd-aaa-dd または dd-dd-dd のどちらかの文字列にマッチします。ただし、 aaa は英字、dd は数字です。 @@ -1725,6 +1805,55 @@ にあるエスケープされていない # 文字は、コメントを指定します。 コメントは、パターン中の次の改行文字まで続きます。 +再帰的パターン + +無制限のネストを許容する括弧を含む文字列にマッチを行う問題を考え + +てみましょう。再帰を使用しない場合、実現可能な最良の方法は、何ら + +かの固定した深さのネストまでマッチを行うパターンを使用することで + +す。これでは、任意の深さのネストを処理することはできません。Perl + +5.6では、(他の機能と共に)正規表現で再帰を行うことを可能にする実験 + 的な機能がサポートされています。専用のシーケンス +(?R)が再帰を指定 + +するためにサポートされています。このPCREパターンによりこの括弧の + +問題は次のように解決されます。(空白を無視するためにPCRE_EXTENDED + オプションが設定されていると仮定します) + + \( ( (?>[^()]+) | (?R) )* \) + + +まず、このパターンは開き括弧にマッチします。続いて、括弧以外の並 + +びまたはパターン自体に再帰的にマッチする部分文字列に何回でもマッ + チします。最後に閉じ括弧にマッチします。 + + +このパターン例には、ネストした無制限の反復が含まれており、このた + +め、マッチしない文字列のパターンを適用する際に括弧以外の文字列に + +一回だけマッチするサブパターンを使用することが重要です。例えば、 + このパターンを次の文字列に適用した場合、 + + (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() + + +"マッチしない"という判定が速やかに行われます。しかし、一回限りの + サブパターンを使用しない場合、対象文字列を分割可能な + +と * の反 + +復の種類が非常に多く、失敗を出力する前に全てを確認する必要がある + ため、マッチに非常に時間がかかります。 + + +値を取得するサブパターンに設定される値は、サブパターンの値が設定 + +される最も外側の再帰のレベルからのものです。上記のパターンを以下 + にマッチさせる場合、 + + (ab(cd)ef) + + +値を取得する括弧の値は"ef"であり、最上位レベルの最後の値です。 + 次のように括弧を追加すると、 + + \( ( ( (?>[^()]+) | (?R) )* ) \) + ^ ^ + ^ ^ 取得される文字列は、"ab(cd)ef" と + +なり、最上位レベルの括弧の中身となります。一つのパターン内に + +15以上の取得用括弧がある場合、PCREは再帰の間のデータ保存用に + +追加のメモリを取得する必要があります。これは、pcre_malloc に + より確保され、後で pcre_free +により開放されます。メモリが取 + +得できない場合、メモリ不足エラーを再帰の内側から出力する手段 + +はないため、最初の15個の取得用括弧についてのみデータが保存さ + れます。 + 性能 パターンの幾つかの要素は、他の要素よりもより効率的です。 (a|e|i|o|u) のような選択肢の集合よりも [aeiou] のような文字ク @@ -1755,6 +1884,36 @@ にパターンを ^.* で開始することにより最高の性能が得られます。 これにより、PCRE が対象文字列の改行を探し、そこで再スタート することを防止します。 + + +ネストした未確定の反復を有するパターンには注意を要します。 + +このパターンをマッチしない文字列に適用した場合には、実行に長い時 + 間を要します。次のパターンを考えてみましょう。 + + (a+)* + + +これは、33通りの異なった方法で、"aaaa"にマッチします。この数は、 + 文字列が長くなるにつれて急激に増大します。(* +反復は、0、1、2、3、 + +4回マッチし、0以外の各々のケースで、+反復は異なった回数分マッチし + ます) +パターンの残りにマッチ全体が失敗するようなパターンである場 + +合、PCREは基本的に全ての可能性がある選択肢を調べるため、非常に長 + い時間がかかります。 + + +次のように文字リテラルが後にあるようなより簡単な場合には最適化が + 可能です。 + + (a+)*b + + +標準のマッチ手順に着手する前に、PCREは対象文字列の後の方に"b"があ + +るかどうかを調べます。これがない場合には、直ちにマッチは失敗しま + +す。しかし、リテラルが後にない場合には、この最適化を使用すること + +はできません。以下のパターンと上のパターンの動作の差異を比較して + みましょう。 + + (a+)*\d + + 前者は、全体が "a" +文字である行に適用された場合にほぼ瞬間的に失敗 + +と判定します。一方、後者では、およそ20文字より長い文字列ではかな + りの時間がかかります。 </literallayout> </refsect1> </refentry> Index: phpdoc/ja/functions/session.xml diff -u phpdoc/ja/functions/session.xml:1.19 phpdoc/ja/functions/session.xml:1.20 --- phpdoc/ja/functions/session.xml:1.19 Thu Jan 4 22:29:05 2001 +++ phpdoc/ja/functions/session.xml Sat Feb 3 17:05:22 2001 @@ -791,6 +791,14 @@ <parameter>user</parameter>を設定する必要があります。 </para> </note> + <note> + <para> + "write" +ハンドラは、出力ストリームがクローズされるまでは実行され + +ません。つまり、"write"ハンドラにおけるデバッグ用出力はブラウザ + +側では見ることができません。デバッグ用の出力が必要な場合は、代わ + +りにデバッグ出力をファイルに書き込むことを推奨します。 + </para> + </note> <para> 以下の例では、デフォルトの保存<parameter>files</parameter>に似た ファイルベースのセッション保存を行います。この例は、PHPがサポート Index: phpdoc/ja/functions/strings.xml diff -u phpdoc/ja/functions/strings.xml:1.25 phpdoc/ja/functions/strings.xml:1.26 --- phpdoc/ja/functions/strings.xml:1.25 Thu Jan 4 22:29:05 2001 +++ phpdoc/ja/functions/strings.xml Sat Feb 3 17:05:22 2001 @@ -54,7 +54,6 @@ <para> <function>stripcslashes</function>, <function>stripslashes</function>, - <function>htmlspecialchars</function>, <function>htmlspecialchars</function>, <function>quotemeta</function> も参照下さい。 </para> @@ -1068,6 +1067,220 @@ </refsect1> </refentry> + <refentry id="function.localeconv"> + <refnamediv> + <refname>localeconv</refname> + <refpurpose>数値に関するフォーマット情報を得る</refpurpose> + </refnamediv> + <refsect1> + <title>説明</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>localeconv</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <para> + +ローカルな数値および通貨フォーマット情報を有する連想配列を返します。 + </para> + <para> + <function>localeconv</function> は、 + <function>setlocale</function> +で設定されたカレントのロケールに基 + +づきデータを返します。返される連想配列は、次のフィールドを有しま + す。 + <informaltable > + <tgroup cols="2"> + <thead> + <row> + <entry>配列要素</entry> + <entry>説明</entry> + </row> + </thead> + <tbody> + <row> + <entry>decimal_point</entry> + <entry>小数点文字</entry> + </row> + <row> + <entry>thousands_sep</entry> + <entry>千毎の区切り文字</entry> + </row> + <row> + <entry>grouping</entry> + <entry>数値集合を有する配列</entry> + </row> + <row> + <entry>int_curr_symbol</entry> + <entry>国際通貨記号 (すなわち、USD)</entry> + </row> + <row> + <entry>currency_symbol</entry> + <entry>ローカルな通貨記号 (すなわち、$)</entry> + </row> + <row> + <entry>mon_decimal_point</entry> + <entry>通貨用の小数点文字</entry> + </row> + <row> + <entry>mon_thousands_sep</entry> + <entry>通貨用の千毎の区切り文字</entry> + </row> + <row> + <entry>mon_grouping</entry> + <entry>通貨集合を有する配列</entry> + </row> + <row> + <entry>positive_sign</entry> + <entry>正の値を表す記号</entry> + </row> + <row> + <entry>negative_sign</entry> + <entry>負の値を表す記号</entry> + </row> + <row> + <entry>int_frac_digits</entry> + <entry>国際分割桁</entry> + </row> + <row> + <entry>frac_digits</entry> + <entry>ローカルな分割桁</entry> + </row> + <row> + <entry>p_cs_precedes</entry> + <entry> + currency_symbol +が正の値を前に置く場合にtrue、後に置く場合に + false + </entry> + </row> + <row> + <entry>p_sep_by_space</entry> + <entry> + 正の値から currency_symbol +を1文字の空白で区切る場合にtrue、 + そうでない場合にfalse + </entry> + </row> + <row> + <entry>n_cs_precedes</entry> + <entry> + currency_symbol +が負の値を前に置く場合にtrue、後に置く場合に + false + </entry> + </row> + <row> + <entry>n_sep_by_space</entry> + <entry> + 負の値から currency_symbol +を1文字の空白で区切る場合にtrue、 + そうでない場合にfalse + </entry> + </row> + <row valign="top"> + <entry>p_sign_posn</entry> + <entry> + <simplelist columns="2" type="horiz"> + <member>0</member> + <member> + 量および通貨記号を括る括弧 + </member> + <member>1</member> + <member> + 量および通貨記号の前に置く符号文字列 + </member> + <member>2</member> + <member> + 量および通貨記号の後に置く符号文字列 + </member> + <member>3</member> + <member> + 通貨記号の直前に置く符号文字列 + </member> + <member>4</member> + <member> + 通貨記号の直後に置く符号文字列 + </member> + </simplelist> + </entry> + </row> + <row valign="top"> + <entry>n_sign_posn</entry> + <entry> + <simplelist columns="2" type="horiz"> + <member>0</member> + <member> + 量および通貨記号を括る括弧 + </member> + <member>1</member> + <member> + 量および通貨記号の前に置く符号文字列 + </member> + <member>2</member> + <member> + 量および通貨記号の後に置く符号文字列 + </member> + <member>3</member> + <member> + 通貨記号の直前に置く符号文字列 + </member> + <member>4</member> + <member> + 通貨記号の直後に置く符号文字列 + </member> + </simplelist> + </entry> + </row> + </tbody> + </tgroup> + </informaltable> + </para> + <para> + The grouping fields contain arrays that define the way numbers should be grouped. + For example, the grouping field for the en_US locale, would contain a 2 item +array + with the values 3 and 3. The higher the index in the array, the farther left the + grouping is. If an array element is equal to CHAR_MAX, no further grouping is +done. + If an array element is equal to 0, the previous element should be used. + </para> + <example> + <title><function>localeconv</function> example</title> + <programlisting role="php"> +setlocale(LC_ALL, "en_US"); + +$locale_info = localeconv(); + +echo "<PRE>\n"; +echo "--------------------------------------------\n"; +echo " カレントのロケールの通貨情報: \n"; +echo "--------------------------------------------\n\n"; + +echo "int_curr_symbol: {$locale_info["int_curr_symbol"]}\n"; +echo "currency_symbol: {$locale_info["currency_symbol"]}\n"; +echo "mon_decimal_point: {$locale_info["mon_decimal_point"]}\n"; +echo "mon_thousands_sep: {$locale_info["mon_thousands_sep"]}\n"; +echo "positive_sign: {$locale_info["positive_sign"]}\n"; +echo "negative_sign: {$locale_info["negative_sign"]}\n"; +echo "int_frac_digits: {$locale_info["int_frac_digits"]}\n"; +echo "frac_digits: {$locale_info["frac_digits"]}\n"; +echo "p_cs_precedes: {$locale_info["p_cs_precedes"]}\n"; +echo "p_sep_by_space: {$locale_info["p_sep_by_space"]}\n"; +echo "n_cs_precedes: {$locale_info["n_cs_precedes"]}\n"; +echo "n_sep_by_space: {$locale_info["n_sep_by_space"]}\n"; +echo "p_sign_posn: {$locale_info["p_sign_posn"]}\n"; +echo "n_sign_posn: {$locale_info["n_sign_posn"]}\n"; +echo "</PRE>\n"; + </programlisting> + </example> + <para> + 定数 CHAR_MAX +は上記の方法を使用する場合にも定義されます。 + </para> + <note> + <para> + PHP 4.0.5で追加されました。 + </para> + </note> + <para> + <function>setlocale</function>も参照下さい。 + </para> + </refsect1> + </refentry> + <refentry id="function.ltrim"> <refnamediv> <refname>ltrim</refname> @@ -1470,7 +1683,7 @@ </listitem> <listitem> <simpara> - LC_COLLATE 文字列の比較用 - PHP では現在未実装 + LC_COLLATE 文字列の比較用。<function>strcoll</function>参照 </simpara> </listitem> <listitem> @@ -1866,6 +2079,49 @@ </refsect1> </refentry> + <refentry id="function.strcoll"> + <refnamediv> + <refname>strcoll</refname> + <refpurpose>ロケールに基づく文字列比較</refpurpose> + </refnamediv> + <refsect1> + <title>説明</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>strcoll</function></funcdef> + <paramdef>string <parameter>str1</parameter></paramdef> + <paramdef>string <parameter>str2</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + <parameter>str1</parameter> が <parameter>str2</parameter> より小 + さい場合に0未満の値、<parameter>str1</parameter>が + +<parameter>str2</parameter>より大きい場合に0より大きな値、両者が + 等しい場合に0を返します。<function>strcoll</function> は比較を行 + +う際にカレントのロケールを使用します。カレントのロケールがCまたは + POSIXの場合、この関数は <function>strcmp</function> と等価です。 + </simpara> + <simpara> + + この比較は大文字小文字を区別すること、そして、 + +<function>strcmp</function>とはことなり、バイナリには使用できない + ことに注意して下さい。 + </simpara> + <note> + <simpara> + PHP 4.0.5で追加されました。 + </simpara> + </note> + <simpara> + <function>ereg</function>, <function>strcmp</function>, + <function>strcasecmp</function>, <function>substr</function>, + <function>stristr</function>, <function>strncasecmp</function>, + <function>strncmp</function>, <function>strstr</function>, + <function>setlocale</function> も参照下さい。 + </simpara> + </refsect1> + </refentry> + <refentry id="function.strcspn"> <refnamediv> <refname>strcspn</refname> @@ -2688,27 +2944,49 @@ <refnamediv> <refname>str_replace</refname> <refpurpose> - haystackの中のneedleを全?trに置換する + 文字列 subject 中の文字列 search を全て文字列replaceに置換する </refpurpose> </refnamediv> <refsect1> <title>説明</title> <funcsynopsis> <funcprototype> - <funcdef>string <function>str_replace</function></funcdef> - <paramdef>string <parameter>needle</parameter></paramdef> - <paramdef>string <parameter>str</parameter></paramdef> - <paramdef>string <parameter>haystack</parameter></paramdef> + <funcdef>mixed <function>str_replace</function></funcdef> + <paramdef>mixed <parameter>search</parameter></paramdef> + <paramdef>mixed <parameter>replace</parameter></paramdef> + <paramdef>mixed <parameter>subject</parameter></paramdef> </funcprototype> </funcsynopsis> <para> - この関数は、 <parameter>haystack</parameter> の中の - <parameter>needle</parameter> を全て <parameter>str</parameter> に置 - 換します。技巧的な置換ルールを必要としない場合、 - <function>ereg_replace</function> の替わりにこの関数を常用するべき + この関数は、<parameter>subject</parameter> の中の + <parameter>search</parameter> を全て + <parameter>replace</parameter> +に置換します。技巧的な置換ルールを + 必要としない場合、<function>ereg_replace</function> または + <function>preg_replace</function>の替わりにこの関数を常用するべき です。 </para> <para> + PHP 4.0.5 以降では、<function>str_replace</function> への全てのパ + ラメータは配列とすることが可能です。 + </para> + <para> + <parameter>subject</parameter> が配列の場合、 + <parameter>subject</parameter> +の各エントリについて検索と置換が行 + われ、返り値は同様に配列となります。 + </para> + <para> + <parameter>search</parameter> と <parameter>replace</parameter> + が配列の場合、<function>str_replace</function> は各配列から値を一 + つとりだし、<parameter>subject</parameter> +上で検索と置換を行うた + めに使用します。<parameter>replace</parameter> の値が + <parameter>search</parameter> よりも少ない場合、置換される値の残 + りの部分には空の文字列が使用されます。 + <parameter>search</parameter> が配列で + <parameter>replace</parameter>が文字列の場合、この置換文字列が + <parameter>search</parameter> +の各値について使用されます。しかし、 + 逆は意味がありません。 + </para> + <para> <example> <title><function>str_replace</function>の例</title> <programlisting role="php"> @@ -2724,8 +3002,9 @@ PHP 3.0.8 まではバグがありました。 </para> <para> - <function>ereg_replace</function> および - <function>strtr</function> も参照下さい。 + <function>ereg_replace</function>、 + <function>preg_replace</function>、<function>strtr</function> も + 参照下さい。 </para> </refsect1> </refentry> Index: phpdoc/ja/functions/yaz.xml diff -u phpdoc/ja/functions/yaz.xml:1.2 phpdoc/ja/functions/yaz.xml:1.3 --- phpdoc/ja/functions/yaz.xml:1.2 Fri Sep 29 19:01:27 2000 +++ phpdoc/ja/functions/yaz.xml Sat Feb 3 17:05:22 2001 @@ -260,6 +260,33 @@ </refsect1> </refentry> + <refentry id="function.yaz-element"> + <refnamediv> + <refname>yaz_element</refname> + <refpurpose> + 取得時に要素集合の名前を指定する + </refpurpose> + </refnamediv> + <refsect1> + <title>説明</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>yaz_range</function></funcdef> + <paramdef>int <parameter>id</parameter></paramdef> + <paramdef>string <parameter>elementset</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + この関数は、<function>yaz_search</function> と共に使用され、取得 + +するレコードの要素集合の名前を指定します。多くのサーバは、F + (完全) + および B (短縮) をサポートします。 + </para> + <para> + 成功時にtrue、エラー時にfalseを返します。 + </para> + </refsect1> + </refentry> + <refentry id="function.yaz-range"> <refnamediv> <refname>yaz_range</refname> Index: phpdoc/ja/language/operators.xml diff -u phpdoc/ja/language/operators.xml:1.7 phpdoc/ja/language/operators.xml:1.8 --- phpdoc/ja/language/operators.xml:1.7 Fri Sep 29 19:01:27 2000 +++ phpdoc/ja/language/operators.xml Sat Feb 3 17:05:22 2001 @@ -296,6 +296,12 @@ </programlisting> </informalexample> </para> + <note> + <para> + バッククオート演算子は、<link linkend="ini.safe-mode">セーフモー + ド</link> が有効な場合に無効となります。 + </para> + </note> <para> <function>system</function>, <function>passthru</function>, <function>exec</function>,