2009/01/22

[Linux] wget post file (2)

這篇要獨立寫作一篇的原因是因為作 cgi 的開發的時候其實 shell 也是很好用的工具,然而怎麼使用 bash 來做上一篇提到的 up.php 這支 server page 做的事情呢?

其實很簡單,技巧說出來,就不值錢了:
#!/bin/bash
echo
echo

echo > /tmp/test.txt
while read data
do
echo $data >> /tmp/test.txt
done

[Linux] wget post file

我們在做 web 的時候,可以很簡單的在 server 上面寫這樣一個 php script 來 upload 一個檔案:
<?
$fn = $_FILES[test][name];
$temp = $_FILES[test][tmp_name];
$path = "/var/www/html/dl/a/";
copy($temp, $path.$fn);
?>


接著只要在網頁上建立這樣的標籤內容:
<form action="/dl/up.php" method="post" enctype="multipart/form-data">
<input type="file" name="test">
<input type="submit" value="submit">
</form>


一個簡單的 http file upload 模型就建起來了。

不過這樣的模式只適合有使用瀏覽器,有 GUI 的介面的使用者。今天如果是利用 wget 在 console 底下定時上傳檔案備份之類的行為,這樣就不適用 web 開上傳。

我們查看 wget 的 manpage 裡,可以查得到 --post-file 這個給 file upload 的參數,在實做上面,只需要加上 mime-type 的標頭就可以讓 server page 知道今天是要做 file upload 的行為,這個指令會像是:
wget http://192.168.1.128/dl/up.php --post-file=post.data --header="Content-Type: multipart/form-data; boundary=FILEUPLOAD" -O /dev/null --http-user=admin --http-password=test1234


post.data 在 manpage 裡面有說明到,其實 post data 就是 cgi post 處理時從 stdin 讀進來的資料,就長這樣:


--FILEUPLOAD
Content-Disposition: form-data; name="test"; filename="1.txt"
Content-Type: text/plain

12345

--FILEUPLOAD--


其中 boundry 的部份在 wget 送標頭的時候也要加上,這樣 server page 才會知道從哪邊開始讀。

2009/01/16

[微軟] 定時關機

這邊 有一篇文章可以參考一下。

簡單會用的幾個功能:
(凌晨)一點關機
at 1:00 shutdown -s
一個小時後關機
shutdown -s -t 3600
取消自動關機
shutdown -a

應該蠻簡單的,連我們家小猴子都會用說~~

2009/01/06

[Programming] sed 替換跨行內容

這篇蠻胡混的,因為主要的內容可以參考:用sed替换跨行内容 這篇文章。
不過還是讓我做一個註記,如何用 sed 清除 code 裡面像 /* tst */ 的註解呢?
sed -i ":begin; { /\*\//! { $! { N; b begin }; }; s/\/\*.*\*\///; };" $FILE
sed -i '/^$/d' $FILE


Shell 用得好,寫程式沒煩惱。

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...