﻿ cFos Personal Net 文件 - 指令碼參考 - cFos Software


cFos Personal Net 支援透過 Common Gateway Interface (CGI) 或透過內建的 JavaScript 腳本（或任何支援 Windows Script Host 的語言，例如 ActivePerl、ActivePython 等等）執行的腳本。

CGI 指定某些環境變數，其中包含有關目前 HTTP 請求的資訊。cFos PNet 在執行指令碼之前設定這些變數：


_CFPNet_AUTHNAMEValue of the .htaccess AuthName directive.

_CFPNet_REQUIREValue of the .htaccess Require directive.

_CFPNet_AUTHUSERFILEValue of the .htaccess AuthUserFile directive

_CFPNet_FILEFile part of the requested URL. Allows easy file operations.


_CFPNet_RESPONSE_CODEHTTP response code.





_CFPNet_PRIVATE_DIRFull path to the cFos PNet private folder.

這些變數都能被 CGI 指令碼或 JavaScript 存取（在 JavaScript 中，可使用 cFos PNet 網站伺服器物件的 environment_var(name) 方法來取回這些環境變數）。

這邊指的「JavaScript」實際上指的是 Windows Scripting Host 當中的 JavaScript 或其他實作的語言。

與一般 HTTP 請求一樣，所有的主機端指令碼，像是 JavaScript，會以目前使用者模擬在 .htaccess 中 User 指令指定的使用者身分執行。我們強烈建議您建立一個權限受限的使用者，讓 cFos PNet 在執行時模擬該使用者執行程式碼。
這樣一來，Windows 的使用者權限能夠提供額外安全性，以避免 PNet 和指令碼中的 Bug 造成問題。

CGI 指令碼安全性

對於 CGI 指令碼執行 cFos PNet 必須建立另一個處理程序。在另一個使用者之下建立一個處理程序，您需要啟動伺服器作為提升為管理員或有限的使用者。
在這兩種情況下，這些使用者中，不一定啟動該處理程序的使用者需要 2 個權限。

到管理工具 -> 本機安全性原則 -> 本機原則 -> 指派使用者權限，並分配執行伺服器的使用者下列權限：

  • 調整處理程序的記憶體配額
  • 取代處理程序級別的權杖

如果您不使用在.htaccess 檔案中的使用者指令，建立具有相同的權限作為伺服器處理程序的子處理程序。由於 cFos PNet 必須作為管理員啟動，您的指令碼將作為管理員執行。因此每個伺服器的設定，您應該檢查哪個使用者根據您的指令碼執行的，例如，試圖存取只有管理員存取權限的檔案。


JavaScript 已載入並分析，無論何時第一次執行指令碼，自伺服器啟動以來。實際執行指令碼 cFos PNet 呼叫的指令碼功能 main()。 雖然指令碼是經過 cFos PNet 分析檢查，如果該指令碼使用全域變數或函數 (外部 main)。如果偵測到這種全域物件，該指令碼標記為 "singleton"，該值指示它具有全域狀態。

如果指令碼具有全域狀態，同時僅能執行一個執行緒。如果全域狀態的指令碼執行的過程中執行此指令碼的另一個 HTTP 請求到達時，必須等到前一個請求完成才能處理新的請求。所有其他指令碼可能會產生多次實例化，並由多個執行緒同時執行。

所以沒有全域的指令碼可以使今天的多核處理器的完整使用，除非是一致的全域狀態所需要。另一方面，全域狀態是持續性跨不同的 HTTP 請求。

這意味著在全域範圍內的定期 JavaScript 變數可以保持狀態資訊存取不同 HTTP 請求，像是計數器，工作階段 Cookie，驗證碼解決方案。一種儲存全域狀態的不同方法是使用雜湊清單 (見下文)。從而，您的指令碼可以在 "database" 中執行並行維護全域狀態。


cFos PNet 以 Windows Scripting Host 執行 JavaScript，支援以下的全域物件：

exit()Exit the current script.


exportExported object; for common.js module support


The webserver object has the following members:










blocklist: List of blocked files, read_only
audio_input_devices: List of available audio devices, read_only
video_input_devices: List if available video devices, read_only


The mutex has the following methods:
acquire() (re-)acquire the mutex
release() release the mutex




decode_password(<p>)The reverse of encode_password.





bytearray2str(<a>)Reverse of str2bytearray.












version()Returns a cFos PNet version string.















The image object has the following properties/methods:
widthReturns the width of the image in pixels.

heightReturns the height of the image in pixels.





The sendmail object has the following properties/methods:






smtp_server = address of the SMTP server
smtp_username = your user name with the SMTP server
smtp_password = your password with the SMTP server

The file object has the following properties/methods:
<flags> is a binary OR of the usual values:
O_BINARY 0x8000
O_TEXT 0x4000
O_EXCL 0x400
O_TRUNC 0x200
O_CREAT 0x100
O_RANDOM 0x0010
O_RDWR 0x2

<share> is a binary OR of the usual values:

close()Close the file.




length()Return file length in bytes.

trunc()Trunc the file at current position.


The hash_list object has the following properties/methods:






size()Returns the number of elements is the list.


log_prefixProperty, string which is prepended before each log entry.





A hash_list_iterator has the following properties/methods:







The request_info has the following properties/methods:
urlProperty, the URL of the current HTTP request.

query_stringProperty, the query string.

request_methodProperty, the request method.



我們將提供測試用的指令碼，做為 cFos PNet 之外的另一個下載。您可以將其解壓縮到公用資料夾中的「selftest」資料夾，並執行它。測試用的程式碼還可作為 cFos PNet 指令碼物件、方法和屬性的範例。

cFos Personal Net 文件