0

当输入文件的表单名称是整数时,我使用 PHP 上传 curl 文件时遇到问题:<input type="file" name="1">

我有以下数组,我放入 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"
}

$_文件:

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

当我将数组键更改为字母时,它按预期工作:

$_文件:

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

一种解决方案可能是在您的输入前加上“data-” <number>,这样您的帖子就会按预期工作。

StackOverflow 上有很多问题可以解决这个问题。这是一个:html中name属性的有效值

于 2013-10-29T13:09:04.823 回答