Category: Python / Perl
PHP 鎖定檔案 可以用 flock 函式, 在 Perl 也差不多, 只要使用 Fcntl 模組就可以:
上一篇文章 Apache Log Rotate 設定 講述了 Apache 輪替記錄檔的方法, 但如果舊日誌一直不理的話, 同樣佔據碟碟空間, 因為 Apache 不會刪除舊記錄檔, 而且將新記錄寫入新建立的檔案, 以下 Perl Script 可以自動刪除舊記錄檔, 只要設定好記錄檔目錄, 名稱後, 放到 crontab 執行便可以了。 這個 Perl Script 會掃瞄記錄檔目錄, 並查看檔案名稱為是 access …
如果發現伺服器有大量存取記錄, 要檢查是否 DDOS 攻擊, 可以開啟記錄檔檢查, 但資料量大的話, 要人手檢查也很困難, 所以我寫了這個簡單的 Perl Script, 用作檢查記錄檔內出現次數最多的 IP, 鎖定出現頻率最高的 IP 作檢查會容易得多。 編寫時想到有多種記錄檔也有此需要, 只要記錄檔是一行一個記錄, 而每行只有一個 IP 出現便可以用, 已經試過 apache access log 及 error log, /var/log/secure, /var/log/vsftpd.log …
Perl 要對陣列進行排序, 可以用內建函式 sort 來做, 例如: 以上第 7 行用了 sort 對 @words 進行排序, 輸出結果會是: abc def mmm xyz 但這個 sort 函式是用字串排序的,如果陣列的值是數值,sort 也會根據字串的方式排序,即 123 會排在 23 前面,因為 “1” 是排在 “2” …
現在很多地方都用上資料庫系統, 有一些是檢查用戶名稱及密碼的登入系統, 但如果沒有對用戶輸入進行過濾, 會有很多潛在危除, 例如以下程式碼: my $sth = $dbh->prepare(“select * from user where user=’$user’ and pass=’$pass'”); 以上這句 SQL 會檢索 user 資料表, 找出 user 及 pass 與用戶輸入匹配的紀錄, 有回傳便可以登入, 沒有回傳便登入失敗, 這個很容易理解。但如果用戶的輸入包括了一些特定的 …
在 Perl Scripts 裡面除了可以用系統指令進行檔案處理外, 也可以用 Perl 直接實現, 做法是這樣: 複製檔案 Perl 沒有內建函式可以複製檔案, 但可以透過載入 File::Copy 實現: 上面的語句會將 $old_file 複製到 $new_file. 重新命名檔案 雖然 Perl 內建有 rename 函式可以用, 但它在某些檔案系統不能運作, 所以用 File::Copy 實現會更好: move …
Perl 有很多實用的的檔案運算子, 要檢查檔案的最後存取及修改時間, 可以用 -M 及 -A 實現,在程式內可以便可以找出指定時間沒有被取存或修改的檔案, 以下是簡單的例子檢查檔案是否在 30 日內沒有修改過: 而除了以上兩個外, Perl 還有很多實用的檔案運算子: -e 檔案存在 -z 檔案是空檔案 (大小為 0) -s 檔案不是空檔案 (回值檔案大小) -f 檔案是普通文件 -d 檔案是目錄 -l 檔案是連結 …
在 Perl 要連接資料庫可以使用 DBI module, DBI module 支援多種資料庫系統, 例如 DB2, MS SQL Server, Oracle, SQLite, PostgreSQL, Firebird 及 MySQL。只要在程式宣告使用 DBI module, 用 Perl 連接 MySQL 便會跟 PHP 一樣簡單, 以下是使用例子:
在十多年前讀書的時候學 C/C++, 後來因工作關係開始學習 PHP, 學習了 PHP 兩年左右開始學 Perl, 主要是寫一些系統管理的工具。其他的程式語沒有認真學, 要用再找資料。直到目前為止, 當要寫一些網頁應用程式, 我會用 PHP, 而一些 Linux 系統管理工具會用 Perl。 近年用 Perl 的人越來越少, 我覺得主要原因是很多原本用 Perl 的系統管理員轉用 Python, 因為 Python 在 OOP 方面做得比 …
在安裝 CGI 程式時如果設定錯誤,便會看到 “500 Internal Server Error” 訊息,一般常見的錯誤可以用以下方法解決: 1. CGI 程式的權限需要設定為 711 或 755。 2. 程式的最開端有一行類似 #!/usr/bin/perl,其中 #! 是必需要的,然後確定 /usr/bin/perl 是正確的路徑,另外這行前不可以有空格或空行。 3. 如果程式本身會讀寫其他檔案,要檢查存取檔案的絕對路徑或相對路徑是否正確,以及檔案是否有權限存取。 4. 根據 HTTP 栛定,在輸出內容前要先輸出 HTTP Headers,否則便會遇上便會錯誤,在 …