繁体   English   中英

用put PHP Curl上传文件

[英]Upload file with put PHP Curl

我需要将数据发送到我自己的服务器进行测试。 我发现了这样的实现。

 <?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";
        }
?>

这不是说“ OK”,所以我的脚本是错误的。 我的错误在哪里我该如何发送文件?

正如phihag 在回答中所说

根据HTML标准,您不能 方法属性的唯一有效值是getpost ,与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 super global。 然后,在您的客户端,您应该以这种方式执行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相关性的讨论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM