PHP 7.2 upgrade

This commit is contained in:
2020-09-03 01:29:48 -04:00
parent fd19e7ba24
commit 1ca8f24087
35 changed files with 15576 additions and 352675 deletions
+33
View File
@@ -0,0 +1,33 @@
PHP_ARG_ENABLE(coregrade_api,
[Whether to enable the "coregrade_api" extension],
[ --enable-coregrade_api Enable "coregrade_api" extension support])
if test $PHP_COREGRADE_API != "no"; then
PHP_REQUIRE_CXX()
PHP_SUBST(COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_INCLUDE(/usr/include/pgsql)
PHP_ADD_LIBRARY_WITH_PATH(pq, /usr/lib64, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(curl, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(config++, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(json-c, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(ssl, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(z, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(pcrecpp, 1, COREGRADE_API_SHARED_LIBADD)
PHP_ADD_LIBRARY(gcc_s, 1, COREGRADE_API_SHARED_LIBADD)
#LIBCFG_DIR="`pwd`/libconfig-1.3.1"
#PHP_ADD_LIBRARY_WITH_PATH(config++, "$LIBCFG_DIR/.libs/")
PHP_NEW_EXTENSION(
coregrade_api,
core/*.cc shared_tool/*.cc,
$ext_shared,
,-I@ext_srcdir@/libconfig-1.0.1)
PHP_DEFINE([COREGRADE_API_NS],[\"coregrade_api\"],[])
PHP_DEFINE([COREGRADE_CONFIG],[\"`pwd|sed s/src//`etc/\"],[])
PHP_DEFINE([COREGRADE_LOG],[\"`pwd|sed s/src//`logs/coregrade_api.log\"],[])
PHP_DEFINE([TMPL_PREFIX],[\"`pwd|sed s/src//`email/\"],[])
PHP_DEFINE([FILELOG_MAX_LEVEL],[9],[])
fi
+21 -44
View File
@@ -7,16 +7,17 @@ WORK_DIR=`pwd`
MAILSEND="$WORK_DIR/src/mailsend"
LIBCONFIG="$WORK_DIR/src/libconfig-1.3.1"
# Checking user
if [ "$USER" = "root" ]
if [ "$USER" = "toor" ]
then
# This is legacy reference, we are using system 1.5 now
echo "Configuring as root"
LIBCONFIG_PREFIX="/usr"
echo "Building $LIBCONFIG ..."
cd $LIBCONFIG
#echo `pwd` $LIBCONFIG_PREFIX
CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure --prefix=$LIBCONFIG_PREFIX
make
make install
# echo "Building $LIBCONFIG ..."
# cd $LIBCONFIG
# #echo `pwd` $LIBCONFIG_PREFIX
# CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure --prefix=$LIBCONFIG_PREFIX
# make
# make install
fi
mkdir $WORK_DIR/logs
chmod a+w $WORK_DIR/logs
@@ -24,51 +25,27 @@ mkdir $WORK_DIR/src/modules
# Building mailsend
cd $MAILSEND
make
cp mailsend ../modules/
# Configure extension
cd $WORK_DIR/src/
#####echo "Generating interswitch proxy..."
#####cd shared_tool/soap
#####wsdl2h -ninterswitch -Ninterswitch -qinterswitch -o QuickTellerService.h https://stageserv.interswitchng.com/uat_quicktellerservice/quickteller.svc?wsdl
#wsdl2h -o QuickTellerService.h https://stageserv.interswitchng.com/uat_quicktellerservice/quickteller.svc?wsdl
#####soapcpp2 -n -pinterswitch -qinterswitch -1 -C -i -I/usr/share/gsoap/import/ QuickTellerService.h
#soapcpp2 -C -i -I/usr/share/gsoap/import/ QuickTellerService.h
## copy C++
#cp soapC.cpp ../soapC.cc
#cp soapBasicHttpBinding_USCOREQuickTellerServiceProxy.cpp ../soapBasicHttpBinding_USCOREQuickTellerServiceProxy.cc
## copy headers
#cp soapH.h ../../include/
#cp soapBasicHttpBinding_USCOREQuickTellerServiceProxy.h ../../include/
#cp BasicHttpBinding_USCOREQuickTellerService.nsmap ../../include/
#cp soapStub.h ../../include/
# copy C++
#####cp interswitchC.cpp ../interswitchC.cc
#####cp interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy.cpp ../interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy.cc
# copy headers
#####cp interswitchH.h ../../include/
#####cp interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy.h ../../include/
#####cp interswitch.nsmap ../../include/
#####cp interswitchStub.h ../../include/
#####cd ../..
echo "Generating paylid proxy..."
cd shared_tool/paylid
wsdl2h -npaylid -Npaylid -qpaylid -o PaylidService.h http://www.paylid.com/rsl/service.php?wsdl
soapcpp2 -n -ppaylid -qpaylid -1 -C -i -I/usr/share/gsoap/import/ PaylidService.h
# copy C++
cp paylidC.cpp ../paylidC.cc
cp paylidpaylidwsdlBindingProxy.cpp ../paylidpaylidwsdlBindingProxy.cc
# copy headers
cp paylidH.h ../../include/
cp paylidStub.h ../../include/
cp paylid.nsmap ../../include/
cp paylidpaylidwsdlBindingProxy.h ../../include/
cd ../..
# Patch files
LUSER=$(id -u -n)
UUSER=$(id -u -n | awk '{print toupper($0)}')
cat ../build/config.m4 | sed s/coregrade_api/coregrade_api_$LUSER/g | sed s/COREGRADE_API/COREGRADE_API_$UUSER/g > config.m4
cat ../build/php_coregrade_api_ns.h | sed s/COREGRADE_API/COREGRADE_API_$UUSER/g | sed s/coregrade_api/coregrade_api_$LUSER/g > include/php_coregrade_api_ns.h
cat ../build/php_coregrade_api.h | sed s/coregrade_api/coregrade_api_$LUSER/g | sed s/COREGRADE_API/COREGRADE_API_$UUSER/g > include/php_coregrade_api.h
cat ../build/coregrade_api.cc | sed s/tcoregradeapit/coregrade_api_$LUSER/g | sed s/COREGRADE_API/COREGRADE_API_$UUSER/g > core/coregrade_api.cc
# Generate extension
phpize
./configure --enable-coregrade_api
./configure
# --enable-coregrade_api_$LUSER
#_`id -u -n`
echo "done."
cd $BUILD_DIR
echo $BUILD_DIR
echo $WORK_DIR
echo $USER
+304
View File
@@ -0,0 +1,304 @@
#include "php_coregrade_api.h"
#include "php_coregrade_api_ns.h"
#include "coregrade.h"
#include "cfg.h"
#include "clog.h"
#include "vars.h"
#include "safestring.h"
#include <string.h>
#include <map>
#include <ext/standard/info.h>
zend_object_handlers coregrade_object_handlers;
typedef struct _coregrade_object {
CoreGrade *coregrade;
zend_object std;
} coregrade_object;
static inline coregrade_object *php_coregrade_obj_from_obj(zend_object *obj) {
return (coregrade_object*)((char*)(obj) - XtOffsetOf(coregrade_object, std));
}
#define Z_TSTOBJ_P(zv) php_coregrade_obj_from_obj(Z_OBJ_P((zv)))
zend_class_entry *coregrade_ce;
#define SET_ENV( env ) \
if (NULL != (token = zend_hash_str_find(_SERVER, env, sizeof(env)-1))) {\
setenv( env, Z_STRVAL_P(token), 1 ); \
logfmt( logINFO, env " = %s", Z_STRVAL_P(token) ); \
} else {\
unsetenv( env );\
}
// ------------------------------------------------------------------
// ------------------------------------------------------------------
PHP_METHOD(CoreGrade, __construct)
{
HashTable *_SERVER;
zval *token;
zval *id = getThis();
coregrade_object *intern;
intern = Z_TSTOBJ_P(id);
if(intern != NULL) {
intern->coregrade = new CoreGrade();
// Load some _SERVER data into environment
zend_string *_server = zend_string_init("_SERVER", strlen("_SERVER"), 0);
zend_is_auto_global(_server);
if (Z_TYPE(PG(http_globals)[TRACK_VARS_SERVER]) == IS_UNDEF) {
logfmt( logINFO, "_SERVER not found" );
} else {
logfmt( logINFO, "_SERVER found" );
_SERVER = Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]);
SET_ENV( "REMOTE_ADDR" );
SET_ENV( "SERVER_NAME" );
SET_ENV( "HTTP_COOKIE" );
SET_ENV( "QUERY_STRING" );
SET_ENV( "HTTP_X_FORWARDED_FOR" );
}
zend_string_release(_server);
}
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
PHP_METHOD(CoreGrade, coregrade_api)
{
zval *param, *param_out;
zval *id = getThis();
coregrade_object *intern;
CVars input, output;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &param, &param_out) == FAILURE) {
// Bad parameters
RETURN_NULL();
}
intern = Z_TSTOBJ_P(id);
if(intern != NULL) {
// Convert input
HashTable *hash;
zend_string *key, val;
ulong num_key;
uint key_len;
zval *value;
convert_to_array_ex( param );
hash = HASH_OF( param );
zend_hash_internal_pointer_reset( hash );
ZEND_HASH_FOREACH_KEY_VAL(hash, num_key, key, value) {
if (key) { //HASH_KEY_IS_STRING
if (Z_TYPE_P(value) == IS_STRING) {
input[ ZSTR_VAL(key) ] = Z_STRVAL_P(value);
/*
} else if (Z_TYPE_P(value) == IS_LONG) {
input[ ZSTR_VAL(key) ] = Z_LVAL_P(value);
} else if (Z_TYPE_P(value) == IS_DOUBLE) {
input[ ZSTR_VAL(key) ] = Z_DVAL_P(value);
} else if (Z_TYPE_P(value) == _IS_BOOL) {
input[ ZSTR_VAL(key) ] = Z_BVAL(value) ? 1L : 0L;
} else if (Z_TYPE_P(value) == IS_NULL) {
input[ ZSTR_VAL(key) ] = ""; */
} else {
//logfmt( logINFO, "Item %s has unsupported value type", ZSTR_VAL(key) );
convert_to_string(value);
input[ ZSTR_VAL(key) ] = Z_STRVAL_P(value);
}
}
} ZEND_HASH_FOREACH_END();
long retval = intern->coregrade->coregrade_api(input, output);
// Convert output
convert_to_array_ex( param_out );
CVars::iterator i;
int j = 0;
const int out_size = output.size(); // 200
const int out_value_size = 200;
char out_key[out_value_size], out_value[out_value_size];
for ( i=output.begin(); i != output.end() && j<out_size ; i++ ) {
bzero(out_key, out_value_size);
bzero(out_value, out_value_size);
j++;
logfmt( logINFO, "RET: %s=%s", i->first.c_str(), i->second.c_str() );
strsafecpy( out_key, i->first.c_str(), out_value_size );
strsafecpy( out_value, i->second.c_str(), out_value_size );
add_assoc_string( param_out, out_key, out_value);
}
RETURN_LONG(retval);
}
RETURN_NULL();
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
PHP_METHOD(CoreGrade, cfgReadChar)
{
unsigned char *parameter;
zval *id = getThis();
coregrade_object *intern;
if (zend_parse_parameters(
ZEND_NUM_ARGS() TSRMLS_CC, "s", &parameter) == FAILURE) {
RETURN_NULL();
}
intern = Z_TSTOBJ_P(id);
if(intern != NULL) {
std::string s = intern->coregrade->cfgReadChar((char*)parameter);
RETURN_STRING(s.c_str());
}
RETURN_NULL();
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
PHP_METHOD(CoreGrade, cfgReadLong)
{
unsigned char *parameter;
zval *id = getThis();
coregrade_object *intern;
if (zend_parse_parameters(
ZEND_NUM_ARGS() TSRMLS_CC, "s", &parameter) == FAILURE) {
RETURN_NULL();
}
intern = Z_TSTOBJ_P(id);
if(intern != NULL) {
RETURN_LONG(intern->coregrade->cfgReadLong((char*)parameter));
}
RETURN_NULL();
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
PHP_METHOD(CoreGrade, logMessage)
{
unsigned char *message;
zval *id = getThis();
coregrade_object *intern;
if (zend_parse_parameters(
ZEND_NUM_ARGS() TSRMLS_CC, "s", &message) == FAILURE) {
RETURN_FALSE;
}
intern = Z_TSTOBJ_P(id);
if(intern != NULL) {
intern->coregrade->logMessage((char*)message);
RETURN_TRUE;
}
RETURN_FALSE;
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
const zend_function_entry coregrade_methods[] = {
PHP_ME(CoreGrade, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
PHP_ME(CoreGrade, coregrade_api, NULL, ZEND_ACC_PUBLIC)
PHP_ME(CoreGrade, cfgReadChar, NULL, ZEND_ACC_PUBLIC)
PHP_ME(CoreGrade, cfgReadLong, NULL, ZEND_ACC_PUBLIC)
PHP_ME(CoreGrade, logMessage, NULL, ZEND_ACC_PUBLIC)
PHP_FE_END
};
// ------------------------------------------------------------------ // ------------------------------------------------------------------
zend_object *coregrade_object_new(zend_class_entry *ce TSRMLS_DC)
{
coregrade_object *intern = (coregrade_object*)ecalloc(1,
sizeof(coregrade_object) +
zend_object_properties_size(ce));
zend_object_std_init(&intern->std, ce TSRMLS_CC);
object_properties_init(&intern->std, ce);
intern->std.handlers = &coregrade_object_handlers;
return &intern->std;
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
static void coregrade_object_destroy(zend_object *object)
{
coregrade_object *my_obj;
my_obj = (coregrade_object*)((char *)
object - XtOffsetOf(coregrade_object, std));
// Call __destruct() from user-land.
zend_objects_destroy_object(object);
}
static void coregrade_object_free(zend_object *object)
{
coregrade_object *my_obj;
my_obj = (coregrade_object *)((char *)
object - XtOffsetOf(coregrade_object, std));
delete my_obj->coregrade;
// Free the object using Zend macro.
zend_object_std_dtor(object);
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
PHP_MINIT_FUNCTION(tcoregradeapit)
{
zend_class_entry ce;
INIT_NS_CLASS_ENTRY(ce, COREGRADE_API_NS, "CoreGrade", coregrade_methods);
coregrade_ce = zend_register_internal_class(&ce TSRMLS_CC);
coregrade_ce->create_object = coregrade_object_new;
memcpy(&coregrade_object_handlers,
zend_get_std_object_handlers(),
sizeof(coregrade_object_handlers));
// Handler for free'ing the object.
coregrade_object_handlers.free_obj = coregrade_object_free;
// Handler for the destructor.
coregrade_object_handlers.dtor_obj = coregrade_object_destroy;
// Offset into the engine.
coregrade_object_handlers.offset = XtOffsetOf(coregrade_object, std);
return SUCCESS;
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
PHP_MINFO_FUNCTION(tcoregradeapit)
{
php_info_print_table_start();
php_info_print_table_row(2, "COREGRADE API support", "enabled");
php_info_print_table_row(2, "Log File", COREGRADE_LOG);
php_info_print_table_row(2, "Config File", COREGRADE_CONFIG"coregrade_api.conf");
php_info_print_table_row(2, "Build Date", __DATE__);
php_info_print_table_row(2, "Build Time", __TIME__);
php_info_print_table_row(2, "Namespace", COREGRADE_API_NS);
php_info_print_table_row(2, "Version", PHP_COREGRADE_API_EXTVER);
php_info_print_table_end();
}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
zend_module_entry tcoregradeapit_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
PHP_COREGRADE_API_EXTNAME,
NULL, /* Functions */
PHP_MINIT(tcoregradeapit),
NULL, /* MSHUTDOWN */
NULL, /* RINIT */
NULL, /* RSHUTDOWN */
PHP_MINFO(tcoregradeapit), /* MINFO */
#if ZEND_MODULE_API_NO >= 20010901
PHP_COREGRADE_API_EXTVER,
#endif
STANDARD_MODULE_PROPERTIES
};
//#ifdef COMPILE_DL_COREGRADE_API
extern "C" {
ZEND_GET_MODULE(tcoregradeapit)
}
//#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef PHP_COREGRADE_API_H
#define PHP_COREGRADE_API_H
#define PHP_COREGRADE_API_EXTNAME "coregrade_api"
#define PHP_COREGRADE_API_EXTVER "0.1"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
extern "C" {
#include "php.h"
}
extern zend_module_entry coregrade_api_module_entry;
#define coregrade_api_module_ptr &coregrade_api_module_entry
#define phpext_coregrade_api_ptr coregrade_api_module_ptr
#endif /* PHP_COREGRADE_API_H */
+1
View File
@@ -0,0 +1 @@
#define COREGRADE_API_NS "coregrade_api"