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 语法对比

请参考:aardio 编程语言快速入门——语法速览

要注意 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 代码编写。

aardio + PHP 可视化快速开发独立 EXE 桌面程序的更多相关文章

  1. aardio + PowerShell 可视化快速开发独立 EXE 桌面程序

    aardio 可以方便地调用 PowerShell ,PowerShell 中也可以自由调用 aardio 对象与函数.不用带上体积很大的System.Management.Automation.dl ...

  2. aardio + Python 可视化快速开发桌面程序,一键生成独立 EXE

    网络上大家分享的 aardio + Python 混合开发的文章很多,不得不说 aardio 与 Python 混合开发是真的简单 !  快速入门 推荐几个快速上手教程:< aardio + P ...

  3. aardio + .NET 快速开发独立 EXE 程序,可防 ILSpy 反编译

    简介 aardio 可以非常方便地调用 .NET( 不需要任何复杂的步骤 ). .NET 在 aardio 中很好用,系统自带 .NET 组件以及各种开源 .NET 组件在 aardio 用户中也很受 ...

  4. 放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序

    Electron 不错,但也不是完美的. Electron 带来了很多优秀的桌面软件,但并不一定总是适合我们的需求. 多个选择总是好事! 我使用 Electron 遇到的一些麻烦 1.Electron ...

  5. 实用 | 利用 aardio 配合 Python 快速开发桌面应用

    1. 前言 大家好,我是安果! 我们都知道 Python 可以用来开发桌面应用,一旦功能开发完成,最后打包的可执行文件体积大,并且使用 Python 开发桌面应用周期相对较长 假如想快速开发一款 PC ...

  6. 关于电脑开机不出现桌面即不启动explorer.exe桌面程序--------正解

    针对这个问题,一开始的思路是,把自己写的界面小程序(Win.exe)放在Windows启动文件夹中, 效果到是界面程序自启动了,但是还是先出现的桌面,然后才的启动的界面程序(Win.exe),并不是我 ...

  7. Tkinter开发第一个桌面程序HelloWorld

    在Python3中是tkinter,Python2中是Tkinter Tkinter是Python 官方承认的标准 GUI 方案(de-facto standard),因为是Python自带安装,决定 ...

  8. Java 快速开发平台 WB 6.8 发布

    WebBuilder是一款开源的可视化Web应用开发和运行平台. 基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发: 高效.稳定和可扩展的特点,适合复杂企业 ...

  9. 使用.NET Core快速开发一个较正规的命令行应用程序

    程序员的世界,命令行工具一直是"体验非常友好"的工具,也能自动化完成很多事情,同时还能结合shell来进行某项任务的批处理(脚本).在.NET Core中,命令行应用程序是基础,但 ...

随机推荐

  1. 启用Hyper-v后,重启后界面提示 无法完成功能配置,正在撤销更改

    安装docker后,提示需要启用hyper-v,在控制面板中勾选Hyper-v,然后重启,更新快完成就提示无法完成功能配置,正在撤销更改 解决方法 方法1 控制面板一个一个选 方法2 百度了n多内容, ...

  2. 处理化学SDF文件出现乱码的解决经验

    近期,在VS2019中用WTL编写一个处理化学SDF文件的程序,遇到多处数据出现乱码的问题,典型一处情况如下:在原始SDF文件的一个字段中,有个形如下面的文字信息: https://product.p ...

  3. Vnc自动登录器-多国语言绿色版

    推荐:介绍一个VNC连接工具:iis7服务器管理工具.IIs7服务器管理工具可以批量连接并管理VNC服务器.作为服务器集成管理器,它最优秀的功能就是批量管理windows与linux系统服务器.vps ...

  4. 优雅退出在Golang中的实现

    背景 为什么需要优雅关停 在Linux下运行我们的go程序,通常有这样2种方式: 前台启动.打开终端,在终端中直接启动某个进程,此时终端被阻塞,按CTRL+C退出程序,可以输入其他命令,关闭终端后程序 ...

  5. 统计 Word 文档字数的方式

    描述 欲统计某文档的字数,有两种方式. "审阅"选项卡--"校对"组--字符统计 点击左下角字数统计 审阅查看字数 此步骤较为复杂,在审阅选项卡中可以查询文档的 ...

  6. 通过宏封装实现std::format编译期检查参数数量是否一致

    背景 std::format在传参数量少于格式串所需参数数量时,会抛出异常.而在大部分的应用场景下,参数数量不一致提供编译报错更加合适,可以促进我们更早发现问题并进行改正. 最终效果 // 测试输出接 ...

  7. 使用puppeteer生成pdf与截图

    之前写过一篇 vue cli2 使用 wkhtmltopdf 踩坑指南,由于wkhtmltopdf对vue的支持并不友好,而且不支持css3,经过调研最终选择puppeteer,坑少,比较靠谱. 一. ...

  8. CF -1679C

    Problem - 1679C - Codeforces 题意:当t=1加入一个点,每个点可以影响一行和一列,t=2删除某个点,t=3判断这个矩形内的每个点是否都可以影响. 思路:开始时直接暴力,T了 ...

  9. 免费内网穿透服务Localtunnel

    Localtunnel 将为您分配一个唯一的可公开访问的 url,它将所有请求代理到您本地运行的网络服务器. 快速开始 全局安装 Localtunnel(需要 NodeJS)以使其在任何地方都可以访问 ...

  10. 安装配置华为Fusion acces(Lite AD)并使Windows登录

    安装Fusion access虚拟机 根据自己情况自定义 点击编辑虚拟机设置 添加镜像 点击确定并开启此虚拟机 选择第二个 Install 添加Network:修改hostname:修改密码 回车添加 ...