/** * Writes the meta-data to files * * @param string $key * @param array $data */ PHP_METHOD(Phalcon_Mvc_Model_MetaData_Files, write){ zval **key, **data, *meta_data_dir, *virtual_key; zval *path, *php_export, *status; smart_str exp = { NULL, 0, 0 }; phalcon_fetch_params_ex(2, 0, &key, &data); PHALCON_MM_GROW(); meta_data_dir = phalcon_fetch_nproperty_this(this_ptr, SL("_metaDataDir"), PH_NOISY TSRMLS_CC); PHALCON_INIT_VAR(virtual_key); phalcon_prepare_virtual_path_ex(virtual_key, Z_STRVAL_PP(key), Z_STRLEN_PP(key), '_' TSRMLS_CC); PHALCON_INIT_VAR(path); PHALCON_CONCAT_VVS(path, meta_data_dir, virtual_key, ".php"); smart_str_appends(&exp, "<?php return "); php_var_export_ex(data, 0, &exp TSRMLS_CC); smart_str_appendc(&exp, ';'); smart_str_0(&exp); PHALCON_INIT_VAR(php_export); ZVAL_STRINGL(php_export, exp.c, exp.len, 0); PHALCON_INIT_VAR(status); phalcon_file_put_contents(status, path, php_export TSRMLS_CC); if (PHALCON_IS_FALSE(status)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Meta-Data directory cannot be written"); return; } PHALCON_MM_RESTORE(); }
/** * Writes parsed annotations to files * * @param string $key * @param Phalcon\Annotations\Reflection $data */ PHP_METHOD(Phalcon_Annotations_Adapter_Files, write){ zval *key, *data, annotations_dir = {}, virtual_key = {}, path = {}, php_export = {}, status = {}; smart_str exp = { 0 }; phalcon_fetch_params(0, 2, 0, &key, &data); PHALCON_ENSURE_IS_STRING(key); phalcon_return_property(&annotations_dir, getThis(), SL("_annotationsDir")); /** * Paths must be normalized before be used as keys */ phalcon_prepare_virtual_path_ex(&virtual_key, Z_STRVAL_P(key), Z_STRLEN_P(key), '_'); PHALCON_CONCAT_VVS(&path, &annotations_dir, &virtual_key, ".php"); smart_str_appends(&exp, "<?php return "); php_var_export_ex(data, 0, &exp); smart_str_appendc(&exp, ';'); smart_str_0(&exp); ZVAL_STR(&php_export, exp.s); phalcon_file_put_contents(&status, &path, &php_export); if (PHALCON_IS_FALSE(&status)) { PHALCON_THROW_EXCEPTION_STRW(phalcon_annotations_exception_ce, "Annotations directory cannot be written"); return; } }
/** * var_export returns php variables without using the PHP userland */ void phalcon_var_export_ex(zval *return_value, zval *var) { smart_str buf = { 0 }; php_var_export_ex(var, 1, &buf); smart_str_0(&buf); ZVAL_STR(return_value, buf.s); }
void cpLogVar(zval *var) { smart_str buf = {0}; smart_str *buf_p = &buf; php_var_export_ex(var, 3, buf_p);//level 3? maybe 1 is enough #if PHP_MAJOR_VERSION < 7 if ((buf_p)->c) { \ (buf_p)->c[(buf_p)->len] = '\0'; \ } char *s1 = buf_p->c; #else if (buf_p->s) { ZSTR_VAL(buf_p->s)[ZSTR_LEN(buf_p->s)] = '\0'; } char *s1 = ZSTR_VAL(buf_p->s); #endif cpLog("%s", s1); smart_str_free(buf_p); }