問題
フォームは次のとおりです。
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="oneLevel[]"> <input type="file" name="oneLevel[]"> <input type="submit"> </form>
このフォームからファイルをアップロードすると、次のフォームの$ _FILES配列を取得します。
array( 'files' => array ( 'name' => array ( 0 => 'Lighthouse.jpg', 1 => 'Hydrangeas.jpg', ), 'type' => array ( 0 => 'image/jpeg', 1 => 'image/jpeg', ), 'tmp_name' => array ( 0 => '/tmp/phpQR67Qp', 1 => '/tmp/phpJjnAHA', ), 'error' => array ( 0 => 0, 1 => 0, ), 'size' => array ( 0 => 561276, 1 => 595284, ), ), )
ほとんどの場合、この「機能」は私には適さず、非論理的なようです。 最も簡単な解決策は、file_0、file_1、...、file_Nなど、ファイルタイプフィールドに単純な(文字列)名を使用することですが、これはあまり便利ではありません。 それでも、この問題の解決に興味がある場合は、続きを読んでください...
解決策
autoprependファイルまたはアプリケーションの初期化時のどこかで、$ _FILE配列を次のように処理する価値があります。
/** * * * @param array $arrayForFill . * "" * $_FILES * @param string $currentKey * @param mixed $currentMixedValue * @param string $fileDescriptionParam * (name, type, tmp_name, error size) * @return void */ function rRestructuringFilesArray(&$arrayForFill, $currentKey, $currentMixedValue, $fileDescriptionParam) { if (is_array($currentMixedValue)) { foreach ($currentMixedValue as $nameKey => $mixedValue) { rRestructuringFilesArray($arrayForFill[$currentKey], $nameKey, $mixedValue, $fileDescriptionParam); } } else { $arrayForFill[$currentKey][$fileDescriptionParam] = $currentMixedValue; } } // , "" $_FILES $arrayForFill = array(); // foreach ($_FILES as $firstNameKey => $arFileDescriptions) { // , // foreach ($arFileDescriptions as $fileDescriptionParam => $mixedValue) { rRestructuringFilesArray($arrayForFill, $firstNameKey, $_FILES[$firstNameKey][$fileDescriptionParam], $fileDescriptionParam); } } // $_FILES $_FILES = $arrayForFill;
その結果、より「論理的な」ミシブがあります。
array( 'files' => array ( 0 => array ( 'name' => 'Lighthouse.jpg', 'type' => 'image/jpeg', 'tmp_name' => '/tmp/phpKNqlsc', 'error' => 0, 'size' => 561276, ), 1 => array ( 'name' => 'Hydrangeas.jpg', 'type' => 'image/jpeg', 'tmp_name' => '/tmp/phpB8X3E8', 'error' => 0, 'size' => 595284, ), ), )
この決定を公式文書のコメントに投稿しました。 多くの質問がありますが、具体的な例はありません。 ただし、ここでの公開時点ではまだ登場していません(登場するかどうかはわかりません)。
ご清聴ありがとうございました。誰かが役に立つといいのですが。
UPD: 「自動プリペンドファイル内またはアプリケーションの初期化時のどこかで$ _FILE配列を処理する必要がある」という言葉を見て、$ _FILES配列コードを書き換えると、コミュニティの一部でinりが発生したことを宣言します。必要な機能を実装できます。戦闘プロジェクトでこのコードを「そのまま」使用することはお勧めしません。