![](/img/trans.png)
[英]what do I need on server side to accept file uploaded by wget with simple HTTP POST?
[英]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.