我想設定一個簡單的 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路徑以適合我的資料夾設定。
-d
以application/x-www-form-urlencoded
格式發送數據,PHP 自動將其解析為$_POST
超全域變量,而您的程式碼嘗試從$_FILES
超全域變數讀取上傳的文件,該文件據我所知,PHP僅解析multipart/form-data
-requests,並且要使curl發送multipart/form-data
請求,請使用-F