Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
1. 引擎加脚本架构 跨平台,桌面与web的优势 1
2. 架构桌面引擎(java,c#) 2
3. php桌面引擎要点 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. 架构桌面引擎(java,c#)
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