FolusWen 986193c1f3 2020.02.29 / Folus Wen пре 5 година
..
TSRM 26280c57f0 2019.07.12 / Folus Wen пре 5 година
Zend 26280c57f0 2019.07.12 / Folus Wen пре 5 година
build 26280c57f0 2019.07.12 / Folus Wen пре 5 година
ext 26280c57f0 2019.07.12 / Folus Wen пре 5 година
main 26280c57f0 2019.07.12 / Folus Wen пре 5 година
netware 26280c57f0 2019.07.12 / Folus Wen пре 5 година
pear 26280c57f0 2019.07.12 / Folus Wen пре 5 година
release 986193c1f3 2020.02.29 / Folus Wen пре 5 година
sapi 26280c57f0 2019.07.12 / Folus Wen пре 5 година
scripts 26280c57f0 2019.07.12 / Folus Wen пре 5 година
tests 26280c57f0 2019.07.12 / Folus Wen пре 5 година
travis 26280c57f0 2019.07.12 / Folus Wen пре 5 година
win32 26280c57f0 2019.07.12 / Folus Wen пре 5 година
.editorconfig 26280c57f0 2019.07.12 / Folus Wen пре 5 година
.gdbinit 26280c57f0 2019.07.12 / Folus Wen пре 5 година
.gitattributes 26280c57f0 2019.07.12 / Folus Wen пре 5 година
.gitignore 26280c57f0 2019.07.12 / Folus Wen пре 5 година
.travis.yml 26280c57f0 2019.07.12 / Folus Wen пре 5 година
CODING_STANDARDS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
CREDITS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
EXTENSIONS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
INSTALL 26280c57f0 2019.07.12 / Folus Wen пре 5 година
LICENSE 26280c57f0 2019.07.12 / Folus Wen пре 5 година
Makefile.frag 26280c57f0 2019.07.12 / Folus Wen пре 5 година
Makefile.gcov 26280c57f0 2019.07.12 / Folus Wen пре 5 година
Makefile.global 26280c57f0 2019.07.12 / Folus Wen пре 5 година
NEWS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.EXT_SKEL 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.GIT-RULES 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.MAILINGLIST_RULES 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.NEW-OUTPUT-API 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.PARAMETER_PARSING_API 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.REDIST.BINS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.RELEASE_PROCESS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.SELF-CONTAINED-EXTENSIONS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.STREAMS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.SUBMITTING_PATCH 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.TESTING 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.TESTING2 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.UNIX-BUILD-SYSTEM 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.WIN32-BUILD-SYSTEM 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.input_filter 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.md 26280c57f0 2019.07.12 / Folus Wen пре 5 година
README.namespaces 26280c57f0 2019.07.12 / Folus Wen пре 5 година
UPGRADING 26280c57f0 2019.07.12 / Folus Wen пре 5 година
UPGRADING.INTERNALS 26280c57f0 2019.07.12 / Folus Wen пре 5 година
acinclude.m4 26280c57f0 2019.07.12 / Folus Wen пре 5 година
buildconf 26280c57f0 2019.07.12 / Folus Wen пре 5 година
buildconf.bat 26280c57f0 2019.07.12 / Folus Wen пре 5 година
configure.in 26280c57f0 2019.07.12 / Folus Wen пре 5 година
footer 26280c57f0 2019.07.12 / Folus Wen пре 5 година
genfiles 26280c57f0 2019.07.12 / Folus Wen пре 5 година
header 26280c57f0 2019.07.12 / Folus Wen пре 5 година
ltmain.sh 26280c57f0 2019.07.12 / Folus Wen пре 5 година
makedist 26280c57f0 2019.07.12 / Folus Wen пре 5 година
makerpm 26280c57f0 2019.07.12 / Folus Wen пре 5 година
php.gif 26280c57f0 2019.07.12 / Folus Wen пре 5 година
php.ini-development 26280c57f0 2019.07.12 / Folus Wen пре 5 година
php.ini-production 26280c57f0 2019.07.12 / Folus Wen пре 5 година
php5.spec.in 26280c57f0 2019.07.12 / Folus Wen пре 5 година
run-tests.php 26280c57f0 2019.07.12 / Folus Wen пре 5 година
server-tests-config.php 26280c57f0 2019.07.12 / Folus Wen пре 5 година
server-tests.php 26280c57f0 2019.07.12 / Folus Wen пре 5 година
snapshot 26280c57f0 2019.07.12 / Folus Wen пре 5 година
stub.c 26280c57f0 2019.07.12 / Folus Wen пре 5 година
vcsclean 26280c57f0 2019.07.12 / Folus Wen пре 5 година

README.EXT_SKEL

(NOTE: you may also want to take a look at the pear package
PECL_Gen, a PHP-only alternative for this script that
supports way more extension writing tasks and is
supposed to replace ext_skel completely in the long run ...)

WHAT IT IS

It's a tool for automatically creating the basic framework for a PHP module
and writing C code handling arguments passed to your functions from a simple
configuration file. See an example at the end of this file.

HOW TO USE IT

Very simple. First, change to the ext/ directory of the PHP 4 sources. If
you just need the basic framework and will be writing all the code in your
functions yourself, you can now do

./ext_skel --extname=module_name

and everything you need is placed in directory module_name.

[ Note that GNU awk is likely required for this script to work. Debian
systems seem to default to using mawk, so you may need to change the
#! line in skeleton/create_stubs and the cat $proto | awk line in
ext_skel to use gawk explicitly. ]

If you don't need to test the existence of any external header files,
libraries or functions in them, the module is already almost ready to be
compiled in PHP. Just remove 3 comments in your_module_name/config.m4,
change back up to PHP sources top directory, and do

./buildconf; ./configure --enable-module_name; make

The definition of PHP_MODULE_NAME_VERSION will be present in the
php_module_name.h and injected into the zend_module_entry definition. This
is required by the PECL website for the version string conformity checks
against package.xml

But if you already have planned the overall scheme of your module, what
functions it will contain, their return types and the arguments they take
(a very good idea) and don't want to bother yourself with creating function
definitions and handling arguments passed yourself, it's time to create a
function definitions file, which you will give as an argument to ext_skel
with option

--proto=filename.

SOURCE AND HEADER FILE NAME

./ext_skel generates 'module_name.c' and 'php_module_name.h' as main source
and header files. Keep these names.

Module functions (User functions) must be named

module_name_function()

When you need to expose module functions to other modules, expose functions
strictly needed by others. Exposed internal function must be named

php_module_name_function()

See also CODING_STANDARDS.


FORMAT OF FUNCTION DEFINITIONS FILE

All the definitions must be on one line. In it's simplest form, it's just
the function name, e.g.

module_name_function

but then you'll be left with an almost empty function body without any
argument handling.

Arguments are given in parenthesis after the function name, and are of
the form 'argument_type argument_name'. Arguments are separated from each
other with a comma and optional space. Argument_type can be one of int,
bool, double, float, string, array, object or mixed.

An optional argument is separated from the previous by an optional space,
then '[' and of course comma and optional space, like all the other
arguments. You should close a row of optional arguments with same amount of
']'s as there where '['s. Currently, it does not harm if you forget to do it
or there is a wrong amount of ']'s, but this may change in the future.

An additional short description may be added after the parameters.
If present it will be filled into the 'proto' header comments in the stubs
code and the tag in the XML documentation.

An example:

module_name_function(int arg1, int arg2 [, int arg3 [, int arg4]])

Arguments arg1 and arg2 are required.
Arguments arg3 and arg4 are optional.

If possible, the function definition should also contain it's return type
in front of the definition. It's not actually used for any C code generating
purposes but PHP in-source documentation instead, and as such, very useful.
It can be any of int, double, string, bool, array, object, resource, mixed
or void.

The file must contain nothing else but function definitions, no comments or
empty lines.

OTHER OPTIONS

--no-help

By default, ext_skel creates both comments in the source code and a test
function to help first time module writers to get started and testing
configuring and compiling their module. This option turns off all such things
which may just annoy experienced PHP module coders. Especially useful with

--stubs=file

which will leave out also all module specific stuff and write just function
stubs with function value declarations and passed argument handling, and
function entries and definitions at the end of the file, for copying and
pasting into an already existing module.

--xml[=file]

Creates the basics for phpdoc .xml file.

--full-xml

Not implemented yet. When or if there will ever be created a framework for
self-contained extensions to use phpdoc system for their documentation, this
option enables it on the created xml file.

CURRENT LIMITATIONS, BUGS AND OTHER ODDITIES

Only arguments of types int, bool, double, float, string and array are
handled. For other types you must write the code yourself. And for type
mixed, it wouldn't even be possible to write anything, because only you
know what to expect.

It can't handle correctly, and probably never will, variable list of
of arguments. (void foo(int bar [, ...])

Don't trust the generated code too much. It tries to be useful in most of
the situations you might encounter, but automatic code generation will never
beat a programmer who knows the real situation at hand. ext_skel is generally
best suited for quickly generating a wrapper for c-library functions you
might want to have available in PHP too.

This program doesn't have a --help option. It has --no-help instead.

EXAMPLE

The following _one_ line

bool module_name_drawtext(resource image, string text, resource font, int x, int y [, int color])

will create this function definition for you (note that there are a few
question marks to be replaced by you, and you must of course add your own
value definitions too):

/* {{{ proto bool module_name_drawtext(resource image, string text, resource font, int x, int y [, int color])
*/
PHP_FUNCTION(module_name_drawtext)
{
char *text = NULL;
int argc = ZEND_NUM_ARGS();
int image_id = -1;
int text_len;
int font_id = -1;
long x;
long y;
long color;
zval *image = NULL;
zval *font = NULL;

if (zend_parse_parameters(argc TSRMLS_CC, "rsrll|l", &image, &text, &text_len, &font, &x, &y, &color) == FAILURE)
return;

if (image) {
ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???_rsrc_id);
}
if (font) {
ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???_rsrc_id);
}

php_error(E_WARNING, "module_name_drawtext: not yet implemented");
}
/* }}} */