8

我正在构建我的第一个 REST Api,到目前为止一切顺利,我只是遇到了通过PUT请求方法上传文件的问题。我需要这样做是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数据中访问上传的文件?

谢谢你的帮助。

4

2 回答 2

5

PHP 为某些客户端用来在服务器上存储文件的 HTTP PUT 方法提供支持。PUT 请求比使用 POST 请求上传文件要简单得多,它们看起来像这样:

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);
?>
于 2012-09-09T16:26:50.403 回答
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);
?>
于 2012-09-09T16:27:30.637 回答