cURL将文件上传到PHP

时间:2016-06-25 21:57:35

标签: php curl

我正在尝试使用cURL可执行文件使用POST方法将mp4文件上传到php脚本。在PHP文件中,我正在检查文件格式和所有类型的东西。这是PHP文件:

<?php

$allowedExts = array("jpg", "jpeg", "gif", "png", "mp3", "mp4", "wma");
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

if (($_FILES["file"]["type"] == "video/mp4") && ($_FILES["file"]["size"] < 2000000) && in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    } else {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

        if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
        }
    }
} else {
    echo "Invalid file";
}
?>

当我使用普通的HTML表单上传文件时,它可以正常工作。这是我使用的HTML表单:

<!DOCTYPE html>

<head>
    <title></title>
</head>

<body>

    <form action="upload_file.php" method="post" enctype="multipart/form-data" name="uploadedfile">
        <label for="file"><span>Filename:</span></label>
        <input type="file" name="file" id="file" /> 
        <br />
        <input type="submit" name="submit" value="Submit" />
    </form>
</body>
</html>

但是当我现在使用此命令使用cURL客户端尝试它时:

“curl -F file=@test.mp4 http://localhost:1337/upload_file.php

它在控制台中显示“无效文件”,通常在文件与PHP中的im检查属性不匹配时显示(例如,不适合文件类型)。

我希望你们能理解我的问题并帮助我! :)

Greets Steven

2 个答案:

答案 0 :(得分:1)

您的$_FILES["file"]["type"]检查失败,因为cURL没有对该类型进行任何猜测,也不会在POST请求中自动发送。

这很容易被欺骗,所以无论如何它都不是很好的检查。

但是为了使您的示例有效,请尝试使用file参数指定内容类型:

curl -F file=@test.mp4;type=video/mp4 http://localhost:1337/upload_file.php

答案 1 :(得分:1)

除了drew010写的内容(我写了评论但还没有声誉),相信那些传入的值可能实际上是一种安全风险,并且过去曾被用来破解网站所以要小心。