aardio + PHP 可視化快速開發獨立 EXE 桌面程式
aardio 支援與很多程式語言混合開發。
網路上大家分享的 aardio + Python 混合開發的文章很多,aardio + PHP 的文章卻很少。
其實 aardio 與 PHP 混合開發是真的簡單 !
▶ CGI 調用 PHP
aardio 雖然很小,但自帶嵌入式 HTTP 伺服器,通過 CGI 調用 PHP 也非常簡單。
這種方式就跟平時用 PHP 寫網站基本一樣了,而且兼容所有 PHP 版本。下面我們直接看 aardio 程式碼示例:
import win.ui; var winform = win.form(text="PHP_CGI 伺服器"); import web.form; var wb = web.form( winform); //啟動 PHP CGI 服務端 import process.php; //獲取 PHP 頁面網址 var url = process.php("/res/test.php"); //調用瀏覽器組件顯示網頁 wb.go(url); winform.show(); win.loopMessage();
是不是非常簡單?
這就是一個完整的 aardio + PHP 程式。
上面短短几句程式碼包含了:
圖形介面、瀏覽器組件、PHP 服務端、HTTP 伺服器。
aardio 把所有需要操心的事都默默地做好了,例如 HTTP 伺服器會自動分配空閑埠,不同程式不會相互衝突。在需要時會自動啟動 HTTP 服務端執行緒,在介面執行緒退出時 —— 自動退出 HTTP 服務端,全部都自動處理好。
process.php 會自動搜索 php-cgi.exe,搜索順序如下:
1、\php\php-cgi.exe
2、環境變數 PHP_CGI_EXE_PATH 指定的位置
3、path 環境變數指定的目錄下查找 php-cgi.exe
4、自註冊表搜索
5、C:\Program Files\PHP 目錄下搜索
6、ardio 中 PHP 擴展庫自帶的 ~\lib\php\.dll\php-cgi.exe
也可以用 process.php.cgiPath 明確指定路徑,例如:
process.php.cgiPath = "~\lib\php\.dll\php-cgi.exe"
至於下面的程式碼會返回訪問 “/res/test.php” 的 HTTP 地址:
var url = process.php("/res/test.php");
支援內嵌資源目錄下的文件路徑:
如果軟體自帶 PHP 組件,在 aardio 中占擊「發布」生成 EXE —— 可點擊「轉換為獨立 EXE」按鈕生成單 EXE 程式:
▶ 嵌入 PHP
aardio 提供了 php 擴展庫可以直接調用 PHP 的解釋器。
php 擴展庫自帶的 PHP 版本為 v5.2 ,這個版本的好處是體積非常小,兼容到 XP,不需要額外再安裝其他 C++ 運行庫。其實用來寫一般的桌面程式夠用了。如果您希望使用高版本 PHP —— 請改用前面講的 CGI 方式調用。
aardio 嵌入式調用 PHP 示例:
import php; import console; //PHP程式碼 var phpcode =/* $a="我是PHP中的變數a"; function main(){ global $a; return $a." 這是main()函數的返回值"; }; */ //運行 PHP 程式碼 php.exec(phpcode) //運行 PHP 程式碼,調用 PHP 函數返回值 var ret = php.eval("main()") console.log( ret ); //運行 PHP 程式碼,返回表達式的值 var ret = php.eval("8899") console.log( ret ); //再用 eval 函數訪問 PHP 中的變數 var ret = php.eval("$a") console.log( ret ); //更簡單一些,直接讀 PHP 中的變數,注意去掉變數前面的$符號 console.log("直接讀取PHP中的變數", php.a ) //同上,也可以直接修改 PHP 中的變數 php.global_abc = 2011 //請注意: PHP返回給aardio的值都是字元串類型 console.pause();
▶ aardio 與 PHP 語法對比
要注意 PHP 5.2 默認編碼為 GBK,而 aardio 默認編碼為 UTF-8 編碼。
PHP 的注釋語法與 aardio 一樣,
PHP 語句也以分號結束,並且分號不能象 aardio 那樣省略
PHP 中的所有變數必須以 $ 符號開始。 $號是變數的修飾前綴,但不是變數名稱的一部分
在PHP中函數內部變數默認為局部變數(這與aardio,Javascript正好相反),使用 global 語句引入或聲明全局變數
PHP單引號中是純文本,類似 \n 這樣的轉義符不起作用,而雙引號中可以使用轉義符,aardio中也有類似的機制,不過規則正好相反。aardio中雙引號中才是普通文本,單引號中支援轉義符。
更多語法對比請參考:
aardio 範例 > 調用其他語言 > PHP > 語法比較
▶ PHP 調用 aardio
aardio 調用 PHP,PHP 再回調 aardio 程式碼:
import php; import console; //PHP程式碼 var phpCode =/* $ret = aardio(" import win; import web.json; win.msgbox('我是 aardio 程式碼'); return web.json.stringify({a=123;b=456}); ") */ //運行PHP程式碼,返回表達式的值 var ret = php.eval(phpCode) console.log( ret ); console.pause();
注意: aardio 返回給PHP的值都是字元串類型, PHP 調用的 aardio 程式碼使用 return 語句返回值。
▶ 嵌入PHP:自定義 PHP 輸出
為了方便測試,首先用下面的 aardio 程式碼生成測試 PHP 文件:
phpcode = /* <?php echo "<p>Hello World</p>"; phpinfo(INFO_ALL); ?> */ string.save("/test.php",phpcode )
然後用 aardio 調用上面的 test.php :
import php; php.print = function( msg ) { import console; console.log(msg); console.more(); } //執行 PHP 文件 php.dofile("/test.php")
在 aardio 中只要簡單的定義 php.print 函數,就可以捕獲 PHP 的輸出數據了。
▶ 嵌入 PHP:重置 PHP 解釋器
下面直接看 aardio 程式碼如何重置 PHP 解釋器:
import php; import console; //打開控制台 console.open(); //重置 PHP 解釋器 php.begin() php.eval("$a=123"); console.log( php.a ); php.end() //重置 PHP 解釋器 php.begin() php.eval("$b=456"); //注意這裡PHP中的變數$a已經失效 console.log( php.a,php.b ); php.end() console.pause();
▶ 混合不同程式語言只是可選項
aardio 雖然可以方便地混合很多程式語言,但混合編程僅僅是可選項。下面這些很受歡迎的桌面軟體 —— 都是使用純 aardio 程式碼編寫。