PHP curl文件上传::当表单名称为整数时出现奇怪的curl行为
Posted
技术标签:
【中文标题】PHP curl文件上传::当表单名称为整数时出现奇怪的curl行为【英文标题】:PHP curl file upload :: weird curl behaviour when form name is an integer 【发布时间】:2013-11-08 14:57:41 【问题描述】:当输入文件的表单名称为整数时,使用 php 上传 curl 文件时遇到问题:<input type="file" name="1">
我将以下数组放入 CURLOPT_POSTFIELDS 以获取 multipart/form-data:
$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 卷曲版本 7.30.0
【问题讨论】:
【参考方案1】: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>
,这样您的帖子就会按预期工作。
*** 上有很多问题可以解决这个问题。这是一个:valid value for name attribute in html
【讨论】:
我无权访问此 HTML 表单,我需要通过 curl 发送数据。也许使用 php Cocket 就可以了。 是否可以尝试联系作者/负责人并要求进行相当简单的更改?解决明显错误的约定充其量只是一种技巧。以上是关于PHP curl文件上传::当表单名称为整数时出现奇怪的curl行为的主要内容,如果未能解决你的问题,请参考以下文章
使用 ajax 和 laravel 上传文件表单时出现问题?