用Go写PHP小扩展

问:为什么是小扩展
答:因为我还没在生产环境上测试过~~囧~

环境

  • ubuntu 16.04
  • go1.6.3 linux/amd64
  • php-go
  • php7.0.9

php-go安装

参考说明文档

示例

示例模块php-go/example/hello.go中比较全的写出了大部分示例(虽然没多少注释~)

# 编译示例模块hello.so
cd cd $GOPATH/src/github.com/kitech/php-go
make
ls -lh php-go/hello.so

tips: make时可能会出现make: /usr/bin/php-config:命令未找到,手动修改下Makefile的第10行PHPCFG={yourPath}

将php-go/hello.so拷贝到你php的extension目录下,添加php.ini,php -m |grep hello能看到hello扩展没报错就ok了,重启nginx就可以在php里测试了

编写自己的小Demo

  • go
// php-go/example/jw.go
package main

import (
    "github.com/kitech/php-go/phpgo"
)

type Jw struct {
}

func NewJw() *Jw {
    return &Jw{}
}

func (j *Jw) Test(m int, n int) int {
    return m + n
}

func main() {
    panic("wtf")
}

func Jw_hello() string {
    return "Aaaa"
}

func init() {
    phpgo.InitExtension("jw", "0.1")
    phpgo.AddFunc("jw_hello", Jw_hello)
    phpgo.AddClass("Jw", NewJw)
}
  • 编译

    • 先修改php-go/Makefile,添加编译模块

      all:
      go build -v -buildmode=c-shared -o jw.so examples/jw.go
      clean:
      rm -f jw.so
- 编译
cd cd $GOPATH/src/github.com/kitech/php-go
make
ls -lh php-go/jw.so

sudo cp $GOPATH/src/github.com/kitech/php-go/jw.so  $PHP_PATH/lib/php/extensions/no-debug-non-zts-20151012
echo "jw.so" >> $PHP_PATH/etc/php.ini
sudo service nginx restart

- 写php测试模块

php-ext-result

标签: php-go