我正在尝试使用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
答案 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写的内容(我写了评论但还没有声誉),相信那些传入的值可能实际上是一种安全风险,并且过去曾被用来破解网站所以要小心。