Heim  >  Fragen und Antworten  >  Hauptteil

So lösen Sie das Problem des Fehlers „Kann nicht verschoben werden“, wenn Curl Dateien nach PHP hochlädt

Ich möchte einen einfachen HTTP-Dienst (mit PHP) einrichten, um Dateien von einem anderen Computer mit Linux Curl und Windows Powershell zu empfangen. Ich habe aus Internetquellen gelesen, dass PHP keine Dateien auf den Server hochladen kann? Verwenden Sie cURL, um POST-Daten zusammen mit der Datei hochzuladen. Diese Beiträge haben mir geholfen, das Parameterproblem zu lösen, aber nicht alle.

Das ist mein Code (siehe hier)

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

Dies ist der Befehl, den ich verwendet und die Fehlerantwort erhalten habe.

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

Das ist /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

Upload-Status

$ 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

Kann mir jemand sagen, was mit meinem Code nicht stimmt? Für jeden Rat wäre ich sehr dankbar.

P.S. Vielen Dank an ADyson und Hanshenrik für ihre großzügige Anleitung. Dieses Problem wurde durch zwei Dinge verursacht: (1) die Verwendung von -F als Curl-Befehl, (2) die Korrektur des PHP-Pfads, damit er zu meinem Ordner-Setup passt.

P粉904191507P粉904191507219 Tage vor376

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort