我想分享我將 Apache 2.4 翻譯成 PCRE2 的經驗,因為即使 PHP 7 已經支援 PCRE2 庫很長時間了,但開源 Apache 軟體基金會仍然不支援。
當然,我現在可能領先於具有 PCRE2 支援的 Apache 版本,因為我使用的是 Apache git 的源代碼,它告訴我們在下一個版本中已經可以支援 PCRE2,但對於那些已經希望在Apache 2,誰不想等待發布我分享的方法之一。
本文假設您正在從原始程式碼、撰寫本文時的軟體和版本清單中收集所有必要的軟體:
PCRE2-10.33
4月1.7.0
APR-util 1.6.1
阿帕契 httpd 2.4.41
第一步:建置並編譯 PCRE2
讓我們跳過從官方來源下載來源的步驟,因為這太明顯了,因此您已經解壓縮了存檔,轉到包含 PCRE2 來源的資料夾,然後執行以下命令以支援 UTF:
./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode
如果您不想使用標準位置來安裝庫,請在前綴中指定您的路徑:
--prefix=/ваш/путь/до библиотеки
否則,您將收集沒有前綴的資料。
其餘命令表明包含對 8 位元、16 位元和 32 位元 PCRE 程式碼區塊的支持,在此版本中使用它們執行彙編。
當然,我們使用順序執行命令來編譯這個東西:
make
make install
步驟二:將PCRE2庫連接到APR
由於 Apache 使用 APR 編譯原始碼,因此我們需要將函式庫包含在 APR 本身中,否則 Apache 原始碼中可能會出現有關未知函數的錯誤,因為我們將使用新的 PCRE2 函數。
讓我們省略從官方來源下載原始碼的時刻,因為這太明顯了,因此您解壓縮了存檔並執行了 APR 配置:
./configure --prefix=/etc/webserver/apr-170
當然,如果您不想使用標準位置來安裝庫,或者不指定,則可以在前綴中指明您的路徑:
--prefix=/ваш/путь/до библиотеки
配置完成後,進入目錄:/etc/webserver/srcsrv/apr-1.7.0/build
或:/您的/路徑/到庫/構建
在此目錄中找到 apr_rules.mk 文件,並在末尾添加以下行:
EXTRA_LIBS=-lrt -lcrypt -lpthread -ldl
連接庫:
-lpcre2-8 -L/ваш/путь/до библиотеки pcre2/lib
儲存並前往 APR 來源的根目錄:/your/path/to the library。
讓我們編譯修改後的 APR:
make
make install
如果一切正常且編譯沒有錯誤,請繼續下一步。
第三步:從原始碼為 Apache 建構 APR-util
您已經從來源下載了該庫,使用 APR-util 進入解壓縮後的存檔的根資料夾,然後依序輸入以下命令:
./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/ваш/путь/до библиотеки apr
make
make install
當然,如果您不想使用標準位置來安裝庫,或者不指定,則可以在前綴中指明您的路徑:
--prefix=/ваш/путь/до библиотеки
我們也在這裡連接我們的年利率:
--with-apr=/ваш/путь/до библиотеки apr
第四步:從 Apache git 下載原始碼以支援 PCRE2
重要提示:我們從最新版本的 git 下載原始碼。
我們需要下載兩個來源例如ap_regex.h和util_pcre.c,連結如下:
現在前往 Apache httpd 來源目錄並使用以下命令建置 Apache:
./configure --prefix=/etc/webserver/apache-2441 --with-apr=/ваш/путь/до библиотеки apr --with-apr-util=/ваш/путь/до библиотеки apr-util --with-pcre=/ваш/путь/до библиотеки pcre2/bin/pcre2-config
當然,如果您不想使用標準位置來安裝庫,或者不指定,則可以在前綴中指明您的路徑:
--prefix=/ваш/путь/до Apache httpd
您也可以自行指定用於建置 Apache 的其他命令,我的意思是用於啟用或停用模組和庫的命令。
接下來我們進入 Apache httpd 來源目錄,我有這個:
/etc/webserver/srcsrv/httpd-2.4.41
你自然就進入你的目錄,在目錄中替換:
/etc/webserver/srcsrv/httpd-2.4.41/include
我們從 Apache git 下載的檔案 ap_regex.h。
我們也進入目錄:
/etc/webserver/srcsrv/httpd-2.4.41/server
我們將檔案 util_pcre.c 替換為從 Apache git 下載的文件
現在剩下的就是在 Apache 本身中加入 PCRE2 連接,您需要找到檔案 ap_config_auto.h,它位於目錄中:
/etc/webserver/srcsrv/httpd-2.4.41/include
在此文件的最開頭插入以下行:
/* Load PCRE2 */
#define HAVE_PCRE2 1
好了,現在我們已經準備好迎接編譯 Apache httpd 並支援 PCRE2 的真正時刻了。
讓我們進入 Apache httpd 來源目錄並透過順序執行命令來編譯它:
make
make install
現在,如果一切順利且沒有錯誤,那麼您將已經組裝並編譯了支援 PCRE2 的 Apache httpd,這意味著使用 PCRE 正規表示式的 Apache 模組發生了積極的變化,其中之一就是模組重寫。
綜上所述,這種方法使得在Apache軟體基金會正式發布之前使用PCRE2成為可能,希望早日發布支援PCRE2的版本。
另外,在測試標準.htaccess時,沒有出現任何錯誤,如果有人有任何錯誤,請寫在評論中。
聚苯乙烯
我對我的堆疊使用兩個不同版本的 PCRE 的情況感到有點困惑,我決定修復它。
來源: www.habr.com