# zephir-framework
**Repository Path**: Tinywan/zephir-framework
## Basic Information
- **Project Name**: zephir-framework
- **Description**: 使用 zephir 给 PHP7 写动态链接库
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://github.com/Tinywan
- **GVP Project**: No
## Statistics
- **Stars**: 39
- **Forks**: 4
- **Created**: 2018-01-07
- **Last Updated**: 2024-06-14
## Categories & Tags
**Categories**: utils
**Tags**: None
## README
zephir-framework
======
使用Zephir给PHP写扩展
## 目录
* 项目结构
* 如何使用
* 编译环境和依赖
* 常见问题
## 项目结构
```bash
.
├── zephirlib -- 扩展库目录
│ ├── Auth
│ │ └── License.zep -- 权限认证
│ ├── Base
│ │ ├── AbstractModule.zep -- 模块抽象类
│ │ ├── Base.zep
│ │ └── Service.zep
│ ├── Db
│ │ └── Mysql.zep
│ └── Module -- 业务模块目录
│ ├── Category.zep
│ └── Edit.zep
├── config.json -- 编译扩展配置文件
└── ext -- 编译生成的.so文件
```
## 如何使用
```php
$service_uuid = "13c7c8e1-3ac2-41a6-95dc-ff954b431bbf";
$auth_license = "1501402071-0-0-eabfb0fb52c429d4fa037585f7afd512";
$video = new \ZephirLib\Module\VideoEdit($service_uuid,$auth_license);
dump($video);
// 打印结果
object(ZephirLib\Module\VideoEdit)#3 (3) {
["service_uuid":protected] => string(36) "13c7c8e1-3ac2-41a6-95dc-ff954b431bbf"
["auth_license":protected] => string(47) "1501402071-0-0-eabfb0fb52c429d4fa037585f7afd512"
["auth_status"] => int(-1)
}
```
## 编译环境和依赖
* `re2c` 版本版本必须:`>= 0.13.6`
* [安装 PHP7 ](http://www.cnblogs.com/tinywan/p/6607395.html)
* [安装 zephir](https://github.com/phalcon/zephir)
```bash
sudo apt-get install php7.1-dev gcc make re2c autoconf
git clone https://github.com/phalcon/zephir.git
cd zephir
sudo ./install -c
```
* [安装 php-zephir-parser](https://github.com/phalcon/php-zephir-parser)
```bash
git clone git://github.com/phalcon/php-zephir-parser.git
cd php-zephir-parser
// 最好指定配置文件位置,当然也可以直接做一个软连接
sudo ./install --phpize /usr/local/php-7.1.9/bin/phpize --php-config /usr/local/php-7.1.9/bin/php-config
```
* 修改PHP.ini配置文件
```bash
$ sudo find / -name zephir_parser.so
/usr/local/php-7.1.9/lib/php/extensions/no-debug-non-zts-20160303/zephir_parser.so
```
* 修改配置文件`vim /usr/local/php-7.1.9/etc/php.ini`
```
//添加以下内容
[Zephir Parser]
extension=zephir_parser.so
```
* 重启服务器
```
sudo service php-fpm restart
```
* 配置检查

## 安装框架
* 1、下载:
```bash
git clone https://github.com/Tinywan/zephir-framework.git
```
* 2、编译:
```bash
cd zephir-framework/zephirlib
zephir build
Compiling...
Installing...
Extension installed!
Add extension=zephirlib.so to your php.ini
Don't forget to restart your web server
```
* 3、添加扩展到`php.ini`:
* PHP 7
```bash
vim /usr/local/php-7.1.9/etc/php.ini
# 添加内容
extension=/usr/lib/php/20160303/zephirlib.so
```
> 重启服务器:`sudo systemctl restart php-fpm.service`
* PHP 5
```bash
cd /usr/lib/php5/20121212/
sudo vim /etc/php5/mods-available/zephirlib.ini
// 添加内容
extension=zephirlib.so
```
* 切换到目录`/etc/php5/fpm/conf.d`做一个软连接
```bash
ln -s ../../mods-available/zephirlib.ini 20-zephirlib.ini
```
* 重启服务器:`sudo service php5-fpm restart`
* [PHP 文件加密 Zend Guard Loader](http://www.cnblogs.com/tinywan/p/6888061.html)
* 4、重启`php-fpm`服务,查看扩展是否安装成功

> `/etc/php5/fpm/conf.d/20-zephirlib.ini`
## 常见问题
* 编译错误
```bash
zephir build
Preparing for PHP compilation...
Preparing configuration file...
configure: error: Cannot find php-config. Please use --with-php-config=PATH
Compiling...
sh: php-config: command not found
kernel/filter.h:23:17: fatal error: php.h: No such file or directory
```
> [Issue上如何解决以上错误](https://github.com/phalcon/zephir/issues/1653)
> 案例:`ln -sf /www/server/php/70/bin/php-config /usr/bin/php-config`
* 如何解决,查看命令行`(cli)`的配置文件,添加`zephir_parser`扩展
```bash
$ php --ini
Configuration File (php.ini) Path: /etc/php/7.1/cli
Loaded Configuration File: /etc/php/7.1/cli/php.ini
Scan for additional .ini files in: /etc/php/7.1/cli/conf.d
...
vim /etc/php/7.1/cli/php.ini
//添加以下内容
[Zephir Parser]
extension=/usr/local/php-7.1.9/lib/php/extensions/no-debug-non-zts-20160303/zephir_parser.so
$ php -m | grep Zephir
Zephir Parser
```
* re2c 版本过低,导致`php-zephir-parser`安装失败
* 安装 re2c 执行:`sudo apt-get install re2c`
> `Ubuntu 14.04 LTS`系统默认安装
> Centos安装`yum install re2c`
* 安装`php-zephir-parser`错误
```bash
sudo ./install
error: minimal required version of re2c is 0.13.6
```
* 查看当前版本
```bash
www@:~$ re2c --version
re2c 0.13.5
```
> 注:`Zephir`和`php-zephir-parser`要求:`re2c >= 0.13.6`
* 下载安装最新版本
```bash
wget https://github.com/skvadrik/re2c/releases/download/0.16/re2c-0.16.tar.gz
tar zxvf re2c-0.16.tar.gz
cd re2c-0.16
./configure
make
make install
www@:~/tinywan/re2c-0.16$ re2c --version
re2c 0.16
```
> 注意:服务器系统内存不能小于:`512M`,否则没发编译。
## 创建和检查授权脚本
* [创建 auth_key license_create.php](https://github.com/Tinywan/zephir-framework/blob/master/test/script/license_create.php)
* [授权验证 license_check.php](https://github.com/Tinywan/zephir-framework/blob/master/test/script/license_check.php)
## 文档
* [如何使用 zephir 编译一个扩展记录](http://www.cnblogs.com/tinywan/p/7753456.html)
* [关于PHP7如何安装调试工具 Xdebug 扩展以及Zephir的问题](http://www.cnblogs.com/tinywan/p/7447958.html)