pupuliao的部落格

寫教學的最大目的是教會未來的自己

驗證碼的製作

本次教學 要感謝許多人的幫助

感謝 kidpen 及其作者 提供了最原始的code

感謝 orinx.chen 學弟教我如何使用這個code

感謝 http://jax-work-archive.blogspot.com/2007/11/php.html 提供完整的教學

感謝 魏藥 同學 一直被我叫出來解決GD 程式庫的問題(沒辦法 這台server 他負責XD)

 

另外 kipen 是使用 MIT 授權

而本人是使用 GPL v3授權

使用本code 的網友們  請保留我們的版權宣告,並請遵守 GPLv3 的規範,謝謝

 

驗證碼是使用 PHP 自動生成一塊圖片,這部分會使用到GD 程式庫,請自行安裝

http://www.arthurtoday.com/2010/03/ubuntu-php-gd-library.html

 

本次我製作的 驗證碼 是 顯示 中文數字,要求使用者輸入 阿拉伯數字的雙重驗證

 


 *
 * This file incorporates work covered by the following copyright and
 * permission notice:
 *
 *Copyright (c) 2011 Chen-Heng Chang
 *
 *Permission is hereby granted, free of charge, to any person obtaining a copy
 *of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 * Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 *The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 *
 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 *LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 *TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
	/*
	這是一個驗證碼產生器
	*/
	session_start(); //開啟 seesion 功能
	$long=5;//驗證碼長度
	mt_srand((double)microtime()*1000000);
	$code = '';
	$possible = '0123456789'; //放入阿拉伯數字
	$possibleLen=strlen($possible);
	$chinese=array('零','壹','貳','參','肆','伍','陸','柒','捌','玖');//相對應的 中文數字
	$show='';
	for($i=0; $i< $long; $i++){//產生驗證碼
		$code .=$possible[rand(0,$possibleLen-1)];
	}
	$_SESSION['code'] = $code; //存入資料,之後要使用 就用這個SESSION
	for($i=0; $i< $long; $i++)//轉換成中文字
	{
		$show.=$chinese[$code[$i]];
	}
	$width=$long * 20+20;
	$height=30;
	$image = imagecreate($width, $height) or die('GD image creating error.');//產生一塊圖
	$background_color = imagecolorallocate($image, 239, 239, 239); //設定底色
	$text_color = imagecolorallocate($image, 0, 169, 225);//設定文字顏色
	$noise_color = imagecolorallocate($image, 200, 200, 200);//設定雜訊顏色
	imagefill($image,0,0,$background_color);
	imagettftext($image,15,0,10,20,$text_color,'/home/pupuliao/web/code/kaiu.ttf',$show);
	/*
imagettftext (int im, int size, int angle, int x, int y, int col, string fontfile, string text)
im 圖片物件 size 文字大小 angle 0度將會由左到右讀取文字,而更高的值表示逆時鐘旋轉
x y 文字起始座標 col 顏色物件 fontfile 字形路徑,為主機實體目錄的絕對路徑,
可自行設定想要的字型 text 寫入的文字字串
*/
	for ($i=0; $i<($width*$height)/250; $i++) {//產生雜訊
		imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
	}
	  header("Content-Disposition:filename=image_code.png");
	header("Content-type:image/png");
	imagepng($image);
	imagedestroy($image);
	exit;
?>

 

 

這隻程式碼有一點要注意的地方在 字體

  imagettftext($image,15,0,10,20,$text_color,'/home/pupuliao/web/code/kaiu.ttf',$show);

這部分 要引用一個可以使用中文的字體,本次範例我是使用電腦中的 標楷體

 

這是實際產生出來的結果

 

如果驗證碼 的php 檔案名稱為 image.php

那我在 表單中 只需要加入

<input type="text" name="code" /><img src="image.php">

即可

 

在後端只需要檢查 $_SESSION[‘code’] 和送出的值是否相同即可

 

DEMO

Post to Twitter Post to Plurk Post to Facebook Send Gmail

wordPress網站完整備份(Drupal也OK)

前陣子 寫了幾篇 關於 備份的教學

這次 做了一個 可以一鍵快速備份的小script

同時備份 檔案 跟SQL資料

 

不過這種方法 只適合 會使用 ssh 的 人,如果你是租用空間,沒有這種權限,那就只好說聲抱歉了

基本上 這個方法 應該各種架站軟體都通吃

 

  1. 首先 要先準備 MYSQL 的帳號、密碼、資料庫名稱  這三個 我們平常很難會去碰到,恩….我自己也忘了
    你可以去打開你的 網站檔案去找wordpress 的位置在 wp-config.php
    恩….檔案內有中文註解,應該就不用貼文字了
    看不懂的 請再迴響問我

  2. ssh 登入你的server

  3. mkdir <備份資料夾名稱>

  4. vim backUp.sh    //開始撰寫 備份文件

  5. 在文章內 貼上下列文字 並且填入[ XX] 內的資料

    #!/bin/sh
    echo 'back up start…'
    mysqldump -u[MYSQL帳號] -p[MYSQL密碼] [資料庫名稱] > [備份位置 請寫絕對位置]/[備份檔案名稱].sql
    tar zcf [備份位置]/[備份檔案名稱].tar.gz [網站位置]
    echo 'done..'

  6. sh backUp.sh 測試,沒有跑出任何error 就成功了

 

說明

mysqldump -u[MYSQL帳號] -p[MYSQL密碼] [資料庫名稱] > [備份位置 請寫絕對位置]/[備份檔案名稱].sql

這一行 是輸出整個SQL 資料庫,包含指令,日後要回復,用這個檔案用 phpMyAdimn 也可以用,要注意 -u後面加帳號不要空白,密碼的也是

tar zcf [備份位置]/[備份檔案名稱].taz.gz [網站位置]

這個則是簡單的 壓縮指令

把整個資料夾壓縮,這個壓縮格式 在windos 下可以開啟,不過最好用英文存比較不會有編碼問題

碰到編碼問題 建議用7zip開啟

 

如果想要讓他定期備份的話

就用crontab 吧,這個每個OS 都不太一樣,我暫時也沒有權限,就不弄了。

 

如果想要每次備份的檔名都不一樣的話

可以在echo 至之後就一行加入

t=$(date +%Y%m%d)

然後再檔名的地方 改成 $t 就可以了

 

 

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

投票系統的三兩事

最近因為某些案子 做了一個簡易的投票系統

恩~~

技術上來說 要做到投票功能十分簡單,就算不使用外面網站提供的,也可以輕鬆完成。

畢竟技術上來說 只需要兩個頁面就可以完成(如果要增加 驗證碼 再多一個吧~)

但是……最恐怖的是什麼?

就是 有心人士的bot 攻擊……

 

那個網站 在開放投票後…一天內就遭到 bot 攻擊…在搶下一萬多張票後 系統就bye了~~

memory被吃光光……除了重開機 無解…

為了這個 我們增加了防火牆、放棄了apache 、增加了驗證碼功能、IP檢察功能

為此 我連續好幾天 熬夜和bot 拼命….也找了朋友幫忙…

然而 投票的最後一天…..BOT 大軍又來了!!!!

當然 驗證碼防禦下,我成功擋下了大多數的攻擊

不過 拖垮 硬體 還是有發生(應該是 驗證碼所消耗的空間,因為要自動生圖出來)

 

最痛苦的其實是…..

因為還是有廠商 票數異常增高

也的確有灌票嫌疑

但是……該做的都做了 不然你想怎樣(翻桌)

你能破解驗證碼,你能一直換IP….

那我還真的沒轍

 

這都不是重點

某位大頭抗議,要我們解決 不然就去政風處抗議…..

下次 改用 身分證認證好了,還是要 電話認證?

真她ㄋㄋ的

 

紀錄上 我至少擋下了兩萬張票的攻擊

Post to Twitter Post to Plurk Post to Facebook Send Gmail

在wordPress中放php

最近我又因為一些案子,研究如何在 wordpress中放php code

所以找了一下 網路上的文章

就開始嘗試使用

 

外掛名稱:shortcode-exec-php

 

1. 安裝好後 在工具的地方看到同名的選項

 

2.進去後會看到設定選單…..基本上我都沒有用過,應該不難懂,前四個是說 哪些地方可以使用php

3. 再來就是寫code 的地方,hello_world是名稱,寫好後 可以test 測試 和 save 存檔,在要使用的地方 就把[名稱]放進去,就可以了

經過測試,不同組的code 參數不能共用

可以用include

輸出都用echo

 

 

另外 聲明

用這種方式有漏洞問題,請自行評估

Post to Twitter Post to Plurk Post to Facebook Send Gmail

檔案備分的好物~~lftp的 mirror功能

最近因為案子關係,在研究如何讓網站伺服器的資料和另一台備援機同步化

達到 在網站備攻擊癱瘓的時候可以馬上重啟

首先 我這部份的同步化,並沒有達到 零時差同步,指要求每週一次就可以了

 

這次 我使用的是lftp 這是FTP的 客戶端 軟體 我們要使用的是他的 mirror 指令

以下教學參考自

http://superstanwu.blog.ithome.com.tw/post/775/29721

http://www.thelinuxblog.com/linux-man-pages/1/lftp

 

1. 安裝lftp

Debain、UBuntu:#sudo  apt-get  install  lftp

Fedora、CentOS:#yum install lftp

2. 確認語系

#locale

3.用vim 或是其他文字編輯器 開啟backup.lftp

open [主機位置]

user [帳號] [密碼]

cd /Hosts/stanserv.com/i (在 FTP上 面的路徑)

mirror -R –only-newer –only-missing –parallel=2 [要備份的本地端目錄]

(想要多個資料夾 就在這邊增加)

exit

4. 執行

#lftp -f backup.lftp

5.完成 之後你可以用crontab -e 設定排程

 

參數說明 (不負責翻譯,有任何問題,請參考上面第二個參考網址)

參數 更詳細的參數 說明
-c –continue 續傳
-e –delete 遠端沒有的就刪除
  –delete-first 在傳輸新的前,先把舊的刪除
-s –allow-suid 根據遠端設定suid
  –allow-chown 設定擋案的所有者和群組
  –ignore-time 比對時忽略時間
  –ignore-size 比對時忽略大小
  –only-missing 沒有的檔案就下載
-n –only-newer 下載較新的
-r –no-recursion 忽略子目錄
  –no-symlinks 不創造symbolic links
-p –no-perms 不設定權限
  –no-umask 不使用 umask
-R –revers 反轉 ,就是指 本地和遠端的身分反轉,下載變上傳,備分到遠端
-L –defference 下載 symbolic links
-N –newer-then=[SPEC] 下載比指定時間新的檔案
  –order-then=[SPEC] 下載比指定時間舊的檔案
  –size-range=[RANGE] 下載在指定檔案大小範圍內的檔案
-P –parrel=[N] N條線程
  –use-pget[-n=N] 用pget來傳輸每個檔案
  –loop 重複 直到找到改變

後面看不懂 就不翻譯了

Post to Twitter Post to Plurk Post to Facebook Send Gmail

Fedora軟體安裝指令yum

最近又摸了一套Linux陣營的OS : Fedora   (每個老師用的OS 都不太一樣阿XD)

 

因為要安裝新的軟體

所以就開始摸索Fedora的安裝指令

說實在的……為何每套Linux在安裝軟體的方式都不太一樣呢?

不管了 進入正題

 

參考網址 :http://jerome.anyday.com.tw/archives/47   http://www.cnitblog.com/guopingleee/archive/2009/11/24/62791.html

 

Fedora的 安裝指應是 yum [參數] [軟體名稱]

yum update
更新套件, ex: yum update httpd,如果只有 yum update ,會更新所有已經安裝的套件。

yum search
搜尋套件,ex: yum search httpd*,會搜尋所有跟 httpd 有關的套件。

yum install
安裝套件,這裡的套件安裝,會考慮到相依性的問題。 ex: yum install httpd 

yum remove
移除套件,這裡的套件移除,也會考慮到相依性的問題。 ex: yum remove httpd

yum clean
清除安裝時下載的暫存套件原始檔案,位於 /var/cache/yum,因為這裡可以清除的項目很多,我最常用的是 yum clean all ,一次給他清掉 :p

yum list
列出套件名稱,用法常用有分以下幾種:

yum list updates
列出所有可以更新的套件

yum list installed
列出所有已安裝的套件

 

依照測試使用的經驗

這個指令十分方便

不論是軟體 還是 plug-in都可以輕鬆安裝

如果名稱大小寫打錯,還會告訴你

另外在指令後面放軟體名稱時,還可以一次放多個 讓他一起跑

十分方便

Post to Twitter Post to Plurk Post to Facebook Send Gmail

Ubuntu的壓縮指令測試與教學

本篇文章參考資料

http://linux.vbird.org/linux_basic/0240tarcompress.php\

http://blog.bs2.to/post/EdwardLee/4997

壓縮指令的部分 餐搞第一個鳥歌教學,但是我以理解過後較白化的說明方式,想要看詳細的自己點進去吧

 

最近剛好接了幾個跟備份有關的cass

所以就開始研究,一些linux 相關的壓縮指令,和其中的差別

 

閱讀全文

Post to Twitter Post to Plurk Post to Facebook Send Gmail

WordPress訪客統計-StatPress(中文化)

本篇文章 參考http://steachs.com/archives/194

 

架設一個網站的目的除了替自己保留紀錄外,就是與他人分享,而要如何知道有多少人看了呢?

就是要做 流量的統計,流量統計最簡單 最原始的方式就是用 訪客計數器 這種東西

只是這種東西只有簡單的數字,無法給你更多訊息

今天教的這個則是相當厲害的 流量統計,他會分析每一位訪客 的IP、從哪個頁面來、看了那些頁面、他搜尋那些關鍵字、哪一套作業系統、哪個瀏覽器 都一清二楚(基本上他只是分析 apache的 log 然後寫入SQL中)

這樣你就可以知道 你哪些文章受歡迎、哪些文章…..

OK 廢話不多說

plug-in 名稱 statPtess 你可以用wordpress 提供的線上安裝功能安裝,也可以用我下面的載點安裝

檔案網址

這是經過我翻譯後 外加 修正一些不方便的地方

安裝方式:

1.檔案解壓縮後,整個資料夾上傳至wp-content / plugins 下

2.進入後台->外掛 安裝他

詳細使用方式 就參考我提供的參考網址吧!

 

PS.本外掛因為會記錄每一筆資料,所以SQL 需求較大,請在設定中自己選擇資料保留的時間場短…..

Post to Twitter Post to Plurk Post to Facebook Send Gmail

欣亞出爾反爾退款龜速

本篇文章 是我網購的經驗

一切事情 純屬事實 絕無偽造

 

前幾天(11/29),我在 欣亞 網站上買了一個展示機的螢幕

使用ATM轉帳

為了 能盡早拿到貨,我在下單後兩小時內付款完成

隔天(11/30)

我收到了一通電話,那螢幕~~~壞了不能出貨

問我是要 退款 還是 換另一個

經過思考 我選擇退款

並且在當晚 通知客服 並留下資料

 

客服說明天會處理

恩~~~隔天(12/1) 我在去在網路上留言詢問進度

客服來信回覆說 明天(12/2)退款

 

就在今天(12/2) 我收到了一封簡訊…..我要等到12/5 才能收到….

幹~~~~

轉個帳很難嗎?

不管是臨櫃轉帳還是atm轉帳,都不用10分鐘

欣亞 你竟然可以一拖再拖

因此 十分不爽的我就打電話去客服

對方竟然跟我說 照慣例 他們只會在 周一 周二做退款作業

然後 承辦人員下班了,無法替我詢問

我收到一張下班卡了………………

我嚴重懷疑 承辦人員是在下班前傳簡訊告知的…..

 

阿幹~~如果 只有每周一二才會退款 可以說阿~~ 如果沒錢退 可以說阿~~

你們這種一拖再拖的回覆方式

我真不知道12/5 是否真的能拿到錢

還是 在一通 12/10 會退款的通知

Post to Twitter Post to Plurk Post to Facebook Send Gmail

Copyright © 2020. All Rights Reserved.

歡迎光臨
初音