我需要从命令行上传服务器上的文件。我接下来做了:
wget -d --post-file=links.txt http://bearnova.com/upload_file.php
这是upload_file.php。下面的代码当然不起作用:
<?php
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_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 "Stored in: " . $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
?>
Wget执行HTTP POST发送文件。 我也听说过$ _POST,$ HTTP_RAW_POST_DATA和file_get_contents(php://输入) 我根本不是一个php人。那么有人可以帮助我获得有效的解决方案吗? 感谢。
答案 0 :(得分:1)
wget
不能用于文件上传。文件上传要求内容类型为multipart/form-data
,但wget
不支持此内容。从手册页:
Wget目前不支持
multipart/form-data' for transmitting POST data; only
application / x-www-form-urlencoded'
--post-file
只发布普通表单字段,它只是从文件内容中获取值。
您可以使用curl
代替。
curl -F file=@links.txt http://bearnova.com/upload_file.php
答案 1 :(得分:1)
这是你用wget做的方法。
wget -d --post-data="filedata=`base64 links.txt`&filename=links.txt" http://bearnova.com/upload_file.php
你可以从upload_file.php获取文件名和filedata,并做任何你想做的事情。
<?php
$filename = $_POST['filename'];
$filedata = base64_decode($_POST['filedata']);
?>
答案 2 :(得分:0)
我以这种方式获取文件内容:
<?php $postdata = file_get_contents("php://input"); ?>
$ HTTP_RAW_POST_DATA - 与上面相同,但取决于php.ini(在我的情况下为空)
我需要将它存储在服务器端的文件中,似乎文件名也没有发送,但它应该没什么大不了的。
答案 3 :(得分:-1)
请检查,在html表单中您是否定义了enctype
<form method="post" action="upload_file.php" enctype="multipart/form-data">
<input type="file" name="file" id="file"/>
</form>
如果没有定义那么它也可能不起作用。 因为,对于文件字段,需要这种形式的enctype。