1

一連のペアの「前」と「後」の画像を PHP スクリプトにアップロードしています。アップロードを処理するとき、正しい「前」と「後」の画像が一致していることを確認する必要があります。

私がこれを行うと:

before: <input type="file" name="image[]">  after: <input type="file" name="image[]">
before: <input type="file" name="image[]">  after: <input type="file" name="image[]">

次に、image[] 配列をループするだけで、正しい順序を維持する PHP に頼ることができますか?

これに変更した場合、同じ質問が当てはまります。

before: <input type="file" name="before[]">  after: <input type="file" name="after[]">
before: <input type="file" name="before[]">  after: <input type="file" name="after[]">

そこでは、before[] 配列と after[] 配列が適切であることを確認する必要があり、さらにループ内で 2 つを調整する必要があります。

あるいは、私はできる

before: <input type="file" name="before1">  after: <input type="file" name="after1">
before: <input type="file" name="before2">  after: <input type="file" name="after2">
etc....

(おそらく.netで何をするか)しかし、PHPでそれをどのようにループするかはよくわかりません。

では、$_FILES 配列を構築するときに PHP が入力順序を維持することを期待できますか、それともこれを行うためのより良い方法はありますか?

ありがとう!

4

2 に答える 2

1

php-array 拡張機能内で配列キーを強制することができます。

name="before[1]"     name="after[1]"
name="before[2]"     name="after[2]"

PHP は、フォーム データを処理するときに、これらのキーを使用して配列エントリを作成します。

あるいは、単に次のようなものを持つこともできます

foreach(array_keys($_FILES['before']['tmp_name'])) as $key) {
    processFile($_FILES['before']['tmp_name'][$key]);
    processFile($_FILES['after']['tmp_name'][$key]);
}

PHP には、配列ベースのファイル アップロードを処理するおかしな方法があり、['tmp_name']属性 (または $_FILES 配列内の他の属性) をループする必要があることに注意してください。

、、などのバージョンbefore1before2は、次のようなこともできます

$keys = preg_grep('/^after\d+$/', array_keys($_FILES['before']['tmp_name']));

これにより、配列が得られます:

 $keys = array(
    0 => 'after1',
    1 => 'after2', 
    ...
 )
于 2012-10-12T20:42:39.417 に答える
0

例で示したように名前フィールドを使用して配列を作成すると、PHP はフォームで送信されたのと同じ順序で配列を提供します。基本的に、これに対するユーザー入力を信頼していることに注意してください。つまり、何か (悪意を持って作成されたフォームや XSS インジェクションなど) がフォームを変更して投稿すると、データの順序が変わる可能性があります。これは、他の種類のフォーム操作と同じリスクです。したがって、PHP はそれをいじくりまわすべきではありませんが、ゴールデン ルールはユーザー入力を信頼しないことです。

于 2012-10-12T20:44:18.897 に答える