0

入力ファイルのフォーム名が整数の場合、PHP を使用した curl ファイルのアップロードに問題があります。<input type="file" name="1">

multipart/form-data を取得するために CURLOPT_POSTFIELDS に入れた次の配列があります。

$array = array(
    "MAX_FILE_SIZE" => 80000,
    "1" => '@'.$cfg['lpath'].'logos/'.domain($projekt['adres']).'.jpg;type=image/jpeg',
    "2" => '@'.($cfg['lpath']==''?'/dev/null':'NUL:').';filename=',
    "3" => '@'.($cfg['lpath']==''?'/dev/null':'NUL:').';filename=',
    "send" => 'send it'
);

サーバーに送信すると、var_dump($_POST, $_FILES) は次のようになります。

$_POST:

array(2) {
  ["MAX_FILE_SIZE"]=>
  string(5) "80000"
  ["send"]=>
  string(7) "send it"
}

$_FILES:

array(1) {
  ["MAX_FILE_SIZE"]=>
  array(5) {
    ["name"]=>
    string(0) ""
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(0) ""
   ["error"]=>
    int(4)
    ["size"]=>
    int(0)
  }
}

配列キーを文字に変更すると、期待どおりに機能します。

$_FILES:

array(3) {
  ["a"]=>
  array(5) {
    ["name"]=>
    string(16) "filename.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(14) "/tmp/phpRZMiRA"
    ["error"]=>
    int(0)
    ["size"]=>
    int(6567)
  }
  ["b"]=>
  array(5) {
    ["name"]=>
    string(0) ""
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(0) ""
    ["error"]=>
    int(4)
    ["size"]=>
    int(0)
  }
  ["c"]=>
  array(5) {
    ["name"]=>
    string(0) ""
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(0) ""
    ["error"]=>
    int(4)
    ["size"]=>
    int(0)
  }
}

バグですか?curl を使用してそのような配列を送信することは可能ですか?

私のPHPバージョンは5.3.25 Curlバージョン7.30.0です

4

1 に答える 1

0

HTML の名前トークンは、特定の制限に従う必要があります。

6.2 SGML basic types

...

    ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

ソース: http://www.w3.org/TR/html4/types.html#type-cdata

1 つの解決策は、入力に「data-」という接頭辞を付けること<number>です。投稿は期待どおりに機能します。

この問題に対処する StackOverflow に関する質問はたくさんあります。1 つ: html の name 属性の有効な値

于 2013-10-29T13:09:04.823 に答える