首页 > 编程语言 >aardio + PHP 可视化快速开发独立 EXE 桌面程序

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

时间:2022-09-28 11:55:51浏览次数:76  
标签:EXE console aardio var import PHP php

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

 

 

标签:EXE,console,aardio,var,import,PHP,php
From: https://www.cnblogs.com/aardio/p/16737502.html

相关文章

  • php大文件(百M以上)的上传下载实现技术.
    ​PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间......
  • 把php网站页面保存为pdf
    如果你想从php创建一个pdf,pdflib会帮助你(正如其他人的建议).另外,如果你想通过PHP将HTML页面转换为PDF,你会发现这里有点麻烦.三年来,我一直在尽力做到最好.所以,我......
  • php大文件(百M以上)的上传下载实现技术
    ​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步:......
  • 线程池底层原理详解与源码分析(补充部分---ScheduledThreadPoolExecutor类分析)
    【1】前言本篇幅是对 线程池底层原理详解与源码分析 的补充,默认你已经看完了上一篇对ThreadPoolExecutor类有了足够的了解。 【2】ScheduledThreadPoolExecutor......
  • 【前端必会】使用indexedDB,降低环境搭建成本
    背景学习前端新框架、新技术。如果需要做一些数据库的操作来增加demo的体验(CURD流程可以让演示的体验根据丝滑)最开始的时候一个演示程序我们会调用后台,这样其实有一点弊......
  • Python可视化打包 exe,这个神器绝了
     可视化打包exe,这个神器绝了auto-py-to-exe是一个用于将Python程序打包成可执行文件的图形化工具。本文就是主要介绍如何使用auto-py-to-exe完成python程序打包。......
  • 如何将编写的c语言程序打包成exe可执行文件呢?
    如何将编写的c语言程序打包成exe可执行文件呢?以前我们写程序很多是在编辑器上,让编辑起来编译运行我们的程序。如果想将其打包成exe可执行文件该如何做?我这里推荐使用code......
  • PHP基础篇
    PHP的工作流程:上网浏览页面,客户端通过HTTP协议向Web服务器请求数据。拿Apache举例,它接收到数据后,转交给PHP来处理这些数据。PHP与数据库交互,比如Mysql,通过查询或......
  • 【Golang】PHP转Go强大的工具库
    PHP的朋友应该会被PHP中两大特性折服:1、强大的array,一切皆Array;2、强大的函数库,函数类型非常丰富。一、简单示例1、例如:md5函数Go版本写法:packagemainimport......
  • 通过Thread Pool Executor类解析线程池执行任务的核心流程
    摘要:ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态。本文分享自华为云社区《【高......