不過,eregi()是PHP ereg()函數的忽略大小寫的版本。二者與preg_match的功能類似,但函數返回的是一個布爾值,表明匹配成功與否。需要說明的是,POSIX擴展庫函數的第一個參數接受的是正則表達式字符串,即不需要使用分界符。例如,代碼6.2是一個關於文件名安全檢驗的方法。
代碼6.2 文件名的安全檢驗
- < ?php
- $username = $_SERVER['REMOTE_USER'];
- $filename = $_GET['file'];
- //對文件名進行過濾,以保證系統安全
- if (!ereg('^[^./][^/]*$', $userfile))
- {
- die('這不是一個非法的文件名!');
- }
- //對用戶名進行過濾
- if (!ereg('^[^./][^/]*$', $username))
- {
- die('這不是一個無效的用戶名');
- }
- //通過安全過濾,拼合文件路徑
- $thefile = "/home/$username/$filename";
- ?>
通常情況下,使用與Perl兼容的正則表達式匹配函數perg_match(),將比使用PHP ereg()函數或eregi()的速度更快。如果只是查找一個字符串中是否包含某個子字符串,建議使用strstr()或strpos()函數。