博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
阅读量:5036 次
发布时间:2019-06-12

本文共 3891 字,大约阅读时间需要 12 分钟。

Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。

 

 

1引擎加脚本架构 跨平台,桌面与web的优势 1

2架构桌面引擎(javac# 2

3php桌面引擎要点 2

3.1. 运行环境:同时支持cs桌面与web方式 2

3.2. 界面使用html5+css+js实现 2

3.3. Cli接口互操作,与web接口互操作 2

3.4. 其他----------流程 2

3.4.1. Html5界面确定要是有的后台引擎$parser=php c# java js 2

3.4.2. 桌面引擎dispatch 3

3.4.3. 使用cli引擎转发到php 3

3.4.4. phprun.bat 4

3.4.5. Php同时支持web与桌面的参数传递 4

3.4.6. 桌面程序$_GET参数的解析,自定义req引擎 4

3.4.7. 回调js 通过$callback 5

4常见问题与最近实践 5

4.1. 使用cmd.exe还是直接bat。。 5

5其他的php桌面程序方案 6

6参考 6

 

1. 引擎加脚本架构 跨平台,桌面与web的优势

跨平台方面java很不错。但是java需要编译。。如果需要一个桌面程序,需要灵活修改,可以脚本写成的化,就可以考虑引擎加脚本架构 。。。使用php或者js来做桌面后端。。。

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

 

2. 架构桌面引擎(javac#

 

3. php桌面引擎要点

3.1. 运行环境:同时支持cs桌面与web方式

3.2. 界面使用html5+css+js实现

3.3. Cli接口互操作,与web接口互操作

3.4. 其他----------流程

3.4.1. Html5界面确定要是有的后台引擎$parser=php c# java js

使用dwr引擎转换为http param..

最好可以有个总配置要使用什么引擎,也可以单独页面配置不同的引擎。。

 

3.4.2. 桌面引擎dispatch 

Proj.amazon splider

  //供JS调用

        public void sendNSCommand(Object message, Object message2, Object message3, Object message4, Object message5, Object message6, Object message7)

        {

          //  Object[] objs = (Object[])message;

            Console.WriteLine(message);

 

            String meth =(String) message;

            //p822

            string paramsx=((string) message2);

            if (paramsx.Contains("$parser"))

            {

                String r = new php—ParesrX(paramsx).exec().Trim() ;

                Map m = new ParamX().urlParams2Map((string)message2);

                 String callback = (String)m.get("$callback");

                 String js2 = callback + "('" + r + "');";

                 WebBrowser webBrowser1 = (WebBrowser)iocx.getBean("webBrowser1");

                 object[] objects = new object[1];

                 objects[0] = r;

                 Object o = webBrowser1.Document.InvokeScript(callback, objects);

                 Console.WriteLine("==exe js rzt:" + o);

                 return;

            }

 

3.4.3. 使用cli引擎转发到php

 class ParesrX

    {

        private string meth;

 

        public ParesrX(string meth)

        {

            // TODO: Complete member initialization

            this.meth = meth;

 

        }

 

        internal String exec()

        {

            Map m =new  ParamX().urlParams2Map(this.meth);

            if (((String)m.get("$parser")).Equals("php"))

            {

                String urlparams = m.serialize();

                String cmd = "@qut" + pathx.StartupPath() + "/phprun.bat@qut  @qut" + pathx.StartupPath() + "/com.attilax/api.php@qut  @qut" + urlparams + "@qut";

              cmd=cmd.Replace("@qut","\"");

                Console.WriteLine(cmd);

            String r=    new Cmd().RunCmd(cmd);

            return r;

            }

            return "";

 

 

3.4.4. phprun.bat

@d:

 

@"%~dp0php5.3.10\php.exe"  -c "%~dp0php5.3.10\php.ini"  -f %1  %2  %3

 

 

3.4.5. Php同时支持web与桌面的参数传递

/com.attilax/api.php@qut  @qut" + urlparams + "@qut";

Web方式    api.php?urlparams....

 

3.4.6. 桌面程序$_GET参数的解析,自定义req引擎

 if(count($_GET)==0) //cli mode

 {

 

 $param=$argv[1]; 

  $GLOBALS["varx"]["argv"]=$argv ;

 

 $_GET=urlParams2Map($param); 

   $GLOBALS["varx"]["get"]=$_GET ;

  

 

 }

 

 

 

function   urlParams2Map( $params) {

 $o=array();

$a=explode('&',$params);

 $GLOBALS["varx"]["a"]=$a ;

  $GLOBALS["varx"]["params"]=$params;

  foreach( $a as $k2=>$v2 )

  {

 

  $a2=explode("=",$v2);

   $k=$a2[0];

   $v=$a2[1];

   $o[$k]=$v;

  }

   $GLOBALS["varx"]["o"]=$o ;

return $o;

}

 

3.4.7. 回调js 通过$callback

    String callback = (String)m.get("$callback");

                 String js2 = callback + "('" + r + "');";

                 WebBrowser webBrowser1 = (WebBrowser)iocx.getBean("webBrowser1");

                 object[] objects = new object[1];

                 objects[0] = r;

                 Object o = webBrowser1.Document.InvokeScript(callback, objects);

 

4. 常见问题与最近实践

4.1. 使用cmd.exe还是直接bat。。

推荐使用bat方式。。否则cmd.exe 

 

        String cmd = "@qut" + pathx.StartupPath() + "/phprun.bat@qut  @qut" + pathx.StartupPath() + "/com.attilax/api.php@qut  @qut" + urlparams + "@qut";

              cmd=cmd.Replace("@qut","\"");

 

正确的方式是,将 /C 后面所有字符,再加上双引号:

对比两段命令,很多人马上就明白为什么了。

因为,这里相当于有两条命令,并且是嵌套的,外面的命令是:

cmd.exe /C "command"

命令是 cmd.exe,两个参数分别是 /C, "command",我们这里的 command 是

 

      

5. 其他的php桌面程序方案

php gtk

WinBinder 

 

6. 参考

PHP开发桌面应用.html

执行 CMD 时,参数加引号常见问题 的米-漠石's Blog - 博客频道 - CSDN.NET.html

C#执行DOS命令(CMD命令) 杨友山 博客频道 - CSDN.NET

paip.asp vbs通过CLI命令行调用PHP代码 - attilax的专栏 博客频道 - CSDN.NET

paip.执行shell cmd 命令uapi java php python总结 - attilax的专栏 博客频道 - CSDN.NET

 



转载于:https://www.cnblogs.com/attilax/p/5963626.html

你可能感兴趣的文章
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>
Linux常用命令总结
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>