需要php代码来存储用wget上传的文件

时间:2014-08-21 10:06:42

标签: php bash http post wget

我需要从命令行上传服务器上的文件。我接下来做了:

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人。那么有人可以帮助我获得有效的解决方案吗? 感谢。

4 个答案:

答案 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。