簡體   English   中英

需要php代碼來存儲使用wget上傳的文件

[英]Need php code to store file uploaded with 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:// input)我根本不是php專家。 那么有人可以幫助我獲得有效的解決方案嗎? 謝謝。

wget不能用於文件上傳。 文件上傳要求內容類型為multipart/form-data ,但是wget不支持此類型。 從手冊頁:

Wget當前不支持multipart/form-data' for transmitting POST data; only multipart/form-data' for transmitting POST data; only申請/ x-www-form-urlencoded'

--post-file只是發布普通表單字段,它只是從文件內容中獲取值。

您可以使用curl來做您想做的事。

curl -F file=@links.txt http://bearnova.com/upload_file.php

這就是使用wget可以做到的。

wget -d --post-data="filedata=`base64 links.txt`&filename=links.txt" http://bearnova.com/upload_file.php

您可以從upload_file.php獲取文件名和文件數據,然后執行所需的任何操作。

<?php
    $filename = $_POST['filename'];
    $filedata = base64_decode($_POST['filedata']);
?>

我這樣獲取文件內容:

<?php $postdata = file_get_contents("php://input"); ?>

$ HTTP_RAW_POST_DATA-與上面相同,但取決於php.ini(在我的情況下為空)

我需要將其存儲在服務器端的文件中,似乎文件名也未發送,但這應該沒什么大不了的。

請檢查,是否在html表單中定義了enctype

<form method="post" action="upload_file.php" enctype="multipart/form-data">
    <input type="file" name="file" id="file"/>
</form>

如果未定義,則可能也無法正常工作。 因為,對於文件字段,需要使用此enctype形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM