配置文件
每个Zephir扩展都有一个名为config.json
的配置文件。 每当构建或生成扩展时,Zephir都会读取这个文件,它允许开发人员修改扩展或编译器的行为。
该文件使用JSON作为配置格式:
{
"namespace": "test",
"name": "Test Extension",
"description": "My amazing extension",
"author": "Tony Hawk",
"version": "1.2.0"
}
此文件中定义的设置覆盖Zephir提供的任何默认设置。
支持以下设置:
api
用于为您的扩展配置自动生成的HTML文档。 path
指定在何处创建与项目根相关的文档。 使用base-url
生成sitemap.xml
文件为您的文档。 theme
用于设置用于生成文档的主题(通过name
设置),以及主题支持传递的任何选项(通过options
设置)。 最后,theme-directories
被用来提供额外的搜索路径,以找到你想要的主题。
{
"api": {
"path": "doc/%version%",
"base-url": "http://example.local/api/",
"theme": {
"name" : "zephir",
"options": {
"github": null,
"analytics": null,
"main_color": "#3E6496",
"link_color": "#3E6496",
"link_hover_color": "#5F9AE7"
}
},
"theme-directories": [
"my/api/themes"
]
}
}
author
开发扩展的公司、开发商、机构等:
{
"author": "Tony Hawk"
}
backend
提供一种配置扩展所使用的Zend引擎后端的方法。 目前,仅支持templatepath
,允许您在ZendEngine2
</code> ZendEngine3</0>之间进行选择:
{
"backend": {
"templatepath": "ZendEngine3"
}
}
constants-sources
要将C源文件中的常量导入到项目中,请在此设置中列出文件的路径:
{
"constants-sources": [
"utils/math_constants.h"
]
}
description
扩展描述-任何文字描述您的扩展:
{
"description": "My amazing extension"
}
destructors
此设置允许您提供一个或多个C函数在某些扩展生命周期事件上执行——具体来说,RSHUTDOWN
(请求
),PRSHUTDOWN
(post请求
),MSHUTDOWN
(<0 >0 module</0 >1), <0 >2 GSHUTDOWN</0 >3 (<0 >4 globals</0 >5)。 查看lifecycle hooks章节了解更多信息。
{
"destructors": [
{
"request": [
{
"include": "my/awesome/library.h",
"code": "c_function_for_shutting_down(TSRMLS_C)"
},
{
"include": "my/awful/library.h",
"code": "some_other_c_function_than_the_other_ones(TSRMLS_C)"
}
],
"post-request": [
{
"include": "my/awesome/library.h",
"code": "c_function_for_cleaning_up_after_the_response_is_sent(TSRMLS_C)"
}
],
"module": [
{
"include": "my/awesome/library.h",
"code": "release_module_deps(TSRMLS_C)"
}
],
"globals": [
{
"include": "my/awesome/library.h",
"code": "release_globals_deps(TSRMLS_C)"
}
]
}
]
}
extension-name
扩展的基本文件名。 它必须遵循与namespace
设置相同的规则,如果没有给出>设置,则将其用作后备。
{
"extension-name": "test"
}
external-dependencies
您可以在自己的扩展中直接包含来自另一个名称空间/扩展的类,在这里进行配置:
{
"external-dependencies": {
"My\\Awesome": "my/awesome/class.zep",
"My\\Awful": "my/awful/class.zep"
}
}
extra
包含额外的设置, 这些设置也可以像在命令行中一样传递。 目前,这是export-clases
(生成从其他C代码访问类的头文件),和indent
(选择使用tabs
或spaces
缩进生成的文件中的代码):
{
"extra": {
"export-classes": true,
"indent": "tabs"
}
}
extra-cflags
您想要添加到编译过程中的任何附加标志:
{
"extra-cflags": "-I/usr/local/Cellar/libevent/2.0.21_1/include"
}
extra-classes
如果你已经在C语言中实现了一个PHP类,你可以直接将它包含在你的扩展中,在这里进行配置:
{
"extra-classes": [
{
"header": "utls/old_c_class/class.h",
"source": "utils/old_c_class/class.c",
"init": "old_c_class",
"entry": "old_c_class_ce"
}
]
}
extra-libs
您想要添加到编译过程中的任何其他库:
{
"extra-libs": "-L/usr/local/Cellar/libevent/2.0.21_1/lib -levent"
}
extra-sources
任何其他文件,你想添加到编译过程-搜索目录是相对于ext
文件夹您的项目:
{
"extra-sources": [
"utils/pi.c"
]
}
globals
扩展全局可用。 查看globals章节了解更多信息。
{
"globals": {
"my_setting_1": {
"type": "bool",
"default": true
},
"my_setting_2": {
"type": "int",
"default": 10
}
}
}
info
phpinfo()
信息. 查看phpinfo()章节了解更多信息。
{
"info": [
{
"header": ["Directive", "Value"],
"rows": [
["setting1", "value1"],
["setting2", "value2"]
]
}
]
}
initializers
这个设置允许您提供一个或多个C函数在某些扩展生命周期事件上执行——具体来说,GINIT
(globals
), MINIT
(module
), RINIT
(<0 >0 request</0 >1)。 查看lifecycle hooks章节了解更多信息。
{
"initializers": [
{
"globals": [
{
"include": "my/awesome/library.h",
"code": "setup_globals_deps(TSRMLS_C)"
}
],
"module": [
{
"include": "my/awesome/library.h",
"code": "setup_module_deps(TSRMLS_C)"
}
],
"request": [
{
"include": "my/awesome/library.h",
"code": "some_c_function(TSRMLS_C)"
},
{
"include": "my/awful/library.h",
"code": "some_other_c_function(TSRMLS_C)"
}
]
}
]
}
name
在编译后的C代码中使用的扩展名-只能包含ascii字符:
{
"name": "test"
}
namespace
扩展的名称空间-它必须是一个简单的标识符,对应于正则表达式[a- za - z0 -9\_]+
:
{
"namespace": "test"
}
optimizations
在当前项目中应该启用或禁用的编译器优化:
{
"optimizations": {
"static-type-inference": true,
"static-type-inference-second-pass": true,
"local-context-pass": false
}
}
optimizer-dirs
你自己的优化器可以找到的目录-搜索目录是相对于根文件夹的项目:
{
"optimizer-dirs": [
"optimizers"
]
}
package-dependencies
声明库依赖关系(版本约束将被pkg-config
检查,可以使用=
,>=
, <=
,或*
):
{
"package-dependencies": {
"openssl": "*",
"libpng": ">= 0.1.0",
"protobuf": "<= 2.6.1"
}
}
prototype-dir
允许您提供描述构建自己的扩展所需的其他扩展的原型文件,因此它们不需要在构建阶段安装:
{
"prototype-dir": {
"igbinary": "prototypes",
"session": "prototypes"
}
}
requires
允许您列出其他扩展所需的建立/使用您自己:
{
"requires": {
"extensions": [
"igbinary",
"session"
]
}
}
silent
Suppresses most/all output from zephir
commands (same as -q
or --quiet
):
{
"silent": false
}
stubs
此设置允许调整IDE文档存根生成的方式。 path
集,其中应该创建存根,而stubs-run-after-generate
集,当您的代码被编译为C时,是否自动(重新)构建存根:
{
"stubs": {
"path": "ide/%version%/%namespace%/",
"stubs-run-after-generate": false
}
}
verbose
在错误消息中显示由zephir
命令生成的异常的更多细节(也可以启用-v
,或禁用-V
):
{
"verbose": false
}
version
扩展版本-必须遵循正则表达式[0-9]+\.[0-9]+\.[0-9]+
:
{
"version": "1.2.0"
}
warnings
在当前项目中应该启用或禁用的编译器警告:
{
"warnings": {
"unused-variable": true,
"unused-variable-external": false,
"possible-wrong-parameter": true,
"possible-wrong-parameter-undefined": false,
"nonexistent-function": true,
"nonexistent-class": true
}
}