- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
char *unserialize_php(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error)
{
const char* argv[] = {""};
std::string *value = (std::string*)initid->ptr;
PHP_EMBED_START_BLOCK(0, (char**)argv);
pfc_set_string(
UNSERIALIZE_PHP_TARGET_STRING,
args->args[0],
sizeof(UNSERIALIZE_PHP_TARGET_STRING),
args->lengths[0]);
// ЧИТО?!!!!
if(!pfc_evalf(__func__, "$%s=unserialize($%s); if(!$%s) $%s=null; else { "
"if(isset(%s) && !is_resource(%s) && !is_object(%s) && !is_null(%s) && !is_array(%s)) {"
"$%s=%s; } else { $%s=null; }}",
UNSERIALIZE_PHP_TARGET_OBJECT,
UNSERIALIZE_PHP_TARGET_STRING,
// if
UNSERIALIZE_PHP_TARGET_OBJECT,
UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE,
// else
args->args[1], // if(isset)
args->args[1], // if(is_resource)
args->args[1], // if(is_object)
args->args[1], // if(is_null)
args->args[1], // if(is_array)
UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE,
args->args[1],
UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE
))
{
strcpy(error,"eval return error.");
php_embed_shutdown(TSRMLS_C);
DEBUG_MSG("eval fail\n");
return 0;
}
if (!pfc_get_string(UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE,
value,
sizeof(UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE))) {
strcpy(error,"can't get output.");
php_embed_shutdown(TSRMLS_C);
DEBUG_MSG("get fail\n");
return 0;
}
*length = strlen(value->c_str());
if(*length==0)
{
*is_null = 1;
php_embed_shutdown(TSRMLS_C);
return 0;
}
PHP_EMBED_END_BLOCK();
return (char*)value->c_str();
}