⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdf.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*   +----------------------------------------------------------------------+   | PHP Version 4                                                        |   +----------------------------------------------------------------------+   | Copyright (c) 1997-2007 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.               |   +----------------------------------------------------------------------+   | Authors: Uwe Steinmann <Uwe.Steinmann@fernuni-hagen.de>              |   |          Hartmut Holzgraefe <hholzgra@php.net>                       |   +----------------------------------------------------------------------+ *//* $Id: fdf.c,v 1.66.2.13.2.5 2007/03/05 22:12:19 stas Exp $ *//* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from   http://beta1.adobe.com/ada/acrosdk/forms.html. *//* Note that there is no code from the FdfTk lib in this file */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "php.h"#include "php_open_temporary_file.h"#if HAVE_FDFLIB#include "SAPI.h"#include "ext/standard/info.h"#include "php_open_temporary_file.h"#include "php_variables.h"#include "php_fdf.h"#ifndef S_ISDIR#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)#endifstatic int le_fdf;SAPI_POST_HANDLER_FUNC(fdf_post_handler);/* {{{ fdf_functions[] */function_entry fdf_functions[] = {	PHP_FE(fdf_add_template,						NULL)	PHP_FE(fdf_close,								NULL)	PHP_FE(fdf_create,								NULL)	PHP_FE(fdf_enum_values,                         NULL)	PHP_FE(fdf_errno,        						NULL)	PHP_FE(fdf_error,        						NULL)	PHP_FE(fdf_get_ap,								NULL)	PHP_FE(fdf_get_encoding,						NULL)	PHP_FE(fdf_get_file,							NULL)	PHP_FE(fdf_get_flags,							NULL)	PHP_FE(fdf_get_opt,								NULL)	PHP_FE(fdf_get_status,							NULL)	PHP_FE(fdf_get_value,							NULL)	PHP_FE(fdf_get_version,                         NULL)	PHP_FE(fdf_next_field_name,						NULL)	PHP_FE(fdf_open,								NULL)	PHP_FE(fdf_open_string,							NULL)	PHP_FE(fdf_remove_item,                         NULL)	PHP_FE(fdf_save,								NULL)	PHP_FE(fdf_save_string,	        				NULL)	PHP_FE(fdf_set_ap,								NULL)	PHP_FE(fdf_set_encoding,						NULL)	PHP_FE(fdf_set_file,							NULL)	PHP_FE(fdf_set_flags,							NULL)	PHP_FE(fdf_set_javascript_action,				NULL)	PHP_FE(fdf_set_opt,								NULL)	PHP_FE(fdf_set_status,							NULL)	PHP_FE(fdf_set_submit_form_action,				NULL)	PHP_FE(fdf_set_value,							NULL)	PHP_FE(fdf_header,                              NULL)#ifdef HAVE_FDFTK_5	PHP_FE(fdf_add_doc_javascript,                  NULL)	PHP_FE(fdf_get_attachment,                      NULL)	PHP_FE(fdf_set_on_import_javascript,            NULL)	PHP_FE(fdf_set_target_frame,                    NULL)	PHP_FE(fdf_set_version,                         NULL)#endif	{NULL, NULL, NULL}};/* }}} */zend_module_entry fdf_module_entry = {    STANDARD_MODULE_HEADER,	"fdf", 	fdf_functions, 	PHP_MINIT(fdf), 	PHP_MSHUTDOWN(fdf), 	PHP_RINIT(fdf), 	NULL,	PHP_MINFO(fdf),     NO_VERSION_YET,	STANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_FDFZEND_GET_MODULE(fdf)#endifZEND_DECLARE_MODULE_GLOBALS(fdf)#define FDF_SUCCESS do { FDF_G(error)=FDFErcOK; RETURN_TRUE;} while(0)#define FDF_FAILURE(err)  do { FDF_G(error)=err; RETURN_FALSE;} while(0)static void phpi_FDFClose(zend_rsrc_list_entry *rsrc TSRMLS_DC){	FDFDoc fdf = (FDFDoc)rsrc->ptr;	(void) FDFClose(fdf);}#define FDF_POST_CONTENT_TYPE	"application/vnd.fdf"static sapi_post_entry php_fdf_post_entry =	{	FDF_POST_CONTENT_TYPE,	sizeof(FDF_POST_CONTENT_TYPE)-1,	sapi_read_standard_form_data,	fdf_post_handler};static void php_fdf_init_globals(zend_fdf_globals *fdf_globals){	memset(fdf_globals, 0, sizeof(*fdf_globals));}/* {{{ PHP_MINIT_FUNCTION */PHP_MINIT_FUNCTION(fdf){	ZEND_INIT_MODULE_GLOBALS(fdf, php_fdf_init_globals, NULL);	le_fdf = zend_register_list_destructors_ex(phpi_FDFClose, NULL, "fdf", module_number); 	/* add handler for Acrobat FDF form post requests */	sapi_register_post_entry(&php_fdf_post_entry);	/* Constants used by fdf_set_opt() */ 	REGISTER_LONG_CONSTANT("FDFValue", FDFValue, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFStatus", FDFStatus, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFFile", FDFFile, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFID", FDFID, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFFf", FDFFf, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFSetFf", FDFSetFf, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFClearFf", FDFClearFf, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFFlags", FDFFlags, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFSetF", FDFSetF, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFClrF", FDFClrF, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFAP", FDFAP, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFAS", FDFAS, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFAction", FDFAction, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFAA", FDFAA, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFAPRef", FDFAPRef, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFIF", FDFIF, CONST_CS | CONST_PERSISTENT);	/* Constants used by fdf_set_javascript_action() */	REGISTER_LONG_CONSTANT("FDFEnter", FDFEnter, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFExit", FDFExit, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFDown", FDFDown, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFUp", FDFUp, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFFormat", FDFFormat, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFValidate", FDFValidate, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFKeystroke", FDFKeystroke, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFCalculate", FDFCalculate, CONST_CS | CONST_PERSISTENT);	/* Constants used by fdf_(set|get)_ap */	REGISTER_LONG_CONSTANT("FDFNormalAP", 1, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFRolloverAP", 2, CONST_CS | CONST_PERSISTENT);	REGISTER_LONG_CONSTANT("FDFDownAP", 3, CONST_CS | CONST_PERSISTENT);	#ifdef PHP_WIN32	return SUCCESS;#else	return (FDFInitialize() == FDFErcOK) ? SUCCESS : FAILURE;#endif}/* }}} *//* {{{ RINIT */PHP_RINIT_FUNCTION(fdf){	return SUCCESS;}/* }}} *//* {{{ PHP_MINFO_FUNCTION */PHP_MINFO_FUNCTION(fdf){	/* need to use a PHPAPI function here because it is external module in windows */	php_info_print_table_start();	php_info_print_table_row(2, "FDF Support", "enabled");	php_info_print_table_row(2, "FdfTk Version", FDFGetVersion() );	php_info_print_table_end();}/* }}} *//* {{{ PHP_MSHUTDOWN_FUNCTION */PHP_MSHUTDOWN_FUNCTION(fdf){	/* remove handler for Acrobat FDF form post requests */	sapi_unregister_post_entry(&php_fdf_post_entry); #ifdef PHP_WIN32	return SUCCESS;#else	return (FDFFinalize() == FDFErcOK) ? SUCCESS : FAILURE;#endif}/* }}} *//* {{{ proto resource fdf_open(string filename)   Opens a new FDF document */PHP_FUNCTION(fdf_open) {	zval **file;	FDFDoc fdf;	FDFErc err;	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(file);	if (php_check_open_basedir(Z_STRVAL_PP(file) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(file), "wb+", CHECKUID_CHECK_MODE_PARAM))) {		RETURN_FALSE;	}	err = FDFOpen(Z_STRVAL_PP(file), 0, &fdf);	if(err != FDFErcOK || !fdf) {		if(err == FDFErcOK) err= FDFErcInternalError;		FDF_FAILURE(err);	}	ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);} /* }}} *//* {{{ proto resource fdf_open_string(string fdf_data)   Opens a new FDF document from string */PHP_FUNCTION(fdf_open_string) {	char *fdf_data;	int fdf_data_len;	FDFDoc fdf;	FDFErc err;	char *temp_filename;	FILE *fp;	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",							 &fdf_data, &fdf_data_len) 	   == FAILURE) {		return;	}	fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC);	if(!fp) {		RETURN_FALSE;	}	fwrite(fdf_data, fdf_data_len, 1, fp);	fclose(fp);	err = FDFOpen(temp_filename, 0, &fdf);	unlink(temp_filename);	efree(temp_filename);	if(err != FDFErcOK || !fdf) {		if(err == FDFErcOK) err= FDFErcInternalError;		FDF_FAILURE(err);	}	ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);} /* }}} *//* {{{ proto resource fdf_create(void)   Creates a new FDF document */PHP_FUNCTION(fdf_create) {	FDFDoc fdf;	FDFErc err;	if (ZEND_NUM_ARGS() != 0) {		WRONG_PARAM_COUNT;	}	err = FDFCreate(&fdf);	if(err != FDFErcOK || !fdf) {		if(err == FDFErcOK) err= FDFErcInternalError;		FDF_FAILURE(err);	}	ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);}/* }}} *//* {{{ proto bool fdf_close(resource fdfdoc)   Closes the FDF document */PHP_FUNCTION(fdf_close) {	zval **fdfp;	FDFDoc fdf;	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);	zend_list_delete(Z_RESVAL_PP(fdfp));} /* }}} *//* {{{ proto string fdf_get_value(resource fdfdoc, string fieldname [, int which])   Gets the value of a field as string */PHP_FUNCTION(fdf_get_value) {	zval *r_fdf;	char *fieldname;	int fieldname_len;	long which = -1;	FDFDoc fdf;	FDFErc err;	ASInt32 nr, size = 256;	char *buffer;	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l",							 &r_fdf, &fieldname, &fieldname_len,							 &which) 	   == FAILURE) {		return;	}	ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf);	buffer = emalloc(size);	if(which >= 0) {#if HAVE_FDFTK_5		err = FDFGetNthValue(fdf, fieldname, which, buffer, size-2, &nr);#else		php_error_docref(NULL TSRMLS_CC, E_WARNING, "the optional 'which' parameter requires FDF toolkit 5.0 or above, it will be ignored for now");		which = -1;#endif	} else {		err = FDFGetValue(fdf, fieldname, buffer, size-2, &nr);	}	if(err == FDFErcBufTooShort && nr > 0 ) {		buffer = erealloc(buffer, nr+2); 		if(which >= 0) {#if HAVE_FDFTK_5			err = FDFGetNthValue(fdf, fieldname, which, buffer, nr, &nr);#endif		} else {			err = FDFGetValue(fdf, fieldname, buffer, nr, &nr);		} #if HAVE_FDFTK_5	} else if((err == FDFErcValueIsArray) && (which == -1)) {		array_init(return_value);		which = 0;		do {			err = FDFGetNthValue(fdf, fieldname, which, buffer, size-2, &nr); 			if(err == FDFErcBufTooShort && nr > 0 ) {				buffer = erealloc(buffer, nr+2); 				err = FDFGetNthValue(fdf, fieldname, which, buffer, nr, &nr);			} 			if (err == FDFErcOK) {				add_next_index_string(return_value, buffer, 1);			} 			which++;		} while (err == FDFErcOK);		efree(buffer); 		buffer = NULL;#endif	}	if ((err != FDFErcOK) && (err != FDFErcNoValue)) {		if(buffer) efree(buffer);		FDF_FAILURE(err);	}	if(buffer) {		RETVAL_STRING(buffer, 1);		efree(buffer);	}	return;}/* }}} *//* {{{ proto bool fdf_set_value(resource fdfdoc, string fieldname, mixed value [, int isname])   Sets the value of a field */PHP_FUNCTION(fdf_set_value) {	zval **fdfp, **fieldname, **value, **dummy;	FDFDoc fdf;	FDFErc err;	switch(ZEND_NUM_ARGS()) {	case 3:		if (zend_get_parameters_ex(3, &fdfp, &fieldname, &value) == FAILURE) {			WRONG_PARAM_COUNT;		}		break;	case 4:		if (zend_get_parameters_ex(4, &fdfp, &fieldname, &value, &dummy) == FAILURE) {			WRONG_PARAM_COUNT;		}		break;	default:		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);	convert_to_string_ex(fieldname);	if (Z_TYPE_PP(value) == IS_ARRAY) {#ifdef HAVE_FDFTK_5		ASInt32 nValues = zend_hash_num_elements(Z_ARRVAL_PP(value));		char **newValues = ecalloc(nValues, sizeof(char *)), **next;		HashPosition   pos;		zval         **tmp;		next = newValues;		zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(value), &pos);		while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(value), 											 (void **) &tmp,											 &pos) == SUCCESS) {			convert_to_string_ex(tmp);			*next++ = estrdup(Z_STRVAL_PP(tmp));			zend_hash_move_forward_ex(Z_ARRVAL_PP(value), &pos);		}		err = FDFSetValues(fdf, Z_STRVAL_PP(fieldname), nValues, (const char **)newValues);				for(next = newValues; nValues; nValues--) {			efree(*next++);		}		efree(newValues);#else		php_error_docref(NULL TSRMLS_CC, E_WARNING, "setting array values is only possible with FDF toolkit 5.0 and above");		RETURN_FALSE;#endif	} else {		convert_to_string_ex(value);				err = FDFSetValue(fdf, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value), (ASBool)0 /*dummy*/);	}	if(err != FDFErcOK) {		FDF_FAILURE(err);	}	FDF_SUCCESS;}/* }}} *//* {{{ proto string fdf_next_field_name(resource fdfdoc [, string fieldname])   Gets the name of the next field name or the first field name */PHP_FUNCTION(fdf_next_field_name) {	zval **fdfp, **field;	int argc=ZEND_NUM_ARGS();	ASInt32 length=256, nr;	char *buffer=NULL, *fieldname=NULL;	FDFDoc fdf;	FDFErc err;	if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfp, &field) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);	if(argc == 2) {		convert_to_string_ex(field);		fieldname = Z_STRVAL_PP(field);	}	buffer = emalloc(length);	err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);	if(err == FDFErcBufTooShort && nr > 0 ) {		buffer = erealloc(buffer, nr+1); 		err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);	} 	if(err != FDFErcOK) {		efree(buffer);		FDF_FAILURE(err);	} 	RETVAL_STRING(buffer, 1);	efree(buffer);}/* }}} *//* {{{ proto bool fdf_set_ap(resource fdfdoc, string fieldname, int face, string filename, int pagenr)   Sets the appearence of a field */PHP_FUNCTION(fdf_set_ap) {	zval **fdfp, **fieldname, **face, **filename, **pagenr;	FDFDoc fdf;	FDFErc err;	FDFAppFace facenr;	if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &face, &filename, &pagenr) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);	convert_to_string_ex(fieldname);	convert_to_long_ex(face);	convert_to_string_ex(filename);	if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(filename), "wb+", CHECKUID_CHECK_MODE_PARAM))) {		RETURN_FALSE;	}	convert_to_long_ex(pagenr);	switch(Z_LVAL_PP(face)) {		case 1:			facenr = FDFNormalAP;			break;		case 2:			facenr = FDFRolloverAP;			break;		case 3:			facenr = FDFDownAP;			break;		default:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -