我需要将数据发送到自己的服务器进行测试。我发现了这样的实现。
<?php
$data = array("a" => $a);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
$response = curl_exec($ch);
if(!$response) {
return false;
}
else
{
echo"OK";
}
?>
上面写着"好",所以脚本正在运行。但是我怎样才能发送文件呢?这是我的尝试:HTML:
<form action="upload.php" method="put" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Load"><br>
</form>
PHP:
<?php
$data = $_FILES['filename']['tmp_name']
$ch = curl_init('http://xmpp1.feelinhome.ru/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
$response = curl_exec($ch);
if(!$response) {
return false;
}
else
{
echo"OK";
}
?>
上面没有写"好",所以我的脚本是错误的。我的错误在哪里?我该如何发送文件?
As phihag在他们的答案中陈述:
根据HTML标准,您可以而不是。该方法的唯一有效值属性是
get
和post
,对应于GET和POST HTTP方法。<form method="put">
是无效的HTML,将被处理如<form>
,即发送GET请求。
尝试将表单方法更改为张贴
<form action="upload.php" method="post" enctype="multipart/form-data">
也设置在卷曲中
curl_setopt($ch, CURLOPT_POST, 1);
最好的答案是对的,但对于错误的问题。是的,对于html表单,您只能使用GET和POST,但您没有询问如何根据html标准进行操作。您始终可以通过XHR请求使用PUT和DELETE。当然,这里的最佳答案并没有触及事实的另一部分,php不能正确地支持PUT和DELETE请求,因为没有合适的超级全局变量。为了使事情正常工作,你应该在这里使用流类要点。请确保您使用我的版本,因为我对其进行了轻微修改,以便正确上传文件,并按预期设置$_files超级全局。然后,在您的客户端,您应该以这种方式执行ajax请求:
var formData =new FormData($('form')[0]);
$.ajax({
type: "PUT",
//in this example we put on the current uri
url: 'upload.php',
dataType: 'json',
data: formData,
async:false,
cache:false,
contentType:false,
processData:false,
}).done(function(data) {
//whatever happens on sucess goes here
).fail(function(){
//whatever happens on failure goes here
});
关于缺乏该功能以及该问题与RFC 2616的相关性的讨论可以在这里找到