[小戴]怎样给PHP制作扩展方法(C#版本)

废话

     话说接到一个棘手的案子,要给一个上市公司做一套B/S架构的程序,原则上这种大公司的需求基本上要用java去解决,但是项目时间特别急,公司人手也不够,只能用php来开发了(PS:这里没有贬低php的意思,我很喜欢PHP,只要不是特别要求基本上也是PHP开发。)。只是纯粹的语言的区别也不会让我花时间去研究这么偏的东西,只是客户公司不想为源代码付钱(PS:上市公司都是坑),只是纯粹使用,以后维护还要让公司去做,这就尴尬了,因为目前来讲没有一个加密手段可以有效的防止php代码的泄露,包括某知名加密解密网站,所以考虑到这个问题头脑风暴了一下,或许可以像做ZEND这种插件一样我们自己做一个插件放到PHP插件目录里面然后去调用里面的方法去实现主要的功能,php只是做数据的呈现,而我们知道dll文件是有多种方法可以防止被破解的。所以这样对我们的核心起到了保护作用,哪怕php源码公开都没问题。看来这条路还是可以进行的。


过程


     制作扩展的方法第一时间想到的是c++,因为PHP本身自带的好多方法都是c++去写的。不过个人无法抗力的原因(PS忘记光了),所以还是选择C#吧。


工具


     phpstudy

     安装插件:php_com_dotnat.dll

     VS2015


实现C#:


     创建一个C#类库项目

     1.png

    点击属性:

   2.png

   点击应用程序里面点击程序集信息

  3.png

    使程序集COM可见打勾

   4.png

  保存项目,关闭VS.

  以管理员的身份打开 VS2015开发人员工具

  5.png


  在弹出的命令符窗口界面切换到生成dll文件的目录:

  7.png

  输入:

sn -k d:\xiaodai.snk

  这里生成一个snk的强制加密文件。

  按回车。

  打开VS:

  点击项目,点击属性,点击签名:

  8.png

  选择我们刚刚生成的snk文件。

  

   编写测试程序:

  6.png

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace xiaodai
{
    public class Class1
    {
        public string stingxd(string name) {
            string data = "你好!"+name;
            return data;
        }
    }
}

  点击生成,生成DLL文件。

  保存项目,关闭VS.

  以管理员的身份打开 VS2015开发人员工具:

  输入:

regasm  xiaodai.dll

 按回车

  然后继续输入:

gacutil /I xiaodai.dll

  按回车

  9.png

  以上C#部分全部完结了。


实现PHP:


    编写测试代码:

    10.png

<?php
$r=new Com("xiaodai.Class1");
$s=$r->stingxd("xiaodai");
echo $s;   	
?>

效果:


     TIM截图20170525103206.png



Top