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,否则便会遇上便会错误,在 …