Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


psr:psr7

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
psr:psr7 [2020/06/16 21:11]
y2sunlight [1.5 サーバーサイドリクエスト]
psr:psr7 [2020/09/01 11:53] (現在)
tanaka [PSR-7: HTTP message interfaces]
行 3: 行 3:
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-25//  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-25//
  
-本章は、若干の補足を加筆してはいるものの単に[[https://www.php-fig.org/psr/|PSRのサイト]]を翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。+本章は、若干の補足を加筆してはいるものの単に[[https://www.php-fig.org/psr/|PSRのサイト]]を日本語に翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。 
 + 
 +関連記事
  
-==== 目次 ==== 
   * [[psr:top|PSR - PHP標準勧告]]   * [[psr:top|PSR - PHP標準勧告]]
   * [[psr:psr1|PSR-1: Basic Coding Standard - 基本コーディング規約]]   * [[psr:psr1|PSR-1: Basic Coding Standard - 基本コーディング規約]]
行 14: 行 15:
   * PSR-7: HTTP Message Interface - HTTPメッセージインターフェイス   * PSR-7: HTTP Message Interface - HTTPメッセージインターフェイス
   * [[psr:psr11|PSR-11: Container Interface - コンテナインターフェイス]]    * [[psr:psr11|PSR-11: Container Interface - コンテナインターフェイス]] 
 +  * [[psr:psr12|PSR-12: Extended Coding Style - 拡張コーディングスタイル]] 
 +  * [[psr:psr13|PSR-13: Link definition interfaces - リンク定義インターフェース]]
 +  * [[psr:psr14|PSR-14: Event Dispatcher - イベントディスパッチャー]] 
 +  * [[psr:psr15|PSR-15: HTTP Server Request Handlers - HTTPサーバーリクエストハンドラー]] 
 +  * [[psr:psr16|PSR-16: Common Interface for Caching Libraries - キャッシングライブラリのための共通インターフェース]] 
 +  * [[psr:psr17|PSR-17: HTTP Factories - HTTPファクトリー]] 
 +  * [[psr:psr18|PSR-18: HTTP Client - HTTPクライアント]] 
 +  * [[psr:psr19|PSR-19: PHPDoc tags(Draft) - PHPDocタグ]] 
  
 ----- -----
行 238: 行 247:
 ==== 1.6 アップロードファイル ==== ==== 1.6 アップロードファイル ====
  
-ServerRequestInterface specifies a method for retrieving a tree of upload files in a normalized structure, with each leaf an instance of UploadedFileInterface.+''ServerRequestInterface'' は、正規化された構造でアップロードファイルのツリーを取得するメソッドを規定します。そのツリーの各リーフには ''UploadedFileInterface'' のインスタンスがあります。
  
-ServerRequestInterfaceは、正規化された構造でアップロードファイルのツリーを取得するメソッドを規定します。そのツリーの各リーフにはUploadedFileInterfaceのインスタンスがあります。 +''$_FILES'' スーパーグローバル変数には、ファイル入力の配列を処理するときによく知られた問題がいくつかあります。例として、ファイルの配列を送信するフォームがある場合(例えば入力名を「files」とする)、''files[0]'' と ''files[1]'' を送信すると、PHPはこれを次のように表します:
- +
-The $_FILES superglobal has some well-known problems when dealing with arrays of file inputs. As an example, if you have a form that submits an array of files — e.g., the input name “files”, submitting files[0] and files[1] — PHP will represent this as: +
- +
-$_FILESスーパーグローバル変数には、ファイル入力の配列を処理するときによく知られた問題がいくつかあります。 例として、ファイルの配列を送信するフォームがある場合(例えば入力名を「files」とする)、files[0] とfiles[1] を送信すると、PHPはこれを次のように表します:+
  
 <code php> <code php>
行 261: 行 266:
 ) )
 </code> </code>
- 
-instead of the expected: 
  
 期待されるのは次のようです: 期待されるのは次のようです:
行 282: 行 285:
 ) )
 </code> </code>
- 
-The result is that consumers need to know this language implementation detail, and write code for gathering the data for a given upload. 
  
 その結果、コンシューマーはこの言語実装(PHP)の詳細を知って、与えられたアップロードのデータを収集するためのコードを書く必要があります。 その結果、コンシューマーはこの言語実装(PHP)の詳細を知って、与えられたアップロードのデータを収集するためのコードを書く必要があります。
  
-Additionally, scenarios exist where $_FILES is not populated when file uploads occur:+さらに、ファイルのアップロードが発生したときに ''$_FILES'' が設定されない状況があります:
  
-さらに、ファイルのアプロードが発生したときに$_FILESが入力されない状況がありま+  * HTTPメソッドが ''POST''ない場合 
 +  * ユニットテストの時 
 +  * [[https://reactphp.org/|ReactPHP]]のように非SAPI環境下で操作る場合
  
-  * When the HTTP method is not POST. +そのような場合、データを別の方法でシード(特別な処理)する必要があります。例としては:
-  * When unit testing. +
-  * When operating under a non-SAPI environment, such as ReactPHP. +
- +
-  * HTTPメソッドがPOSTでない場合 +
-  * ユニットテスト時 +
-  * ReactPHPのように非SAPI環境下で操作する場合 +
- +
-In such cases, the data will need to be seeded differently. As examples: +
- +
-そのような場合、データを別の方法でシード(特別な処理)する必要があります。 例としては: +
- +
-  * A process might parse the message body to discover the file uploads. In such cases, the implementation may choose not to write the file uploads to the file system, but instead wrap them in a stream in order to reduce memory, I/O, and storage overhead.+
  
   * プロセスがメッセージ本文を解析して、ファイルのアップロードを検出する場合があります。 このような場合、実装では、ファイルアップロードをファイルシステムに書き込まず、代わりにストリームにラップして、メモリ、I/O、ストレージのオーバーヘッドを削減します。   * プロセスがメッセージ本文を解析して、ファイルのアップロードを検出する場合があります。 このような場合、実装では、ファイルアップロードをファイルシステムに書き込まず、代わりにストリームにラップして、メモリ、I/O、ストレージのオーバーヘッドを削減します。
- 
-  * In unit testing scenarios, developers need to be able to stub and/or mock the file upload metadata in order to validate and verify different scenarios. 
  
   * ユニットテストのシナリオでは、さまざまなシナリオを検証および検査するために、開発者はファイルアップロードのメタデータをスタブ化および/またはモックできる必要があります。   * ユニットテストのシナリオでは、さまざまなシナリオを検証および検査するために、開発者はファイルアップロードのメタデータをスタブ化および/またはモックできる必要があります。
  
-getUploadedFiles() provides the normalized structure for consumers. Implementations are expected to:+''getUploadedFiles()'' は、コンシューマに正規化された構造を提供します。実装では、次のことが期待されます:
  
-getUploadedFiles() は、コンシューマに正規化された構造提供ます。 実装では次のことが期待されます+  * 与えられたファイルアップロードのすべての情報集約し、を使用して ''Psr\Http\Message\UploadedFileInterface'' インスタンスに設定します
  
-  * Aggregate all information for a given file upload, and use it to populate a Psr\Http\Message\UploadedFileInterface instance. +  * 送信されたツリー構造を再作成します。その時各リーフは、ツリー内の与えられた場所に対して適切な''Psr\Http\Message\UploadedFileInterface'' のインスタンスになります。
-  * Re-create the submitted tree structure, with each leaf being the appropriate Psr\Http\Message\UploadedFileInterface instance for the given location in the tree. +
- +
-  * 与えられたファイルアップロードのすべての情報を集約し、それを使用してPsr\Http\Message\UploadedFileInterfaceインスタンスに入力します。 +
-  * 送信されたツリー構造を再作成します。その時各リーフは、ツリー内の与えられた場所に対して適切なPsr\Http\Message\UploadedFileInterfaceのインスタンスになります。 +
- +
-The tree structure referenced should mimic the naming structure in which files were submitted.+
  
 参照されるツリー構造は、ファイルが送信されたときのネーミング構造を模倣する必要があります。 参照されるツリー構造は、ファイルが送信されたときのネーミング構造を模倣する必要があります。
- 
-In the simplest example, this might be a single named form element submitted as: 
  
 最も単純な例では、これは次のように送信された単一の名前付きフォーム要素でしょう: 最も単純な例では、これは次のように送信された単一の名前付きフォーム要素でしょう:
行 333: 行 314:
 </code> </code>
  
-In this case, the structure in $_FILES would look like: +この場合、''$_FILES'' の構造は次のようになります:
- +
-この場合、$_FILESの構造は次のようになります:+
  
 <code php> <code php>
行 349: 行 328:
 </code> </code>
  
-The normalized form returned by getUploadedFiles() would be: +''getUploadedFiles()'' によって返される正規化された形式は次のようになります:
- +
-getUploadedFiles() によって返される正規化された形式は次のようになります:+
  
 <code php> <code php>
行 358: 行 335:
 ) )
 </code> </code>
- 
-In the case of an input using array notation for the name: 
  
 名前に配列表記を使用した入力の場合: 名前に配列表記を使用した入力の場合:
行 366: 行 341:
 <input type="file" name="my-form[details][avatar]" /> <input type="file" name="my-form[details][avatar]" />
 </code> </code>
- 
-$_FILES ends up looking like this: 
  
 $_FILESは次のようになります: $_FILESは次のようになります:
行 404: 行 377:
 </code> </code>
  
-And the corresponding tree returned by getUploadedFiles() should be: +そして、''getUploadedFiles()'' によって返される対応するツリーは次のようになります:
- +
-そして、getUploadedFiles() によって返される対応するツリーは次のようになります:+
  
 <code php> <code php>
行 417: 行 388:
 ) )
 </code> </code>
- 
-In some cases, you may specify an array of files: 
  
 場合によっては、ファイルの配列を指定できます: 場合によっては、ファイルの配列を指定できます:
行 426: 行 395:
 Upload an avatar: <input type="file" name="my-form[details][avatars][]" /> Upload an avatar: <input type="file" name="my-form[details][avatars][]" />
 </code> </code>
- 
-(As an example, JavaScript controls might spawn additional file upload inputs to allow uploading multiple files at once.) 
  
 (例として、JavaScriptコントロールは、複数のファイルを一度にアップロードできるように、追加のファイルアップロード入力を生成する場合があります。) (例として、JavaScriptコントロールは、複数のファイルを一度にアップロードできるように、追加のファイルアップロード入力を生成する場合があります。)
  
-In such a case, the specification implementation must aggregate all information related to the file at the given index. The reason is because $_FILES deviates from its normal structure in such cases: +このような場合、仕様の実装では、指定されたインデックスにあるファイルに関連するすべての情報を集約する必要があります。その理由は、''$_FILES'' は通常の構造から逸脱しているためです。それは、次のような場合です:
- +
-このような場合、仕様の実装では、指定されたインデックスにあるファイルに関連するすべての情報を集約する必要があります。 その理由は、$_FILESは通常の構造から逸脱しているためです。それは、次のような場合です:+
  
 <code php> <code php>
行 487: 行 452:
 </code> </code>
  
-The above $_FILES array would correspond to the following structure as returned by getUploadedFiles(): +上記の ''$_FILES'' 配列は、''getUploadedFiles()'' によって返される次の構造に対応します:
- +
-上記の$_FILES配列は、getUploadedFiles() によって返される次の構造に対応します:+
  
 <code php> <code php>
行 504: 行 467:
 ) )
 </code> </code>
- 
-Consumers would access index 1 of the nested array using: 
  
 コンシューマーは、ネストされた配列のインデックス1に次のようにしてアクセスします: コンシューマーは、ネストされた配列のインデックス1に次のようにしてアクセスします:
行 513: 行 474:
 </code> </code>
  
-Because the uploaded files data is derivative (derived from $_FILES or the request body), a mutator method, withUploadedFiles(), is also present in the interface, allowing delegation of the normalization to another process. +アップロードされたファイルデータは派生''$_FILES'' またはリクエストボディからの派生)であるため、インターフェイスにはミューテーターメソッド(mutator method) として ''withUploadedFiles()'' も存在し、正規化を別のプロセスに委譲できます。
- +
-アップロードされたファイルデータは派生($_FILESまたはリクエストボディからの派生)であるため、インターフェイスにはミューテーターメソッド(mutator method) としてwithUploadedFiles() も存在し、正規化を別のプロセスに委譲できます。 +
- +
-In the case of the original examples, consumption resembles the following:+
  
 冒頭の例の場合、使用方法は次のようになります: 冒頭の例の場合、使用方法は次のようになります:
行 534: 行 491:
 </code> </code>
  
-This proposal also recognizes that implementations may operate in non-SAPI environments. As such, UploadedFileInterface provides methods for ensuring operations will work regardless of environment. In particular:+この提案は、実装が非SAPI環境で動作する可能性があることも認識しています。従って、''UploadedFileInterface'' は、環境に関係なく操作が確実に機能するためのメソッドを提供します。 特に:
  
-この提案は、実装が非SAPI環境で動作する可能性があることも認識しています。 したがって、UploadedFileInterfaceは、環境に関係なく操作が確実に機能するためのメソッドを提供します。 特に: +  ''moveTo($targetPath)'' は、一時的なアップロードファイルで直接 ''move_uploaded_file()'' を呼び出すより安全で推奨される代替手段として提供されています。実装は、環境に基づいて使用する正しい操作を検出します。
-  +
- +
-  * moveTo($targetPath) is provided as a safe and recommended alternative to calling move_uploaded_file() directly on the temporary upload file. Implementations will detect the correct operation to use based on environment. +
- +
-  * moveTo($targetPath) は、一時アップロードファイルでmove_uploaded_file() を直接呼び出すより安全で推奨される代替手段として提供されています。 実装は、環境に基づいて使用する正しい操作を検出します。 +
- +
-  * getStream() will return a StreamInterface instance. In non-SAPI environments, one proposed possibility is to parse individual upload files into php://temp streams instead of directly to files; in such cases, no upload file is present. getStream() is therefore guaranteed to work regardless of environment. +
- +
-  * getStream() はStreamInterfaceインスタンスを返します。 非SAPIの環境下では、個々のアップロードファイルを解析して直接ファイルにではなくphp://tempストリームにすることが提案されています。 このような場合、アップロードファイルは存在しないことになり、 したがって、getStream() は環境に関係なく動作することが保証されています。+
  
-As examples:+  * ''getStream()'' は ''StreamInterface'' インスタンスを返します。非SAPIの環境下では、個々のアップロードファイルを解析して直接ファイルにではなく ''php:<nowiki>//</nowiki>temp'' ストリームにすることが提案されています。このような場合、アップロードファイルは存在しないことになり、従って、''getStream()'' は環境に関係なく動作することが保証されています。
  
 例として: 例として:
行 554: 行 502:
 // Move a file to an upload directory // Move a file to an upload directory
 // ファイルをアップロードディレクトリに移動する // ファイルをアップロードディレクトリに移動する
 +
 $filename = sprintf( $filename = sprintf(
     '%s.%s',     '%s.%s',
行 565: 行 514:
 // Psr7StreamWrapper is a class that will decorate a StreamInterface as a PHP // Psr7StreamWrapper is a class that will decorate a StreamInterface as a PHP
 // StreamWrapper. // StreamWrapper.
-// ファイルをAmazon S3にストリーミングします。 +//  
-// $s3wrapperがS3に書き込むPHPストリームであり、Psr7StreamWrapperがStreamInterfaceを +// ファイルを Amazon S3 にストリーミングします。 
-// PHP StreamWrapperとして装飾するクラスであると定します。+// $s3wrapper が S3 に書き込むPHPストリームであり、 
 +// Psr7StreamWrapper が StreamInterface を 
 +// PHP StreamWrapper として装飾するクラスであると定します。 
 $stream = new Psr7StreamWrapper($file1->getStream()); $stream = new Psr7StreamWrapper($file1->getStream());
 stream_copy_to_stream($stream, $s3wrapper); stream_copy_to_stream($stream, $s3wrapper);
psr/psr7.1592309471.txt.gz · 最終更新: 2020/06/16 21:11 by y2sunlight