📄 fdf.c
字号:
facenr = FDFNormalAP; break; } err = FDFSetAP(fdf, Z_STRVAL_PP(fieldname), facenr, NULL, Z_STRVAL_PP(filename), (ASInt32) Z_LVAL_PP(pagenr)); /* This should be made more intelligent, ie. use switch() with the possible errors this function can return. Or create global error handler function. */ if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS;}/* }}} *//* {{{ proto bool fdf_get_ap(resource fdfdoc, string fieldname, int face, string filename) Gets the appearance of a field and creates a PDF document out of it. */PHP_FUNCTION(fdf_get_ap) { zval *r_fdf; char *fieldname, *filename; int fieldname_len, filename_len; long face; FDFDoc fdf; FDFErc err; FDFAppFace facenr; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsls", &r_fdf, &fieldname, &fieldname_len, &face, &filename, &filename_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) { RETURN_FALSE; } switch(face) { case 1: facenr = FDFNormalAP; break; case 2: facenr = FDFRolloverAP; break; case 3: facenr = FDFDownAP; break; default: facenr = FDFNormalAP; break; } err = FDFGetAP(fdf, fieldname, facenr, filename); /* This should be made more intelligent, ie. use switch() with the possible errors this function can return. Or create global error handler function. */ if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS; }/* }}} *//* {{{ proto string fdf_get_encoding(resource fdf) Gets FDF file encoding scheme */PHP_FUNCTION(fdf_get_encoding) { zval *r_fdf; FDFDoc fdf; FDFErc err; char buffer[32]; ASInt32 len; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fdf) == FAILURE) { return; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); err = FDFGetEncoding(fdf, buffer, 32, &len); /* This should be made more intelligent, ie. use switch() with the possible errors this function can return. Or create global error handler function. */ if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_G(error) = FDFErcOK; RETURN_STRINGL(buffer, (size_t)len, 1);}/* }}} *//* {{{ proto bool fdf_set_status(resource fdfdoc, string status) Sets the value of /Status key */PHP_FUNCTION(fdf_set_status) { zval **fdfp, **status; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &status) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(status); err = FDFSetStatus(fdf, Z_STRVAL_PP(status)); if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS;}/* }}} *//* {{{ proto string fdf_get_status(resource fdfdoc) Gets the value of /Status key */PHP_FUNCTION(fdf_get_status) { zval **fdfp; ASInt32 nr, size = 256; char *buf; FDFDoc fdf; FDFErc err; 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); buf = emalloc(size); err = FDFGetStatus(fdf, buf, size-1, &nr); if(err == FDFErcBufTooShort && nr > 0 ) { buf = erealloc(buf, nr+1); err = FDFGetStatus(fdf, buf, size-1, &nr); } if(err != FDFErcOK) { efree(buf); FDF_FAILURE(err); } RETVAL_STRING(buf, 1); efree(buf);}/* }}} *//* {{{ proto bool fdf_set_file(resource fdfdoc, string filename [, string target_frame]) Sets the value of /F key */PHP_FUNCTION(fdf_set_file) { zval *r_fdf; char *filename, *target_frame= NULL; int filename_len, target_frame_len; FDFDoc fdf; FDFErc err; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s", &r_fdf, &filename, &filename_len, &target_frame, &target_frame_len) == FAILURE) { return; } if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) { RETURN_FALSE; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); err = FDFSetFile(fdf, filename); if(err != FDFErcOK) { FDF_FAILURE(err); } if(target_frame) {#ifdef HAVE_FDFTK_5 err = FDFSetTargetFrame(fdf, target_frame); if(err != FDFErcOK) { FDF_FAILURE(err); }#else php_error_docref(NULL TSRMLS_CC, E_WARNING, "setting the target frame is only possible with FDF toolkit 5.0 and above, ignoring it for now");#endif } FDF_SUCCESS;}/* }}} *//* {{{ proto string fdf_get_file(resource fdfdoc) Gets the value of /F key */PHP_FUNCTION(fdf_get_file) { zval **fdfp; ASInt32 nr, size = 256; char *buf; FDFDoc fdf; FDFErc err; 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); buf = emalloc(size); err = FDFGetFile(fdf, buf, size-1, &nr); if(err == FDFErcBufTooShort && nr > 0 ) { buf = erealloc(buf, nr+1); err = FDFGetFile(fdf, buf, size-1, &nr); } if(err != FDFErcOK) { efree(buf); FDF_FAILURE(err); } RETVAL_STRING(buf, 1); efree(buf);}/* }}} *//* {{{ proto mixed fdf_save(resource fdfdoc [, string filename]) Writes out the FDF file */PHP_FUNCTION(fdf_save) { zval *r_fdf; char *filename = NULL; int filename_len; FDFDoc fdf; FDFErc err; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s", &r_fdf, &filename, &filename_len) == FAILURE) { return; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); if(filename) { if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) { RETURN_FALSE; } err = FDFSave(fdf, filename); } else { FILE *fp; char *temp_filename; fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC); if(!fp) { err = FDFErcFileSysErr; } else { fclose(fp); err = FDFSave(fdf, temp_filename); if(err == FDFErcOK) { php_stream *stream = php_stream_open_wrapper(temp_filename, "rb", 0, NULL); if (stream) { php_stream_passthru(stream); php_stream_close(stream); } else { err = FDFErcFileSysErr; } } } if(temp_filename) { unlink(temp_filename); efree(temp_filename); } } if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS;} /* }}} *//* {{{ proto mixed fdf_save_string(resource fdfdoc) Returns the FDF file as a string */PHP_FUNCTION(fdf_save_string) { zval *r_fdf; FDFDoc fdf; FDFErc err; FILE *fp; char *temp_filename = NULL; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fdf) == FAILURE) { return; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC); if(!fp) { err = FDFErcFileSysErr; } else { fclose(fp); err = FDFSave(fdf, temp_filename); if(err == FDFErcOK) { fp = fopen(temp_filename, "rb"); if (fp) { struct stat stat; char *buf; if (fstat(fileno(fp), &stat) == -1) { RETVAL_FALSE; goto err; } buf = safe_emalloc(1, stat.st_size, 1); fread(buf, stat.st_size, 1, fp); buf[stat.st_size] = '\0'; fclose(fp); unlink(temp_filename); efree(temp_filename); RETURN_STRINGL(buf, stat.st_size, 0); } else { err = FDFErcFileSysErr; } } } if(err != FDFErcOK) { FDF_FAILURE(err); }err: if(temp_filename) { unlink(temp_filename); efree(temp_filename); } return;} /* }}} *//* {{{ proto bool fdf_add_template(resource fdfdoc, int newpage, string filename, string template, int rename) Adds a template into the FDF document */PHP_FUNCTION(fdf_add_template) { zval **fdfp, **newpage, **filename, **template, **rename; FDFDoc fdf; FDFErc err; pdfFileSpecRec filespec; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &newpage, &filename, &template, &rename) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_long_ex(newpage); convert_to_string_ex(filename); convert_to_string_ex(template); convert_to_long_ex(rename); 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; } filespec.FS = NULL; filespec.F = Z_STRVAL_PP(filename); filespec.Mac = NULL; filespec.DOS = NULL; filespec.Unix = NULL; filespec.ID[0] = NULL; filespec.ID[1] = NULL; filespec.bVolatile = false; err = FDFAddTemplate(fdf, (unsigned short)(Z_LVAL_PP(newpage)), &filespec, Z_STRVAL_PP(template), (unsigned short)(Z_LVAL_PP(rename))); if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS;}/* }}} *//* {{{ proto bool fdf_set_flags(resource fdfdoc, string fieldname, int whichflags, int newflags) Sets flags for a field in the FDF document */PHP_FUNCTION(fdf_set_flags) { zval **fdfp, **fieldname, **flags, **newflags; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &flags, &newflags) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(flags); convert_to_long_ex(newflags); err=FDFSetFlags(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(flags), Z_LVAL_PP(newflags)); if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS;}/* }}} *//* {{{ proto int fdf_get_flags(resorce fdfdoc, string fieldname, int whichflags) Gets the flags of a field */PHP_FUNCTION(fdf_get_flags) { zval *r_fdf; char *fieldname; int fieldname_len; long whichflags; FDFDoc fdf; FDFErc err; ASUns32 flags; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsl", &r_fdf, &fieldname, &fieldname_len, &whichflags) == FAILURE) { return; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); err = FDFGetFlags(fdf, fieldname, (FDFItem)whichflags, &flags); if(err != FDFErcOK) { FDF_FAILURE(err); } RETURN_LONG((long)flags);}/* }}} *//* {{{ proto bool fdf_set_opt(resource fdfdoc, string fieldname, int element, string value, string name) Sets a value in the opt array for a field */PHP_FUNCTION(fdf_set_opt){ zval **fdfp, **fieldname, **element, **value, **name; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &element, &value, &name) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); convert_to_string_ex(fieldname); convert_to_long_ex(element); convert_to_string_ex(value); convert_to_string_ex(name); err = FDFSetOpt(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(element), Z_STRVAL_PP(value), Z_STRVAL_PP(name)); if(err != FDFErcOK) { FDF_FAILURE(err); } FDF_SUCCESS;}/* }}} *//* {{{ proto mixed fdf_get_opt(resource fdfdof, string fieldname [, int element]) Gets a value from the opt array of a field */PHP_FUNCTION(fdf_get_opt) { zval *r_fdf; char *fieldname; int fieldname_len; long element = -1; FDFDoc fdf; FDFErc err; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &r_fdf, &fieldname, &fieldname_len, &element) == FAILURE) { return; } ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); if(element == -1) { ASInt32 elements; err = FDFGetOpt(fdf, fieldname, (ASInt32)-1, NULL, NULL, 0, &elements); if(err != FDFErcOK) { FDF_FAILURE(err); } RETURN_LONG((long)elements); } else { ASInt32 bufSize, nRet; char *buf1, *buf2; bufSize = 1024; buf1 = emalloc(bufSize); buf2 = emalloc(bufSize); err = FDFGetOpt(fdf, fieldname, (ASInt32)element, buf1, buf2, bufSize, &nRet); if(err == FDFErcBufTooShort) { efree(buf1); efree(buf2); buf1 = emalloc(nRet); buf2 = emalloc(nRet); bufSize = nRet; err = FDFGetOpt(fdf, fieldname, (ASInt32)element, buf1, buf2, bufSize, &nRet); } if(err != FDFErcOK) { FDF_FAILURE(err); } array_init(return_value); add_next_index_stringl(return_value, buf1, strlen(buf1), 1); add_next_index_stringl(return_value, buf2, strlen(buf2), 1); efree(buf1); efree(buf2); }}/* }}} *//* {{{ proto bool fdf_set_submit_form_action(resource fdfdoc, string fieldname, int whichtrigger, string url, int flags) Sets the submit form action for a field */PHP_FUNCTION(fdf_set_submit_form_action) { zval **fdfp, **fieldname, **trigger, **url, **flags; FDFDoc fdf; FDFErc err; if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &trigger, &url, &flags) == FAILURE) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -