shmop より php 拡張のテスト

ヘッダー
共有メモリ関数(shmop) が普通にビルドできるので
そこから整理してみました
#ifndef PHP_SHMOP_H
#define PHP_SHMOP_H

extern zend_module_entry lightbox_module_entry;
#define phpext_lightbox_ptr &lightbox_module_entry

#ifdef PHP_WIN32
#define PHP_SHMOP_API __declspec(dllexport)
#else
#define PHP_SHMOP_API
#endif

PHP_MINIT_FUNCTION(lightbox);
PHP_MINFO_FUNCTION(lightbox);

PHP_FUNCTION(lightbox_open);
PHP_FUNCTION(lightbox_read);
PHP_FUNCTION(lightbox_delete);


#endif
関数部分
必要な情報は、サンプルがあるので揃うとは思いますが
現在は printf を試した程度です

以下のように php.ini に記述して動作しています
extension=php_lightbox.dll

( phpinfo にも表示されます )
<?

lightbox_open ( );
print lightbox_read( 0, "param", 0, 0 );

//phpinfo();


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

#include "php.h"
#include "php_ini.h"
#include "php_shmop.h"
# ifndef PHP_WIN32
# include <sys/ipc.h>
# include <sys/shm.h>
#else
#include "tsrm_win32.h"
#endif


#include "ext/standard/info.h"

// *****************************************************
// 関数リスト
// *****************************************************
zend_function_entry lightbox_functions[] = {
	PHP_FE(lightbox_open, NULL)
	PHP_FE(lightbox_read, NULL)
	PHP_FE(lightbox_delete, NULL)
	{NULL, NULL, NULL}
};


// *****************************************************
// module_entry
// *****************************************************
zend_module_entry lightbox_module_entry = {
	STANDARD_MODULE_HEADER,
	"lightbox",
	lightbox_functions,
	PHP_MINIT(lightbox),
	NULL,
	NULL,
	NULL,
	PHP_MINFO(lightbox),
    NO_VERSION_YET,
	STANDARD_MODULE_PROPERTIES
};
/* }}} */

// *****************************************************
// これで PHP のライブラリとして正しく認識される
// *****************************************************
ZEND_GET_MODULE(lightbox)

// *****************************************************
// 
// *****************************************************
PHP_MINIT_FUNCTION(lightbox)
{
	return SUCCESS;
}

// *****************************************************
// phpinfo 表示用
// *****************************************************
PHP_MINFO_FUNCTION(lightbox)
{
	php_info_print_table_start();
	php_info_print_table_row(2, "lightbox support", "enabled");
	php_info_print_table_end();
}

// *****************************************************
// 整数を返す関数
// *****************************************************
PHP_FUNCTION(lightbox_open)
{
	printf("%s\n", "test" );
	RETURN_LONG(0);
}

// *****************************************************
// 引数処理と文字列の戻り値
// *****************************************************
PHP_FUNCTION(lightbox_read)
{
	char *return_string;
	long key, mode, size;
	char *flags;
	int flags_len;

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsll",
		&key,
		&flags, &flags_len,
		&mode,
		&size) == FAILURE) {
		return;
	}

	return_string = emalloc(128+1);
	strcpy(return_string, "return_string");

	RETURN_STRINGL(return_string, strlen("return_string"), 0);
}

// *****************************************************
// bool を返す
// *****************************************************
PHP_FUNCTION(lightbox_delete)
{
	RETURN_TRUE;
}