如何使用PHP中的PUT而不是POST上传文件

9
我正在搭建我的第一个REST Api,并且目前进行得很顺利,只是在通过PUT请求方法上传文件时遇到了问题。由于我需要更新来自iOS应用程序的用户和他们的头像图像,因此需要使用PUT。因此,当我使用PUT上传文件时,$_FILES数组实际上为空,但是当我打印出PUT数据时。
parse_str(file_get_contents('php://input'), $put_vars);  
$data = $put_vars; 
print_r($data);

我收到以下回复:
Array
(
    [------WebKitFormBoundarykwXBOhO69MmTfs61
Content-Disposition:_form-data;_name] => \"avatar\"; filename=\"avatar-filename.png\"
Content-Type: image/png

�PNG


)

现在我并不真正理解这个 PUT 数据,因为我不能像访问数组一样访问它。那么我的问题是如何从 PUT 数据中访问上传的文件?

感谢您的帮助。


你是如何发送PUT请求的? - Greg
我正在使用Restkit为iOS发送数据,但目前我实际上正在使用Google Chrome扩展程序Postman进行测试。 - Wasim
2个回答

5

PHP提供了对HTTP PUT方法的支持,该方法用于某些客户端将文件存储到服务器上。与使用POST请求上传文件相比,PUT请求要简单得多,其结构如下:

PUT /path/filename.html HTTP/1.1

以下代码来自于PHP官方文档,用于通过PUT方法上传文件:
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");

/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");

/* Read the data 1 KB at a time
   and write to the file */
while ($data = fread($putdata, 1024))
  fwrite($fp, $data);

/* Close the streams */
fclose($fp);
fclose($putdata);
?>

1
@Wasim 如果你遵循HTTP协议,那么在PUT请求中就不应该再有任何数据了。 - Greg
执行每个操作时,请进行一个PUT请求。这将节省您大量时间。 - Greg
我真的很希望能够将所有更新用户的操作都整合到一个PHP方法中,但看来我必须将其拆分。感谢您的帮助! - Wasim
2
虽然仍然可以通过对PUT数据进行字符串操作来实现,但使用每个请求一个请求的方式会更加清晰和规范。 - Greg
实际上,以上代码并没有起作用,它会写入一个空文件。我注意到一个问题,即实际上我的文件有一个键“avatar”,但我无法指定该键。我该怎么做? - Wasim
显示剩余3条评论

0

PHP手册中有一个例子:文件上传:PUT方法

<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");

/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");

/* Read the data 1 KB at a time
   and write to the file */
while ($data = fread($putdata, 1024))
  fwrite($fp, $data);

/* Close the streams */
fclose($fp);
fclose($putdata);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接