搜索

首页  >  问答  >  正文

解决Curl上传文件到PHP并出现“无法移动”错误的方法

我想设置一个简单的 HTTP 服务(使用 PHP)来使用 Linux curl 和 Windows Powershell 从另一台计算机接收文件。我读过互联网资源,包括PHP无法上传文件到服务器?使用 cURL 将 POST 数据与文件一起上传。这些帖子帮助我解决了参数问题,但不是全部。

这是我的代码(请参阅此处)

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
?>

这是我使用的命令并收到错误响应。

# bash
curl -X POST -F "id=fileToUpload" -F "fileToUpload=@null.txt" http://127.0.0.1/upload.php

这是/var/apache2/error.log

[Sun Aug 27 05:13:13.392185 2023] [php7:warn] [pid 77733] [client 127.0.0.1:54732] PHP Warning:  move_uploaded_file(uploads/null.txt): failed to open stream: No such file or directory in /var/www/html/upload.php on line 5
[Sun Aug 27 05:13:13.392251 2023] [php7:warn] [pid 77733] [client 127.0.0.1:54732] PHP Warning:  move_uploaded_file(): Unable to move '/tmp/phpynhUuv' to 'uploads/null.txt' in /var/www/html/upload.php on line 5

上传状态

$ ll   
> total 8
> drwxr-xr-x 2 root     root     4096 Aug 27 05:08 html
> drwxrwxrwx 2 www-data www-data 4096 Jun  2 22:38 uploads

谁能告诉我我的代码有什么问题吗?任何意见将不胜感激。

附注感谢ADyson和hanshenrik的慷慨指导。这个问题是由两个方面造成的:(1)使用-F作为curl命令,(2)更正PHP路径以适合我的文件夹设置。

P粉904191507P粉904191507286 天前464

全部回复(1)我来回复

  • P粉348088995

    P粉3480889952024-02-18 10:02:04

    -dapplication/x-www-form-urlencoded 格式发送数据,PHP 自动将其解析为 $_POST 超全局变量,而您的代码尝试从 $_FILES 超全局变量读取上传的文件,该文件据我所知,PHP仅解析multipart/form-data-requests,并且要使curl发送multipart/form-data请求,请使用-F

    curl -F @null.txt http://127.0.0.1/upload.php

    回复
    0
  • 取消回复