patch contribution for DBMaker

From: Date: Wed, 05 Jul 2000 16:07:52 +0000
Subject: patch contribution for DBMaker
Groups: php.dev 
Request: Send a blank email to php-dev+get-23522@lists.php.net to get a copy of this message
Hey, there: We just added some patch to php CVS specifically for our database driver - DBMaker. As you might have known, DBMaker has been involved in the development of PHP for some time now. The modifications are made in four files, all in ext/odbc. They are Makefile.in (1.6) , config.m4 (1.19) , php_odbc.h (1.23) and php_odbc.c (1.58). For config.m4, we did some modifications to the paths to our database driver. For php_odbc.c, we did some modifications to passing length arguments to SQLBindParameter and add some function interfaces. For php_odbc.h we added two new function definitions. Would you please be kind enough to include this patch to the future releases of PHP as soon as possible? We really need this patch to be included so that our database users can use future releases of PHP without having to ask for patches from us. Thanks a lot. --chihfeng ************ BEGIN PATCH ***************************** diff -ur php-CVS/ext/odbc/Makefile.in php-CVS-new/ext/odbc/Makefile.in --- php-CVS/ext/odbc/Makefile.in Wed Jul 5 11:32:01 2000 +++ php-CVS-new/ext/odbc/Makefile.in Wed Jul 5 11:34:05 2000 @@ -1,5 +1,7 @@ LTLIBRARY_NAME = libodbc.la LTLIBRARY_SOURCES = php_odbc.c velocis.c +LTLIBRARY_SHARED_NAME = odbc.la +LTLIBRARY_SHARED_LIBADD = $(ODBC_LFLAGS) $(ODBC_LIBS) include $(top_srcdir)/build/dynlib.mk Only in php-CVS-new/ext/odbc: Makefile.in~ diff -ur php-CVS/ext/odbc/config.m4 php-CVS-new/ext/odbc/config.m4 --- php-CVS/ext/odbc/config.m4 Wed Jul 5 11:32:00 2000 +++ php-CVS-new/ext/odbc/config.m4 Wed Jul 5 11:33:23 2000 @@ -80,27 +80,6 @@ AC_MSG_RESULT(echo $ODBC_LIBS | sed -e 's!.*/!!') ]) -dnl -dnl Figure out the path where the newest DBMaker is installed. -dnl -AC_DEFUN(AC_FIND_DBMAKER_PATH,[ - AC_MSG_CHECKING([DBMaker version]) - if [ test -d "$1/4.0" ]; then - DBMAKER_PATH=$1/4.0 - elif [ test -d "$1/3.6" ]; then - DBMAKER_PATH=$1/3.6 - elif [ test -d "$1/3.5" ]; then - DBMAKER_PATH=$1/3.5 - elif [ test -d "$1/3.01" ]; then - DBMAKER_PATH=$1/3.01 - elif [ test -d "$1/3.0" ]; then - DBMAKER_PATH=$1/3.0 - else - DBMAKER_PATH=$1 - fi - AC_MSG_RESULT(echo $DBMAKER_PATH | sed -e 's!.*/!!') -]) - if test -z "$ODBC_TYPE"; then AC_MSG_CHECKING(for Adabas support) AC_ARG_WITH(adabas, @@ -396,12 +375,32 @@ version of DBMaker is installed (such as /home/dbmaker/3.6).], [ + PHP_WITH_SHARED if test "$withval" = "yes"; then # find dbmaker's home directory DBMAKER_HOME=grep "^dbmaker:" /etc/passwd | awk -F: '{print $6}' - AC_FIND_DBMAKER_PATH($DBMAKER_HOME) + + # check DBMaker version (from 5.0 to 2.0) + DBMAKER_VERSION=5.0 + + while [ test ! -d $DBMAKER_HOME/$DBMAKER_VERSION -a \ + "$DBMAKER_VERSION" != "2.9" ]; do + DM_VER=`echo $DBMAKER_VERSION | sed -e 's/\.//' | awk '{ print $1-1;}'` + MAJOR_V=`echo $DM_VER | awk '{ print $1/10; }' \ + | awk -F. '{ print $1; }'` + MINOR_V=echo $DM_VER | awk '{ print $1%10; }' + DBMAKER_VERSION=$MAJOR_V.$MINOR_V + done + + if [ "$DBMAKER_VERSION" = "2.9" ]; then + withval=$DBMAKER_HOME + else + DBMAKER_PATH=$DBMAKER_HOME/$DBMAKER_VERSION + fi + withval=$DBMAKER_PATH fi + if test "$withval" != "no"; then ODBC_INCDIR=$withval/include ODBC_LIBDIR=$withval/lib @@ -410,7 +409,21 @@ ODBC_INCLUDE=-I$ODBC_INCDIR ODBC_LIBS="-ldmapic -lc" ODBC_TYPE=dbmaker - AC_DEFINE(HAVE_DBMAKER,1,[ ]) + + AC_DEFINE(HAVE_DBMAKER,1,[Whether you want DBMaker]) + + if test "$shared" = "yes"; then + AC_MSG_RESULT(yes (shared)) + ODBC_LFLAGS="-L$withval/driver/JDBC" + ODBC_LIBS="-ldmjdbc -lc -lm" + ODBC_SHARED="odbc.la" + else + AC_MSG_RESULT(yes (static)) + AC_ADD_LIBRARY_WITH_PATH(dmapic, $ODBC_LIBDIR) + AC_ADD_INCLUDE($ODBC_INCDIR) + ODBC_STATIC="libphpext_odbc.la" + fi + AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) @@ -422,7 +435,9 @@ if test -n "$ODBC_TYPE"; then INCLUDES="$INCLUDES $ODBC_INCLUDE" - EXTRA_LIBS="$EXTRA_LIBS $ODBC_LFLAGS $ODBC_LIBS" + if test "$ODBC_TYPE" != "dbmaker"; then + EXTRA_LIBS="$EXTRA_LIBS $ODBC_LFLAGS $ODBC_LIBS" + fi AC_DEFINE(HAVE_UODBC,1,[ ]) PHP_SUBST(ODBC_INCDIR) PHP_SUBST(ODBC_INCLUDE) @@ -430,6 +445,6 @@ PHP_SUBST(ODBC_LIBS) PHP_SUBST(ODBC_LFLAGS) PHP_SUBST(ODBC_TYPE) - PHP_EXTENSION(odbc) + PHP_EXTENSION(odbc, $shared) fi Only in php-CVS-new/ext/odbc: config.m4~ diff -ur php-CVS/ext/odbc/php_odbc.c php-CVS-new/ext/odbc/php_odbc.c --- php-CVS/ext/odbc/php_odbc.c Wed Jul 5 11:32:01 2000 +++ php-CVS-new/ext/odbc/php_odbc.c Wed Jul 5 11:33:23 2000 @@ -74,6 +74,10 @@ PHP_FE(odbc_connect, NULL) PHP_FE(odbc_pconnect, NULL) PHP_FE(odbc_cursor, NULL) +#ifdef HAVE_DBMAKER + PHP_FE(odbc_fetch_array, NULL) + PHP_FE(odbc_fetch_object, NULL) +#endif PHP_FE(odbc_exec, NULL) PHP_FE(odbc_prepare, NULL) PHP_FE(odbc_execute, NULL) @@ -701,6 +705,10 @@ odbc_result *result = NULL; odbc_connection *conn; RETCODE rc; +#ifdef HAVE_SQL_EXTENDED_FETCH + UDWORD scrollopts; +#endif + if (zend_get_parameters_ex(2, &pv_conn, &pv_query) == FAILURE) { WRONG_PARAM_COUNT; @@ -732,6 +740,28 @@ RETURN_FALSE; } +#ifdef HAVE_SQL_EXTENDED_FETCH + /* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info, + whether Driver supports ExtendedFetch */ + rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL); + if (rc == SQL_SUCCESS) { + if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) { + /* Try to set CURSOR_TYPE to dynamic. Driver will replace this with other + type if not possible. + */ + if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, SQL_CURSOR_DYNAMIC) + == SQL_ERROR) { + odbc_sql_error(conn->henv, conn->hdbc, result->stmt, " SQLSetStmtOption"); + SQLFreeStmt(result->stmt, SQL_DROP); + efree(result); + RETURN_FALSE; + } + } + } else { + result->fetch_abs = 0; + } +#endif + if ((rc = SQLPrepare(result->stmt, query, SQL_NTS)) != SQL_SUCCESS) { odbc_sql_error(conn->henv, conn->hdbc, result->stmt, "SQLPrepare"); SQLFreeStmt(result->stmt, SQL_DROP); @@ -859,6 +889,9 @@ (void *)params[i-1].fp, 0, &params[i-1].vallen); } else { +#ifdef HAVE_DBMAKER + precision = params[i-1].vallen; +#endif rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT, ctype, sqltype, precision, scale, (*tmp)->value.str.val, 0, @@ -1086,6 +1119,161 @@ RETURN_RESOURCE(result->id); } /* }}} */ + +#ifdef HAVE_DBMAKER +#define ODBC_NUM 1 +#define ODBC_OBJECT 2 + +static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) +{ + int i; + odbc_result *result; + RETCODE rc; + SWORD sql_c_type; + char *buf = NULL; +#ifdef HAVE_SQL_EXTENDED_FETCH + UDWORD crow; + UWORD RowStatus[1]; + SDWORD rownum = -1; + pval **pv_res, **pv_row, *tmp; + + switch(ZEND_NUM_ARGS()) { + case 1: + if (zend_get_parameters_ex(1, &pv_res) == FAILURE) + WRONG_PARAM_COUNT; + break; + case 2: + if (zend_get_parameters_ex(2, &pv_res, &pv_row) == FAILURE) + WRONG_PARAM_COUNT; + convert_to_long_ex(pv_row); + rownum = (*pv_row)->value.lval; + break; + default: + WRONG_PARAM_COUNT; + } + +#else + pval **pv_res, *tmp; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pv_res) == FAILURE) { + WRONG_PARAM_COUNT; + } +#endif + + ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result); + + if (result->numcols == 0) { + php_error(E_WARNING, "No tuples available at this result index"); + RETURN_FALSE; + } + + if (array_init(return_value)==FAILURE) { + RETURN_FALSE; + } + +#ifdef HAVE_SQL_EXTENDED_FETCH + if (result->fetch_abs) { + if (rownum > 0) + rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,rownum,&crow,RowStatus); + else + rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus); + } else +#endif + rc = SQLFetch(result->stmt); + + if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) + RETURN_FALSE; + +#ifdef HAVE_SQL_EXTENDED_FETCH + if (rownum > 0 && result->fetch_abs) + result->fetched = rownum; + else +#endif + result->fetched++; + + for(i = 0; i < result->numcols; i++) { + ALLOC_ZVAL(tmp); + tmp->refcount = 1; + tmp->type = IS_STRING; + tmp->value.str.len = 0; + sql_c_type = SQL_C_CHAR; + + switch(result->values[i].coltype) { + case SQL_BINARY: + case SQL_VARBINARY: + case SQL_LONGVARBINARY: + if (result->binmode <= 0) { + tmp->value.str.val = empty_string; + break; + } + if (result->binmode == 1) sql_c_type = SQL_C_BINARY; + case SQL_LONGVARCHAR: + if (IS_SQL_LONG(result->values[i].coltype) && + result->longreadlen <= 0) { + tmp->value.str.val = empty_string; + break; + } + + if (buf == NULL) buf = emalloc(result->longreadlen + 1); + rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type, + buf, result->longreadlen + 1, &result->values[i].vallen); + + if (rc == SQL_ERROR) { + odbc_sql_error(result->conn_ptr->henv, result->conn_ptr->hdbc, result->stmt, "SQLGetData"); + efree(buf); + RETURN_FALSE; + } + if (rc == SQL_SUCCESS_WITH_INFO) { + tmp->value.str.len = result->longreadlen; + } else if (result->values[i].vallen == SQL_NULL_DATA) { + tmp->value.str.val = empty_string; + break; + } else { + tmp->value.str.len = result->values[i].vallen; + } + tmp->value.str.val = estrndup(buf, tmp->value.str.len); + break; + + default: + if (result->values[i].vallen == SQL_NULL_DATA) { + tmp->value.str.val = empty_string; + break; + } + tmp->value.str.len = result->values[i].vallen; + tmp->value.str.val = estrndup(result->values[i].value,tmp->value.str.len); + break; + } + if (result_type & ODBC_NUM) { + zend_hash_index_update(return_value->value.ht, i, &tmp, sizeof(pval *), NULL); + } else { + zend_hash_update(return_value->value.ht, result->values[i].name, strlen(result->values[i].name)+1, &tmp, sizeof(pval *), NULL); + } + } + if (buf) efree(buf); +} + + +/* {{{ proto object odbc_fetch_object(int result [, int rownumber]) + Fetch a result row as an object */ +PHP_FUNCTION(odbc_fetch_object) +{ + php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, ODBC_OBJECT); + if (return_value->type==IS_ARRAY) { + return_value->type=IS_OBJECT; + return_value->value.obj.properties = return_value->value.ht; + return_value->value.obj.ce = &zend_standard_class_def; + } +} +/* }}} */ + +/* {{{ proto array odbc_fetch_array(int result [, int rownumber]) + Fetch a result row as an associative array */ +PHP_FUNCTION(odbc_fetch_array) +{ + php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, ODBC_OBJECT); +} +/* }}} */ +#endif /* {{{ proto int odbc_fetch_into(int result_id [, int rownumber], array result_array) Fetch one result row into an array */ diff -ur php-CVS/ext/odbc/php_odbc.h php-CVS-new/ext/odbc/php_odbc.h --- php-CVS/ext/odbc/php_odbc.h Wed Jul 5 11:32:01 2000 +++ php-CVS-new/ext/odbc/php_odbc.h Wed Jul 5 11:33:23 2000 @@ -34,7 +34,9 @@ #define PHP_ODBC_H #if HAVE_UODBC +#ifndef HAVE_DBMAKER #define ODBCVER 0x0250 +#endif /*#ifndef MSVC5 #define FAR #endif @@ -139,6 +141,8 @@ #elif defined(HAVE_DBMAKER) /* DBMaker */ #define ODBC_TYPE "DBMaker" +#undef ODBCVER +#define ODBCVER 0x0300 #define HAVE_SQL_EXTENDED_FETCH 1 #include <odbc.h> @@ -189,6 +193,10 @@ PHP_FUNCTION(odbc_exec); PHP_FUNCTION(odbc_do); PHP_FUNCTION(odbc_execute); +#ifdef HAVE_DBMAKER +PHP_FUNCTION(odbc_fetch_array); +PHP_FUNCTION(odbc_fetch_object); +#endif PHP_FUNCTION(odbc_fetch_into); PHP_FUNCTION(odbc_fetch_row); PHP_FUNCTION(odbc_field_len); Only in php-CVS-new/ext/odbc: php_odbc.h~ *********************END PATCH ****************** begin 666 php-CVS-dbmaker.patch M9&EF9B M=7(@<&AP+4-64R]E>'0O;V1B8R]-86ME9FEL92YI;B!P:' M0U93 M+6YE=R]E>'0O;V1B8R]-86ME9FEL92YI;@HM+2T@<&AP+4-64R]E>'0O;V1B M8R]-86ME9FEL92YI;@E7960@2G5L(" U(#$Q.C,R.C Q(#(P,# **RLK('!H M<"U#5E,M;F5W+V5X="]O9&)C+TUA:V5F:6QE+FEN"5=E9"!*=6P@(#4@,3$Z M,S0Z,#4@,C P, I 0" M,2PU("LQ+#<@0$ *($Q43$E"4D%265].04U%(" @ M(#T@;&EB;V1B8RYL80H@3%1,24)205)97U-/55)#15,@/2!P:'!?;V1B8RYC M('9E;&]C:7,N8PHK3%1,24)205)97U-(05)%1%].04U%(" @(" @/2!O9&)C M+FQA"BM,5$Q)0E)!4EE?4TA!4D5$7TQ)0D%$1" @(" ]("0H3T1"0U],1DQ! M1U,I("0H3T1"0U],24)3*0H@"B!I;F-L=61E("0H=&]P7W-R8V1I<BDO8G5I M;&0O9'EN;&EB+FUK"B *3VYL>2!I;B!P:' M0U93+6YE=R]E>'0O;V1B8SH@ M36%K969I;&4N:6Y^"F1I9F8@+75R('!H<"U#5E,O97AT+V]D8F,O8V]N9FEG M+FTT('!H<"U#5E,M;F5W+V5X="]O9&)C+V-O;F9I9RYM- HM+2T@<&AP+4-6 M4R]E>'0O;V1B8R]C;VYF:6<N;30)5V5D($IU;" @-2 Q,3HS,CHP," R,# P M"BLK*R!P:' M0U93+6YE=R]E>'0O;V1B8R]C;VYF:6<N;30)5V5D($IU;" @ M-2 Q,3HS,SHR,R R,# P"D! ("TX,"PR-R K.# L-B! 0 H@("!!0U]-4T=? M4D5354Q4*&!E8VAO("1/1$)#7TQ)0E,@?"!S960@+64@)W,A+BHO(2$G8"D* M(%TI"B *+61N; HM9&YL($9I9W5R92!O=70@=&AE('!A=&@@=VAE<F4@=&AE M(&YE=V5S="!$0DUA:V5R(&ES(&EN<W1A;&QE9"X*+61N; HM04-?1$5&54XH M04-?1DE.1%]$0DU!2T527U!!5$@L6PHM("!!0U]-4T=?0TA%0TM)3D<H6T1" M36%K97(@=F5R<VEO;ETI"BT@(&EF(%L@=&5S=" M9" B)#$O-"XP(B!=.R!T M:&5N"BT@(" @1$)-04M%4E]0051(/20Q+S0N, HM("!E;&EF(%L@=&5S=" M M9" B)#$O,RXV(B!=.R!T:&5N"BT@(" @1$)-04M%4E]0051(/20Q+S,N-@HM M("!E;&EF(%L@=&5S=" M9" B)#$O,RXU(B!=.R!T:&5N"BT@(" @1$)-04M% M4E]0051(/20Q+S,N-0HM("!E;&EF(%L@=&5S=" M9" B)#$O,RXP,2(@73L@ M=&AE;@HM(" @($1"34%+15)?4$%42#TD,2\S+C Q"BT@(&5L:68@6R!T97-T M("UD("(D,2\S+C B(%T[('1H96X*+2 @("!$0DU!2T527U!!5$@])#$O,RXP M"BT@(&5L<V4*+2 @("!$0DU!2T527U!!5$@])#$*+2 @9FD*+2 @04-?35-' M7U)%4U5,5"A@96-H;R D1$)-04M%4E]0051(('P@<V5D("UE("=S(2XJ+R$A M)V I"BU=*0HM"B!I9B!T97-T("UZ("(D3T1"0U]465!%(CL@=&AE;@H@04-? M35-'7T-(14-+24Y'*&9O<B!!9&%B87,@<W5P<&]R="D*($%#7T%21U]7251( M*&%D86)A<RP*0$ @+3,Y-BPQ,B K,S<U+#,R($! "B @(" @(" @(" @(" @ M(" @(" @(" @(" @('9E<G-I;VX@;V8@1$)-86ME<B!I<R!I;G-T86QL960@ M*'-U8V@@87,*(" @(" @(" @(" @(" @(" @(" @(" @(" @+VAO;64O9&)M M86ME<B\S+C8I+ETL"B!;"BL@(%!(4%]7251(7U-(05)%1 H@("!I9B!T97-T M("(D=VET:'9A;"(@/2 B>65S(CL@=&AE;@H@(" @(",@9FEN9"!D8FUA:V5R M)W,@:&]M92!D:7)E8W1O<GD*(" @("!$0DU!2T527TA/344]8&=R97 @(EYD M8FUA:V5R.B(@+V5T8R]P87-S=V0@?"!A=VL@+48Z("=[<')I;G0@)#9])V * M+2 @("!!0U]&24Y$7T1"34%+15)?4$%42"@D1$)-04M%4E](3TU%*0HK"BL@ M(" @(R!C:&5C:R!$0DUA:V5R('9E<G-I;VX@*&9R;VT@-2XP('1O(#(N,"D* M*R @("!$0DU!2T527U9%4E-)3TX]-2XP"BL**R @("!W:&EL92!;('1E<W0@ M(2 M9" D1$)-04M%4E](3TU%+R1$0DU!2T527U9%4E-)3TX@+6$@7 HK(" @ M(" @(" @(" @(" @(" B)$1"34%+15)?5D524TE/3B(@(3T@(C(N.2(@73L@ M9&\**R @(" @(" @1$U?5D52/6!E8VAO("1$0DU!2T527U9%4E-)3TX@?"!S M960@+64@)W,O7"XO+R<@?"!A=VL@)WL@<')I;G0@)#$M,3M])V **R @(" @ M(" @34%*3U)?5CU@96-H;R D1$U?5D52('P@87=K("=[('!R:6YT("0Q+S$P M.R!])R!<"BL@(" @(" @(" @(" @(" @('P@87=K(" M1BX@)WL@<')I;G0@ M)#$[('TG8 HK(" @(" @("!-24Y/4E]6/6!E8VAO("1$35]615(@?"!A=VL@ M)WL@<')I;G0@)#$E,3 [('TG8 HK(" @(" @("!$0DU!2T527U9%4E-)3TX] M)$U!2D]27U8N)$U)3D]27U8**R @("!D;VYE"BL**R @("!I9B!;("(D1$)- M04M%4E]615)324].(B ]("(R+CDB(%T[('1H96X**R @(" @(" @=VET:'9A M;#TD1$)-04M%4E](3TU%"BL@(" @96QS90HK(" @(" @("!$0DU!2T527U!! M5$@])$1"34%+15)?2$]-12\D1$)-04M%4E]615)324]."BL@(" @9FD**PH@ M(" @('=I=&AV86P])$1"34%+15)?4$%42 H@("!F:0HK"B @(&EF('1E<W0@ M(B1W:71H=F%L(B A/2 B;F\B.R!T:&5N"B @(" @3T1"0U])3D-$25(])'=I M=&AV86PO:6YC;'5D90H@(" @($]$0D-?3$E"1$E2/21W:71H=F%L+VQI8@I M0" M-#$P+#<@*S0P.2PR,2! 0 H@(" @($]$0D-?24Y#3%5$13TM221/1$)# M7TE.0T1)4@H@(" @($]$0D-?3$E"4STB+6QD;6%P:6,@+6QC(@H@(" @($]$ M0D-?5%E013UD8FUA:V5R"BT@(" @04-?1$5&24Y%*$A!5D5?1$)-04M%4BPQ M+%L@72D**PHK(" @($%#7T1%1DE.12A(059%7T1"34%+15(L,2Q;5VAE=&AE M<B!Y;W4@=V%N="!$0DUA:V5R72D**PHK(" @(&EF('1E<W0@(B1S:&%R960B M(#T@(GEE<R([('1H96X**R @(" @(" @04-?35-'7U)%4U5,5"AY97,@*'-H M87)E9"DI"BL@(" @(" @($]$0D-?3$9,04=3/2(M3"1W:71H=F%L+V1R:79E M<B]*1$)#(@HK(" @(" @("!/1$)#7TQ)0E,](BUL9&UJ9&)C("UL8R M;&TB M"BL@(" @(" @($]$0D-?4TA!4D5$/2)O9&)C+FQA(@HK(" @(&5L<V4**R @ M(" @(" @04-?35-'7U)%4U5,5"AY97,@*'-T871I8RDI"BL@(" @(" @($%# M7T%$1%],24)205)97U=)5$A?4$%42"AD;6%P:6,L("1/1$)#7TQ)0D1)4BD* M*R @(" @(" @04-?041$7TE.0TQ51$4H)$]$0D-?24Y#1$E2*0HK(" @(" @ M("!/1$)#7U-4051)0STB;&EB<&AP97AT7V]D8F,N;&$B"BL@(" @9FD**PH@ M(" @($%#7TU31U]215-53%0H>65S*0H@("!E;'-E"B @(" @04-?35-'7U)% M4U5,5"AN;RD*0$ @+30R,BPW("LT,S4L.2! 0 H@"B!I9B!T97-T("UN("(D M3T1"0U]465!%(CL@=&AE;@H@("!)3D-,541%4STB)$E.0TQ51$53("1/1$)# M7TE.0TQ51$4B"BT@($585%)!7TQ)0E,](B1%6%1205],24)3("1/1$)#7TQ& M3$%'4R D3T1"0U],24)3(@HK("!I9B!T97-T("(D3T1"0U]465!%(B A/2 B M9&)M86ME<B([('1H96X**R @("!%6%1205],24)3/2(D15A44D%?3$E"4R D M3T1"0U],1DQ!1U,@)$]$0D-?3$E"4R(**R @9FD*(" @04-?1$5&24Y%*$A! M5D5?54]$0D,L,2Q;(%TI"B @(%!(4%]354)35"A/1$)#7TE.0T1)4BD*(" @ M4$A07U-50E-4*$]$0D-?24Y#3%5$12D*0$ @+30S,"PV("LT-#4L-B! 0 H@ M("!02%!?4U5"4U0H3T1"0U],24)3*0H@("!02%!?4U5"4U0H3T1"0U],1DQ! M1U,I"B @(%!(4%]354)35"A/1$)#7U194$4I"BT@(%!(4%]%6%1%3E-)3TXH M;V1B8RD**R @4$A07T585$5.4TE/3BAO9&)C+" D<VAA<F5D*0H@9FD*( I/ M;FQY(&EN('!H<"U#5E,M;F5W+V5X="]O9&)C.B!C;VYF:6<N;31^"F1I9F8@ M+75R('!H<"U#5E,O97AT+V]D8F,O<&AP7V]D8F,N8R!P:' M0U93+6YE=R]E M>'0O;V1B8R]P:'!?;V1B8RYC"BTM+2!P:' M0U93+V5X="]O9&)C+W!H<%]O M9&)C+F,)5V5D($IU;" @-2 Q,3HS,CHP,2 R,# P"BLK*R!P:' M0U93+6YE M=R]E>'0O;V1B8R]P:'!?;V1B8RYC"5=E9"!*=6P@(#4@,3$Z,S,Z,C,@,C P M, I 0" M-S0L-B K-S0L,3 @0$ *( E02%!?1D4H;V1B8U]C;VYN96-T+"!. M54Q,*0H@"5!(4%]&12AO9&)C7W!C;VYN96-T+"!.54Q,*0H@"5!(4%]&12AO M9&)C7V-U<G-O<BP@3E5,3"D**R-I9F1E9B!(059%7T1"34%+15(**R @(%!( M4%]&12AO9&)C7V9E=&-H7V%R<F%Y+"!.54Q,*0HK(" @4$A07T9%*&]D8F-? M9F5T8VA?;V)J96-T+"!.54Q,*0HK(V5N9&EF"B )4$A07T9%*&]D8F-?97AE M8RP@3E5,3"D*( E02%!?1D4H;V1B8U]P<F5P87)E+"!.54Q,*0H@"5!(4%]& M12AO9&)C7V5X96-U=&4L($Y53$PI"D! ("TW,#$L-B K-S U+#$P($! "B ) M;V1B8U]R97-U;'0@*G)E<W5L=" ]($Y53$P["B );V1B8U]C;VYN96-T:6]N M("IC;VYN.PH@"5)%5$-/1$4@<F,["BLC:69D968@2$%615]344Q?15A414Y$ M141?1D540T@**PE51%=/4D0@(" @("!S8W)O;&QO<'1S.PHK(V5N9&EF"BL* M( H@"6EF("AZ96YD7V=E=%]P87)A;65T97)S7V5X*#(L("9P=E]C;VYN+" F M<'9?<75E<GDI(#T]($9!24Q54D4I('L*( D)5U)/3D=?4$%204U?0T]53E0[ M"D! ("TW,S(L-B K-S0P+#(X($! "B )"5)%5%523E]&04Q313L*( E]"B * M*R-I9F1E9B!(059%7U-13%]%6%1%3D1%1%]&151#2 HK"2\J(%-O;&ED(&1O M97-N)W0@:&%V92!%>'1E;F1E9$9E=&-H+"!I9B!$<FEV97)-86YA9V5R(&ES M('5S960L(&=E="!);F9O+ HK"2 @('=H971H97(@1')I=F5R('-U<'!O<G1S M($5X=&5N9&5D1F5T8V@@*B\**PER8R ](%-13$=E=$EN9F\H8V]N;BT^:&1B M8RP@4U%,7T9%5$-(7T1)4D5#5$E/3BP@*'9O:60@*BD@)G-C<F]L;&]P=',L M('-I>F5O9BAS8W)O;&QO<'1S*2P@3E5,3"D["BL):68@*')C(#T](%-13%]3 M54-#15-3*2!["BL)"6EF("@H<F5S=6QT+3YF971C:%]A8G,@/2 H<V-R;VQL M;W!T<R F(%-13%]&1%]&151#2%]!0E-/3%5412DI*2!["BL)"0DO*B!4<GD@ M=&\@<V5T($-54E-/4E]465!%('1O(&1Y;F%M:6,N($1R:79E<B!W:6QL(')E M<&QA8V4@=&AI<R!W:71H(&]T:&5R"BL)"0D@("!T>7!E(&EF(&YO="!P;W-S M:6)L92X**PD)"2 J+PHK"0D):68@*%-13%-E=%-T;71/<'1I;VXH<F5S=6QT M+3YS=&UT+"!344Q?0U524T]27U194$4L(%-13%]#55)33U)?1%E.04U)0RD* M*PD)"0D]/2!344Q?15)23U(I('L**PD)"0EO9&)C7W-Q;%]E<G)O<BAC;VYN M+3YH96YV+"!C;VYN+3YH9&)C+"!R97-U;'0M/G-T;70L("(@4U%,4V5T4W1M M=$]P=&EO;B(I.PHK"0D)"5-13$9R9653=&UT*')E<W5L="T^<W1M="P@4U%, M7T123U I.PHK"0D)"65F<F5E*')E<W5L="D["BL)"0D)4D5455).7T9!3%-% M.PHK"0D)?0HK"0E]"BL)?2!E;'-E('L**PD)<F5S=6QT+3YF971C:%]A8G,@ M/2 P.PHK"7T**R-E;F1I9@HK"B ):68@*"AR8R ](%-13%!R97!A<F4H<F5S M=6QT+3YS=&UT+"!Q=65R>2P@4U%,7TY44RDI("$](%-13%]354-#15-3*2![ M"B )"6]D8F-?<W%L7V5R<F]R*&-O;FXM/FAE;G8L(&-O;FXM/FAD8F,L(')E M<W5L="T^<W1M="P@(E-13%!R97!A<F4B*3L*( D)4U%,1G)E95-T;70H<F5S M=6QT+3YS=&UT+"!344Q?1%)/4"D["D! ("TX-3DL-B K.#@Y+#D@0$ *( D) M"0D)"0D)"2 @*'9O:60@*BEP87)A;7-;:2TQ72YF<"P@,"P*( D)"0D)"0D) M"2 @)G!A<F%M<UMI+3%=+G9A;&QE;BD["B )"0E](&5L<V4@>PHK(VEF9&5F M($A!5D5?1$)-04M%4@HK(" @(" @(" @(" @(" @('!R96-I<VEO;B ]('!A M<F%M<UMI+3%=+G9A;&QE;CL**R-E;F1I9@H@"0D)"7)C(#T@4U%,0FEN9%!A M<F%M971E<BAR97-U;'0M/G-T;70L("A55T]21"EI+"!344Q?4$%204U?24Y0 M550L"B )"0D)"0D)"0D@(&-T>7!E+"!S<6QT>7!E+"!P<F5C:7-I;VXL('-C M86QE+ H@"0D)"0D)"0D)(" H*G1M<"DM/G9A;'5E+G-T<BYV86PL(# L"D! M("TQ,#@V+#8@*S$Q,3DL,38Q($! "B )4D5455).7U)%4T]54D-%*')E<W5L M="T^:60I.PH@?0H@+RH@?7U]("HO"BL**R-I9F1E9B!(059%7T1"34%+15(* M*R-D969I;F4@3T1"0U].54T)"3$**R-D969I;F4@3T1"0U]/0DI%0U0)"3(* M*PHK<W1A=&EC('9O:60@<&AP7V]D8F-?9F5T8VA?:&%S:"A)3E1%4DY!3%]& M54Y#5$E/3E]005)!345415)3+"!I;G0@<F5S=6QT7W1Y<&4I"BM["BL):6YT M(&D["BL);V1B8U]R97-U;'0@*G)E<W5L=#L**PE2151#3T1%(')C.PHK(" @ M(%-73U)$('-Q;%]C7W1Y<&4["BL)8VAA<B J8G5F(#T@3E5,3#L**R-I9F1E M9B!(059%7U-13%]%6%1%3D1%1%]&151#2 HK"55$5T]21"!C<F]W.PHK"557 M3U)$("!2;W=3=&%T=7-;,5T["BL)4T173U)$(')O=VYU;2 ]("TQ.PHK"7!V M86P@*BIP=E]R97,L("HJ<'9?<F]W+" J=&UP.PHK"0HK"7-W:71C:"A:14Y$ M7TY535]!4D=3*"DI('L**PD)8V%S92 Q.@HK"0D):68@*'IE;F1?9V5T7W!A M<F%M971E<G-?97@H,2P@)G!V7W)E<RD@/3T@1D%)3%5212D**PD)"0E74D]. M1U]005)!35]#3U5.5#L**PD)"6)R96%K.PHK"0EC87-E(#(Z"BL)"0EI9B H M>F5N9%]G971?<&%R86UE=&5R<U]E>"@R+" F<'9?<F5S+" M>F<'9?<F]W*2 ] M/2!&04E,55)%*0HK"0D)"5=23TY'7U!!4D%-7T-/54Y4.PHK"0D)8V]N=F5R M=%]T;U]L;VYG7V5X*'!V7W)O=RD["BL)"0ER;W=N=6T@/2 H*G!V7W)O=RDM M/G9A;'5E+FQV86P["BL)"0EB<F5A:SL**PD)9&5F875L=#H**PD)"5=23TY' M7U!!4D%-7T-/54Y4.PHK"7T**PHK(V5L<V4**PEP=F%L("HJ<'9?<F5S+" J M=&UP.PHK"BL):68@*%I%3D1?3E5-7T%21U,H*2 A/2 Q('Q\('IE;F1?9V5T M7W!A<F%M971E<G-?97@H,2P@)G!V7W)E<RD@/3T@1D%)3%5212D@>PHK"0E7 M4D].1U]005)!35]#3U5.5#L**PE]"BLC96YD:68**PD**PE:14Y$7T9%5$-( M7U)%4T]54D-%*')E<W5L="P@;V1B8U]R97-U;'0@*BP@<'9?<F5S+" M,2P@ M(D]$0D,@<F5S=6QT(BP@;&5?<F5S=6QT*3L**PD**PEI9B H<F5S=6QT+3YN M=6UC;VQS(#T](# I('L**PD)<&AP7V5R<F]R*$5?5T%23DE.1RP@(DYO('1U M<&QE<R!A=F%I;&%B;&4@870@=&AI<R!R97-U;'0@:6YD97@B*3L**PD)4D54 M55).7T9!3%-%.PHK"7T**PD**PEI9B H87)R87E?:6YI="AR971U<FY?=F%L M=64I/3U&04E,55)%*2!["BL)"5)%5%523E]&04Q313L**PE]"BL**R-I9F1E M9B!(059%7U-13%]%6%1%3D1%1%]&151#2 HK"6EF("AR97-U;'0M/F9E=&-H M7V%B<RD@>PHK"0EI9B H<F]W;G5M(#X@,"D**PD)"7)C(#T@4U%,17AT96YD M961&971C:"AR97-U;'0M/G-T;70L4U%,7T9%5$-(7T%"4T],551%+')O=VYU M;2PF8W)O=RQ2;W=3=&%T=7,I.PHK"0EE;'-E"BL)"0ER8R ](%-13$5X=&5N M9&5D1F5T8V@H<F5S=6QT+3YS=&UT+%-13%]&151#2%].15A4+#$L)F-R;W<L M4F]W4W1A='5S*3L**PE](&5L<V4**R-E;F1I9@HK"0ER8R ](%-13$9E=&-H M*')E<W5L="T^<W1M="D["BL**PEI9B H<F,@(3T@4U%,7U-50T-%4U,@)B8@ M<F,@(3T@4U%,7U-50T-%4U-?5TE42%])3D9/*0HK"0E215154DY?1D%,4T4[ M"BL**R-I9F1E9B!(059%7U-13%]%6%1%3D1%1%]&151#2 HK"6EF("AR;W=N M=6T@/B P("8F(')E<W5L="T^9F5T8VA?86)S*0HK"0ER97-U;'0M/F9E=&-H M960@/2!R;W=N=6T["BL)96QS90HK(V5N9&EF"BL)"7)E<W5L="T^9F5T8VAE M9"LK.PHK"BL)9F]R*&D@/2 P.R!I(#P@<F5S=6QT+3YN=6UC;VQS.R!I*RLI M('L**PD)04Q,3T-?6E9!3"AT;7 I.PHK"0ET;7 M/G)E9F-O=6YT(#T@,3L* M*PD)=&UP+3YT>7!E(#T@25-?4U1224Y'.PHK"0ET;7 M/G9A;'5E+G-T<BYL M96X@/2 P.PHK(" @(" @("!S<6Q?8U]T>7!E(#T@4U%,7T-?0TA!4CL**R @ M(" @(" **R @(" @(" @<W=I=&-H*')E<W5L="T^=F%L=65S6VE=+F-O;'1Y M<&4I('L**R @(" @(" @(" @(&-A<V4@4U%,7T))3D%263H**R @(" @(" @ M(" @(&-A<V4@4U%,7U9!4D))3D%263H**R @(" @(" @(" @(&-A<V4@4U%, M7TQ/3D=605)"24Y!4EDZ"BL@(" @(" @(" @(" @(" @:68@*')E<W5L="T^ M8FEN;6]D92 \/2 P*2!["BL@(" @(" @(" @(" @(" @(" @('1M<"T^=F%L M=64N<W1R+G9A;" ](&5M<'1Y7W-T<FEN9SL**R @(" @(" @(" @(" @(" @ M(" @8G)E86L["BL@(" @(" @(" @(" @(" @?0HK(" @(" @(" @(" @(" @ M(&EF("AR97-U;'0M/F)I;FUO9&4@/3T@,2D@<W%L7V-?='EP92 ](%-13%]# M7T))3D%263L@"BL@(" @(" @(" @("!C87-E(%-13%],3TY'5D%20TA!4CH* M*R @(" @(" @(" @(" @("!I9B H25-?4U%,7TQ/3D<H<F5S=6QT+3YV86QU M97-;:5TN8V]L='EP92D@)B8@"BL@(" @(" @(" @(" @(" @(" @<F5S=6QT M+3YL;VYG<F5A9&QE;B \/2 P*2!["BL@(" @(" @(" @(" @(" @(" @('1M M<"T^=F%L=64N<W1R+G9A;" ](&5M<'1Y7W-T<FEN9SL**R @(" @(" @(" @ M(" @(" @(" @8G)E86L["BL@(" @(" @(" @(" @(" @?0HK(" @(" @(" * M*R @(" @(" @(" @(" @("!I9B H8G5F(#T]($Y53$PI(&)U9B ](&5M86QL M;V,H<F5S=6QT+3YL;VYG<F5A9&QE;B K(#$I.PHK(" @(" @(" @(" @(" @ M(')C(#T@4U%,1V5T1&%T82AR97-U;'0M/G-T;70L("A55T]21"DH:2 K(#$I M+'-Q;%]C7W1Y<&4L"BL)"0D)"0D)"6)U9BP@<F5S=6QT+3YL;VYG<F5A9&QE M;B K(#$L("9R97-U;'0M/G9A;'5E<UMI72YV86QL96XI.PHK"BL)"0D)"6EF M("AR8R ]/2!344Q?15)23U(I('L**PD)"0D);V1B8U]S<6Q?97)R;W(H<F5S M=6QT+3YC;VYN7W!T<BT^:&5N=BP@<F5S=6QT+3YC;VYN7W!T<BT^:&1B8RP@ M<F5S=6QT+3YS=&UT+" B4U%,1V5T1&%T82(I.PHK"0D)"0EE9G)E92AB=68I M.PHK"0D)"0E215154DY?1D%,4T4["BL)"0D)?0HK"0D)"6EF("AR8R ]/2!3 M44Q?4U5#0T534U]7251(7TE.1D\I('L**PD)"0D)=&UP+3YV86QU92YS='(N M;&5N(#T@<F5S=6QT+3YL;VYG<F5A9&QE;CL**PD)"0E](&5L<V4@:68@*')E M<W5L="T^=F%L=65S6VE=+G9A;&QE;B ]/2!344Q?3E5,3%]$051!*2!["BL) M"0D)"71M<"T^=F%L=64N<W1R+G9A;" ](&5M<'1Y7W-T<FEN9SL**PD)"0D) M8G)E86L["BL)"0D)?2!E;'-E('L**PD)"0D)=&UP+3YV86QU92YS='(N;&5N M(#T@<F5S=6QT+3YV86QU97-;:5TN=F%L;&5N.PHK"0D)"7T**PD)"0ET;7 M M/G9A;'5E+G-T<BYV86P@/2!E<W1R;F1U<"AB=68L('1M<"T^=F%L=64N<W1R M+FQE;BD["BL)"0D)8G)E86L["BL**PD)"61E9F%U;'0Z"BL)"0D):68@*')E M<W5L="T^=F%L=65S6VE=+G9A;&QE;B ]/2!344Q?3E5,3%]$051!*2!["BL) M"0D)"71M<"T^=F%L=64N<W1R+G9A;" ](&5M<'1Y7W-T<FEN9SL**PD)"0D) M8G)E86L["BL)"0D)?0HK"0D)"71M<"T^=F%L=64N<W1R+FQE;B ](')E<W5L M="T^=F%L=65S6VE=+G9A;&QE;CL**PD)"0ET;7 M/G9A;'5E+G-T<BYV86P@ M/2!E<W1R;F1U<"AR97-U;'0M/G9A;'5E<UMI72YV86QU92QT;7 M/G9A;'5E M+G-T<BYL96XI.PHK"0D)"6)R96%K.PHK"0E]"BL)"6EF("AR97-U;'1?='EP M92 F($]$0D-?3E5-*2!["BL)"0EZ96YD7VAA<VA?:6YD97A?=7!D871E*')E M='5R;E]V86QU92T^=F%L=64N:'0L(&DL("9T;7 L('-I>F5O9BAP=F%L("HI M+"!.54Q,*3L**PD)?2!E;'-E('L**PD)"7IE;F1?:&%S:%]U<&1A=&4H<F5T M=7)N7W9A;'5E+3YV86QU92YH="P@<F5S=6QT+3YV86QU97-;:5TN;F%M92P@ M<W1R;&5N*')E<W5L="T^=F%L=65S6VE=+FYA;64I*S$L("9T;7 L('-I>F5O M9BAP=F%L("HI+"!.54Q,*3L**PD)?0HK"7T**PEI9B H8G5F*2!E9G)E92AB M=68I.PHK?0HK"BL**R\J('M[>R!P<F]T;R!O8FIE8W0@;V1B8U]F971C:%]O M8FIE8W0H:6YT(')E<W5L="!;+"!I;G0@<F]W;G5M8F5R72D**R @($9E=&-H M(&$@<F5S=6QT(')O=R!A<R!A;B!O8FIE8W0@*B\**U!(4%]&54Y#5$E/3BAO M9&)C7V9E=&-H7V]B:F5C="D**WL**PEP:'!?;V1B8U]F971C:%]H87-H*$E. M5$523D%,7T953D-424].7U!!4D%-7U!!4U-42%)5+"!/1$)#7T]"2D5#5"D[ M"BL):68@*')E='5R;E]V86QU92T^='EP93T]25-?05)205DI('L**PD)<F5T M=7)N7W9A;'5E+3YT>7!E/4E37T]"2D5#5#L**PD)<F5T=7)N7W9A;'5E+3YV M86QU92YO8FHN<')O<&5R=&EE<R ](')E='5R;E]V86QU92T^=F%L=64N:'0[ M"BL)"7)E='5R;E]V86QU92T^=F%L=64N;V)J+F-E(#T@)GIE;F1?<W1A;F1A M<F1?8VQA<W-?9&5F.PHK"7T**WT**R\J('U]?2 J+PHK"BLO*B![>WL@<')O M=&\@87)R87D@;V1B8U]F971C:%]A<G)A>2AI;G0@<F5S=6QT(%LL(&EN="!R M;W=N=6UB97)=*0HK(" @1F5T8V@@82!R97-U;'0@<F]W(&%S(&%N(&%S<V]C M:6%T:79E(&%R<F%Y("HO"BM02%!?1E5.0U1)3TXH;V1B8U]F971C:%]A<G)A M>2D**WL**R @(" @(" @<&AP7V]D8F-?9F5T8VA?:&%S:"A)3E1%4DY!3%]& M54Y#5$E/3E]005)!35]005-35$A252P@3T1"0U]/0DI%0U0I.PHK?0HK+RH@ M?7U]("HO"BLC96YD:68*( H@+RH@>WM[('!R;W1O(&EN="!O9&)C7V9E=&-H M7VEN=&\H:6YT(')E<W5L=%]I9"!;+"!I;G0@<F]W;G5M8F5R72P@87)R87D@ M<F5S=6QT7V%R<F%Y*0H@(" @1F5T8V@@;VYE(')E<W5L="!R;W<@:6YT;R!A M;B!A<G)A>2 J+R *9&EF9B M=7(@<&AP+4-64R]E>'0O;V1B8R]P:'!?;V1B M8RYH('!H<"U#5E,M;F5W+V5X="]O9&)C+W!H<%]O9&)C+F@*+2TM('!H<"U# M5E,O97AT+V]D8F,O<&AP7V]D8F,N: E7960@2G5L(" U(#$Q.C,R.C Q(#(P M,# **RLK('!H<"U#5E,M;F5W+V5X="]O9&)C+W!H<%]O9&)C+F@)5V5D($IU M;" @-2 Q,3HS,SHR,R R,# P"D! ("TS-"PW("LS-"PY($! "B C9&5F:6YE M(%!(4%]/1$)#7T@*( H@(VEF($A!5D5?54]$0D,**R-I9FYD968)2$%615]$ M0DU!2T52"B C9&5F:6YE($]$0D-615(@,'@P,C4P"BLC96YD:68*("\J(VEF M;F1E9B!-4U9#-0H@(V1E9FEN92!&05(*("-E;F1I9@I 0" M,3,Y+#8@*S$T M,2PX($! "B C96QI9B!D969I;F5D*$A!5D5?1$)-04M%4BD@+RH@1$)-86ME M<B J+PH@"B C9&5F:6YE($]$0D-?5%E012 B1$)-86ME<B(**R-U;F1E9B!/ M1$)#5D52"BLC9&5F:6YE($]$0D-615(@,'@P,S P"B C9&5F:6YE($A!5D5? M4U%,7T585$5.1$5$7T9%5$-((#$*("-I;F-L=61E(#QO9&)C+F@^"B *0$ @ M+3$X.2PV("LQ.3,L,3 @0$ *(%!(4%]&54Y#5$E/3BAO9&)C7V5X96,I.PH@ M4$A07T953D-424].*&]D8F-?9&\I.PH@4$A07T953D-424].*&]D8F-?97AE M8W5T92D["BLC:69D968@2$%615]$0DU!2T52"BM02%!?1E5.0U1)3TXH;V1B M8U]F971C:%]A<G)A>2D["BM02%!?1E5.0U1)3TXH;V1B8U]F971C:%]O8FIE M8W0I.PHK(V5N9&EF"B!02%!?1E5.0U1)3TXH;V1B8U]F971C:%]I;G1O*3L* M(%!(4%]&54Y#5$E/3BAO9&)C7V9E=&-H7W)O=RD["B!02%!?1E5.0U1)3TXH M;V1B8U]F:65L9%]L96XI.PI/;FQY(&EN('!H<"U#5E,M;F5W+V5X="]O9&)C ..B!P:'!?;V1B8RYH?@H` ` end

« previous php.dev (#23522) next »