qin.c 5.74 KB
/*
  +----------------------------------------------------------------------+
  | PHP Version 5                                                        |
  +----------------------------------------------------------------------+
  | Copyright (c) 1997-2011 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

/* $Id: header 310447 2011-04-23 21:14:10Z bjori $ */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_qin.h"
#include "string.h"

/* If you declare any globals in php_qin.h uncomment this: */
ZEND_DECLARE_MODULE_GLOBALS(qin)

/* True global resources - no need for thread safety here */
static int le_qin;

/* This User Define */
#define Q_LONG_CONST(name) REGISTER_LONG_CONSTANT(#name, name, CONST_CS | CONST_PERSISTENT)
#define Q_STRING_CONST(name) REGISTER_STRING_CONSTANT(#name, name, CONST_CS | CONST_PERSISTENT)

/* {{{ qin_functions[]
 *
 * Every user visible function must have an entry in qin_functions[].
 */
const zend_function_entry qin_functions[] = {
	PHP_FE(confirm_qin_compiled,	NULL)		/* For testing, remove later. */
	PHP_FE(qin_environment, NULL )
	PHP_FE(qin_path, NULL)
	PHP_FE(qin_config, NULL)
	{NULL, NULL, NULL}
	//PHP_FE_END	/* Must be the last line in qin_functions[] */
};
/* }}} */

/* {{{ qin_module_entry
 */
zend_module_entry qin_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
	STANDARD_MODULE_HEADER,
#endif
	"qin",
	qin_functions,
	PHP_MINIT(qin),
	PHP_MSHUTDOWN(qin),
	PHP_RINIT(qin),		/* Replace with NULL if there's nothing to do at request start */
	PHP_RSHUTDOWN(qin),	/* Replace with NULL if there's nothing to do at request end */
	PHP_MINFO(qin),
#if ZEND_MODULE_API_NO >= 20010901
	"0.1", /* Replace with version number for your extension */
#endif
	STANDARD_MODULE_PROPERTIES
};
/* }}} */

#ifdef COMPILE_DL_QIN
ZEND_GET_MODULE(qin)
#endif

/* {{{ PHP_INI
 */
/* Remove comments and fill if you need to have entries in php.ini */
/*
 STD_PHP_INI_ENTRY("qin.global_value",      "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_qin_globals, qin_globals)
 STD_PHP_INI_ENTRY("qin.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_qin_globals, qin_globals)
 */
PHP_INI_BEGIN()
    STD_PHP_INI_ENTRY("qin.environment", Q_ENVIRONMENT, PHP_INI_ALL, OnUpdateString, global_string, zend_qin_globals, qin_globals)
    STD_PHP_INI_ENTRY("qin.path", Q_PATH, PHP_INI_ALL, OnUpdateString, global_string, zend_qin_globals, qin_globals)
    STD_PHP_INI_ENTRY("qin.config", Q_CONFIG , PHP_INI_ALL, OnUpdateString, global_string, zend_qin_globals, qin_globals)
PHP_INI_END()

/* }}} */

/* {{{ php_qin_init_globals
 */
/* Uncomment this function if you have INI entries
static void php_qin_init_globals(zend_qin_globals *qin_globals)
{
	qin_globals->global_value = 0;
	qin_globals->global_string = NULL;
}
*/
/* }}} */

/* {{{ PHP_MINIT_FUNCTION
 */
PHP_MINIT_FUNCTION(qin)
{
	Q_STRING_CONST( Q_VERSION );
	Q_STRING_CONST( Q_AUTHOR );
	Q_STRING_CONST( Q_ENVIRONMENT );
	/* If you have INI entries, uncomment these lines */
	REGISTER_INI_ENTRIES();
	return SUCCESS;
}
/* }}} */

/* {{{ PHP_MSHUTDOWN_FUNCTION
 */
PHP_MSHUTDOWN_FUNCTION(qin)
{
	/* uncomment this line if you have INI entries */
	UNREGISTER_INI_ENTRIES();
	return SUCCESS;
}
/* }}} */

/* Remove if there's nothing to do at request start */
/* {{{ PHP_RINIT_FUNCTION
 */
PHP_RINIT_FUNCTION(qin)
{
	return SUCCESS;
}
/* }}} */

/* Remove if there's nothing to do at request end */
/* {{{ PHP_RSHUTDOWN_FUNCTION
 */
PHP_RSHUTDOWN_FUNCTION(qin)
{
	return SUCCESS;
}
/* }}} */

/* {{{ PHP_MINFO_FUNCTION
 */
PHP_MINFO_FUNCTION(qin)
{
	php_info_print_table_start();
	php_info_print_table_header(2, "qin support", "enabled");
	php_info_print_table_row(2, "Version", Q_VERSION);
	php_info_print_table_end();
	/* Remove comments if you have entries in php.ini */
	DISPLAY_INI_ENTRIES();
}
/* }}} */


/* Remove the following function when you have succesfully modified config.m4
   so that your module can be compiled into PHP, it exists only for testing
   purposes. */

/* Every user-visible function in PHP should document itself in the source */
/* {{{ proto string confirm_qin_compiled(string arg)
   Return a string to confirm that the module is compiled in */
PHP_FUNCTION(confirm_qin_compiled)
{
	char *arg = NULL;
	int arg_len, len;
	char *strg;

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
		return;
	}

	len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "qin", arg);
	RETURN_STRINGL(strg, len, 0);
}
/* }}} */

/** 获取环境 **/
PHP_FUNCTION(qin_environment){
	char *arg = NULL;
	int arg_len, len;
	char *strg;
	RETVAL_STRING(Q_ENVIRONMENT,1);
}

/** 获取框架路径 **/
PHP_FUNCTION(qin_path){
	char *arg = NULL;
	int arg_len, len;
	char *strg;
	RETVAL_STRING(Q_PATH,1);
}

/** 获取SERVER 配置文件 **/
PHP_FUNCTION(qin_config){
	char *arg = NULL;
	int arg_len, len;
	char *strg;
	RETVAL_STRING(Q_CONFIG,1);
}