Diff for /embedaddon/php/UPGRADING.INTERNALS between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 23:47:51 version 1.1.1.2, 2012/05/29 12:34:34
Line 1 Line 1
 $Id$  $Id$
   
UPGRADE NOTES - PHP 5.3.4UPGRADE NOTES - PHP X.Y
   
 1. Internal API changes  1. Internal API changes
     a. virtual_file_ex
     b. stat/lstat support
     c. readlink support
     d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...)
     e. Zend\zend_fast_cache.h has been removed
     f. streams that enclose private streams
     g. leak_variable
     h. API Signature changes
     i. new TSRM function expand_filepath_with_mode
   
   2. Build system changes
     a. Unix build system changes
     b. Windows build system changes
   
   
 ========================  ========================
 1. Internal API changes  1. Internal API changes
 ========================  ========================
   
        a. stat/lstat support        a. virtual_file_ex
   
   virtual_file_ex takes now a TSRM context as last parameter:
   CWD_API int virtual_file_ex(cwd_state *state, const char *path, 
    verify_path_func verify_path, int use_realpath TSRLS_DC);
   
   
           b. stat/lstat support
   
 lstat is now available on all platforms. On unix-like platform  lstat is now available on all platforms. On unix-like platform
 php_sys_lstat is an alias to lstat (when avaible). On Windows it is now   php_sys_lstat is an alias to lstat (when avaible). On Windows it is now 
 available using php_sys_lstat. php_sys_stat and php_sys_lstat usage is recommended   available using php_sys_lstat. php_sys_stat and php_sys_lstat usage is recommended 
 instead of calling lstat directly, to ensure portability.  instead of calling lstat directly, to ensure portability.
   
         b. readlink support  
   
           c. readlink support
   
 readlink is now available on all platforms. On unix-like platform  readlink is now available on all platforms. On unix-like platform
 php_sys_readlink is an alias to readlink (when avaible). On Windows it is now   php_sys_readlink is an alias to readlink (when avaible). On Windows it is now 
 available using php_sys_readlink. php_sys_readlink usage is recommended   available using php_sys_readlink. php_sys_readlink usage is recommended 
 instead of calling readlink directly, to ensure portability.  instead of calling readlink directly, to ensure portability.
   
   
           d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...)
   
   . zend_function.pass_rest_by_reference is replaced by
     ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags
   . zend_function.return_reference is replaced by ZEND_ACC_RETURN_REFERENCE
     in zend_function.fn_flags
   . zend_arg_info.required_num_args removed. it was needed only for internal
     functions. Now the first arg_info for internal function (which has special
     meaning) is represented by zend_internal_function_info structure.
   . zend_op_array.size, size_var, size_literal, current_brk_cont,
     backpatch_count moved into CG(context), because they are used only during
     compilation.
   . zend_op_array.start_op is moved into EG(start_op), because it's used
     only for 'interactive' execution of single top-level op-array.
   . zend_op_array.done_pass_two is replaced by ZEND_ACC_DONE_PASS_TWO in
     zend_op_array.fn_flags.
   . op_array.vars array is trimmed (reallocated) during pass_two.
   . zend_class_entry.constants_updated is replaced by
     ZEND_ACC_CONSTANTS_UPDATED in zend_class_entry.ce_flags
   . the size of zend_class_entry is reduced by sharing the same memory space
     by different information for internal and user classes.
     See zend_class_inttry.info union. 
     
   
           e. Zend\zend_fast_cache.h 
   
   It should not have been used anymore since php5, but now this header has
   been removed. The following macros are not available anymore:
   
   ZEND_FAST_ALLOC(p, type, fc_type)
   ZEND_FAST_FREE(p, fc_type)
   ZEND_FAST_ALLOC_REL(p, type, fc_type)
   ZEND_FAST_FREE_REL(p, fc_type)
   
   Use emalloc, emalloc_rel, efree or efree_rel instead.
   
   
           f. Streams that enclose private streams
   
   Some streams, like the temp:// stream, may enclose private streams. If the
   outer stream leaks due to a programming error or is not exposed through a
   zval (and therefore is not deleted when all the zvals are gone), it will
   be destroyed on shutdown.
   The problem is that the outer usually wants itself to close the inner stream,
   so that it may do any other shutdown action that requires the inner stream to
   be live (e.g. commit data to it). If the outer stream is exposed through a
   zval and the inner one isn't, this is not a problem because the outer stream
   will be freed when the zval is destroyed, which happens before the resources
   are destroyed on shutdown.
   On resource list shutdown, the cleanup happens in reverse order of resource
   creation, so if the inner stream was created in the opener of the outer stream,
   it will be destroyed first.
   The following functions were added to the streams API to force a predictable
   destruction order:
   
   PHPAPI php_stream *php_stream_encloses(php_stream *enclosing, php_stream *enclosed);
   #define php_stream_free_enclosed(stream_enclosed, close_options)
   PHPAPI int _php_stream_free_enclosed(php_stream *stream_enclosed, int close_options TSRMLS_DC);
   
   Additionally, the following member was added to php_stream:
   
           struct _php_stream *enclosing_stream;
       
   and the following macro was added:
   
   #define PHP_STREAM_FREE_IGNORE_ENCLOSING        32
   
   The function php_stream_encloses declares the first stream encloses the second.
   This has the effect that, when the inner stream is closed from a resource
   destructor it will abort and try to free its enclosing stream instead.
   To prevent this from happening when the inner stream is freed from the outer
   stream, the macro php_stream_free_enclosed should be used instead of
   php_stream_free/php_stream_close/php_stream_pclose, or the flag
   PHP_STREAM_FREE_IGNORE_ENCLOSING should be directly passed to php_stream_free.
   The outer stream cannot abstain, in its close callback, from closing the inner
   stream or clear the enclosing_stream pointer in its enclosed stream by calling
   php_stream_encloses with the 2nd argument NULL. If this is not done, there will
   be problems, so observe this requirement when using php_stream_encloses.
   
   
           g. leak_variable
   
   The function leak_variable(variable [, leak_data]) was added. It is only
   available on debug builds. It increments the refcount of a zval or, if the
   second argument is true and the variable is either an object or a resource
   it increments the refcounts of those objects instead.
   
   
           h. API Signature changes
   
   . zend_list_insert
     ZEND_API int zend_list_insert(void *ptr, int type TSRMLS_DC);
     call: zend_list_insert(a, SOMETYPE TSRMLS_CC);
     NB: If zend_list_insert is used to register a resource, 
     ZEND_REGISTER_RESOURCE could be used instead.
   
   . php_le_stream_context(TSRMLS_C)
     PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D)
     call: context  = php_stream_context_alloc(TSRMLS_C);
   
   . php_stream_context_alloc
     PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D);
     call: context  = php_stream_context_alloc(TSRMLS_C);
   
   . sapi_get_request_time(TSRMLS_D);
     SAPI_API double sapi_get_request_time(TSRMLS_D);
   
   . sapi_register_default_post_reader
     SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC);
   
   . sapi_register_treat_data
     SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC);
   
   . sapi_register_input_filter
     SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D) TSRMLS_DC);
    
   . tsrm_win32_access
     TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC);
   
   . popen_ex (win32)
     TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC);
   
   . php_get_current_user
     PHPAPI php_get_current_user(TSRMLS_D)
     Call: char *user = php_get_current_user(TSRMLS_C);
   
   . php_idate
     PHPAPI php_idate(char format, time_t ts, int localtime TSRMLS_DC)
     Call: int ret = php_idate(format, ts, localtime TSRMLS_CC)
   
   . php_escape_html_entities
     (size_t parameters were ints, previous "quote_style" (now flags) has expanded meaning)
     PHPAPI char *php_escape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
   
   . php_escape_html_entities_ex
     PHPAPI char *php_escape_html_entities_ex(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset, zend_bool double_encode TSRMLS_DC);
   
   . php_unescape_html_entities
     PHPAPI char *php_unescape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
   
     i. 
     PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int realpath_mode TSRMLS_DC);
     expand_filepath_with_mode lets define how realpath will behave, using one of the existing mode: CWD_EXPAND , CWD_FILEPATH or CWD_REALPATH.
   
   ========================
   2. Build system changes
   ========================
   
     a. Unix build system changes
   
       - Changes in SAPI module build:
         . When adding new binary SAPI (executable, like CLI/CGI/FPM) use CLI config.m4 and Makefile.frag files as templates and replace CLI/cli with your SAPI name.
   
       - New macros:
         . PHP_INIT_DTRACE(providerdesc, header-file, sources [, module])
   
   
     b. Windows build system changes
       -
     

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>