2025-12-04

NaviServer: CGI and ADPs

NaviServer 本身支援 ASP/PHP 類似的寫法,可以內嵌 Tcl 程式碼到網頁中, 稱為 NaviServer Dynamic Pages (ADPs),其副檔名為 adp,可以參考下列的網頁:
NaviServer ADP Development

主要的語法有以下三種,第一種為使用 script 標籤:

<script language="tcl" runat="server" stream="on">
...
</script>

第二種則是短標籤:

<% ... %>

第三種則是印出變數的短標籤:

<%= ... %>

NaviServer 已經內建 nscgi 模組。檢查 nsd-config.tcl(或者是你使用的設定檔),確定有載入模組:

ns_section ns/server/default/modules {
    if {$nscpport ne ""} {ns_param nscp nscp}
    ns_param    nslog               nslog
    ns_param    nscgi               nscgi
    ns_param    nsperm              nsperm
    ns_param    revproxy            tcl
}

如果想要使用以前使用 Tcl 寫的 CGI 程式、或者是要使用 NaviServer 練習撰寫 CGI 程式, 只要注意 NaviServer cgi-bin 設定的位置正確的放置檔案,以及正確的加入 Tcl interpreter 的設定即可。 接下來修改 nsd-config.tcl:

ns_section ns/server/default/module/nscgi {
    ns_param    map                 "GET  /cgi-bin $home/cgi-bin"
    ns_param    map                 "POST /cgi-bin $home/cgi-bin"
    ns_param    interps              CGIinterps
    #ns_param   allowstaticresources true    ;# default false; serve static resources from cgi directories
}
    
ns_section ns/interps/CGIinterps {
    ns_param    .pl                 "/usr/bin/perl"
    ns_param    .tcl                "/usr/bin/tclsh"
    ns_param    .sh                 "/bin/bash"
}

PHP 目前在網頁伺服器主要有三種執行的方式,使用 CGI,使用 FastCGI 以及內嵌到網頁伺服器裡。 如果使用 PHP 8.x,php cgi 程式 (php-cgi) 在 openSUSE Tumbleweed 的套件為 php8-fastcgi。 如果想透過 NaviServer 使用 CGI 的方式執行 PHP 是可行的,只要修改 nsd-config.tcl 加入 PHP interpreter 的設定:

ns_section ns/interps/CGIinterps {
    ns_param    .pl                 "/usr/bin/perl"
    ns_param    .php                "/usr/bin/php-cgi"
    ns_param    .tcl                "/usr/bin/tclsh"
    ns_param    .sh                 "/bin/bash"
}

然後寫一個測試程式:

<?php

phpinfo();

?>

沒有留言: