summaryrefslogtreecommitdiff
path: root/main/php.h
Commit message (Collapse)AuthorAgeFilesLines
...
* | Fixed the UTF-8 and long path support in the streams on Windows.Anatol Belski2016-06-201-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since long the default PHP charset is UTF-8, however the Windows part is out of step with this important point. The current implementation in PHP doesn't technically permit to handle UTF-8 filepath and several other things. Till now, only the ANSI compatible APIs are being used. Here is more about it https://msdn.microsoft.com/en-us/library/windows/desktop/dd317752%28v=vs.85%29.aspx The patch fixes not only issues with multibyte filenames under incompatible codepages, but indirectly also issues with some other multibyte encodings like BIG5, Shift-JIS, etc. by providing a clean way to access filenames in UTF-8. Below is a small list of issues from the bug tracker, that are getting fixed: https://bugs.php.net/63401 https://bugs.php.net/41199 https://bugs.php.net/50203 https://bugs.php.net/71509 https://bugs.php.net/64699 https://bugs.php.net/64506 https://bugs.php.net/30195 https://bugs.php.net/65358 https://bugs.php.net/61315 https://bugs.php.net/70943 https://bugs.php.net/70903 https://bugs.php.net/63593 https://bugs.php.net/54977 https://bugs.php.net/54028 https://bugs.php.net/43148 https://bugs.php.net/30730 https://bugs.php.net/33350 https://bugs.php.net/35300 https://bugs.php.net/46990 https://bugs.php.net/61309 https://bugs.php.net/69333 https://bugs.php.net/45517 https://bugs.php.net/70551 https://bugs.php.net/50197 https://bugs.php.net/72200 https://bugs.php.net/37672 Yet more related tickets can for sure be found - on bugs.php.net, Stackoverflow and Github. Some of the bugs are pretty recent, some descend to early 2000th, but the user comments in there last even till today. Just for example, bug #30195 was opened in 2004, the latest comment in there was made in 2014. It is certain, that these bugs descend not only to pure PHP use cases, but get also redirected from the popular PHP based projects. Given the modern systems (and those supported by PHP) are always based on NTFS, there is no excuse to keep these issues unresolved. The internalization approach on Windows is in many ways different from UNIX and Linux, while it supports and is based on Unicode. It depends on the current system code page, APIs used and exact kind how the binary was compiled The locale doesn't affect the way Unicode or ANSI API work. PHP in particular is being compiled without _UNICODE defined and this is conditioned by the way we handle strings. Here is more about it https://msdn.microsoft.com/en-us/library/tsbaswba.aspx However, with any system code page ANSI functions automatically convert paths to UTF-16. Paths in some encodings incompatible with the current system code page, won't work correctly with ANSI APIs. PHP till now only uses the ANSI Windows APIs. For example, on a system with the current code page 1252, the paths in cp1252 are supported and transparently converted to UTF-16 by the ANSI functions. Once one wants to handle a filepath encoded with cp932 on that particular system, an ANSI or a POSIX compatible function used in PHP will produce an erroneous result. When trying to convert that cp932 path to UTF-8 and passing to the ANSI functions, an ANSI function would likely interpret the UTF-8 string as some string in the current code page and create a filepath that represents every single byte of the UTF-8 string. These behaviors are not only broken but also disregard the documented INI settings. This patch solves the issies with the multibyte paths on Windows by intelligently enforcing the usage of the Unicode aware APIs. For functions expect Unicode (fe CreateFileW, FindFirstFileW, etc.), arguments will be converted to UTF-16 wide chars. For functions returning Unicode aware data (fe GetCurrentDirectoryW, etc.), resulting wide string is converted back to char's depending on the current PHP charset settings, either to the current ANSI codepage (this is the behavior prior to this patch) or to UTF-8 (the default behavior). In a particular case, users might have to explicitly set internal_encoding or default_charset, if filenames in ANSI codepage are necessary. Current tests show no regressions and witness that this will be an exotic case, the current default UTF-8 encoding is compatible with any supported system. The dependency libraries are long switching to Unicode APIs, so some tests were also added for extensions not directly related to streams. At large, the patch brings over 150 related tests into the core. Those target and was run on various environments with European, Asian, etc. codepages. General PHP frameworks was tested and showed no regressions. The impact on the current C code base is low, the most places affected are the Windows only places in the three files tsrm_win32.c, zend_virtual_cwd.c and plain_wrapper.c. The actual implementation of the most of the wide char supporting functionality is in win32/ioutil.* and win32/codepage.*, several low level functionsare extended in place to avoid reimplementation for now. No performance impact was sighted. As previously mentioned, the ANSI APIs used prior the patch perform Unicode conversions internally. Using the Unicode APIs directly while doing custom conversions just retains the status quo. The ways to optimize it are open (fe. by implementing caching for the strings converted to wide variants). The long path implementation is user transparent. If a path exceeds the length of _MAX_PATH, it'll be automatically prefixed with \\?\. The MAXPATHLEN is set to 2048 bytes. Appreciation to Pierre Joye, Matt Ficken, @algo13 and others for tips, ideas and testing. Thanks.
* | fix php_log_err macroAnatol Belski2016-06-081-0/+5
| |
* | fix typoAnatol Belski2016-06-021-1/+1
| |
* | Added backwards compability with php_log_err by using macroJani Ollikainen2016-06-021-1/+2
| |
* | Logging to syslog with dynamic error levels (related to #49467)Jani Ollikainen2016-06-021-1/+1
| |
* | Merge branch 'PHP-7.0'Nikita Popov2016-02-141-9/+3
|\ \ | |/
| * Fix format attributes in ZTSNikita Popov2016-02-141-9/+3
| |
* | Remove use of register keyword in headersNikita Popov2016-02-041-1/+1
|/ | | | | | | Headers must be C++ compatible -- this throws warnings. The register keyword is not used for optimization, at least not in optimized builds.
* Merge branch 'PHP-5.6' into PHP-7.0Lior Kaplan2016-01-011-1/+1
|\ | | | | | | | | * PHP-5.6: Happy new year (Update copyright to 2016)
| * Happy new year (Update copyright to 2016)Lior Kaplan2016-01-011-1/+1
| |
| * bump yearXinchen Hui2015-01-151-1/+1
| |
* | increase API versionsAnatol Belski2015-10-121-1/+1
| |
* | Mark error functions as "cold"Dmitry Stogov2015-08-241-6/+6
| |
* | Ignore getcwd return in zend_compileNikita Popov2015-07-161-5/+1
| | | | | | | | To do this move the php_ignore_value macro to ZEND_IGNORE_VALUE.
* | bump yearXinchen Hui2015-01-151-1/+1
| |
* | Faster sorting algoXinchen Hui2015-01-141-1/+1
| |
* | trailing whitespace removalStanislav Malyshev2015-01-101-1/+1
| |
* | first shot remove TSRMLS_* thingsAnatol Belski2014-12-131-14/+14
| |
* | reworked the patch, less new stuff but workyAnatol Belski2014-09-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TLS is already used in TSRM, the way exporting the tsrm cache through a thread local variable is not portable. Additionally, the current patch suffers from bugs which are hard to find, but prevent it to be worky with apache. What is done here is mainly uses the idea from the RFC patch, but - __thread variable is removed - offset math and declarations are removed - extra macros and definitions are removed What is done merely is - use an inline function to access the tsrm cache. The function uses the portable tsrm_tls_get macro which is cheap - all the TSRM_* macros are set to placebo. Thus this opens the way remove them later Except that, the logic is old. TSRMLS_FETCH will have to be done once per thread, then tsrm_get_ls_cache() can be used. Things seeming to be worky are cli, cli server and apache. I also tried to enable bz2 shared and it has worked out of the box. The change is yet minimal diffing to the current master bus is a worky start, IMHO. Though will have to recheck the other previously done SAPIs - embed and cgi. The offsets can be added to the tsrm_resource_type struct, then it'll not be needed to declare them in the userspace. Even the "done" member type can be changed to int16 or smaller, then adding the offset as int16 will not change the struct size. As well on the todo might be removing the hashed storage, thread_id != thread_id and linked list logic in favour of the explicit TLS operations.
* | native tls initial patchkrakjoe2014-09-201-1/+1
| |
* | s/PHP 5/PHP 7/Johannes Schlüter2014-09-191-1/+1
| |
* | Revert "remove a few gcc format attributes from some printf-like functions"Nikita Popov2014-09-031-4/+10
| | | | | | | | This reverts commit 25f5ba94aca1e89ee5f0c66513e58826afa3b853.
* | remove a few gcc format attributes from some printf-like functionsNuno Lopes2014-08-311-10/+4
| | | | | | | | Since now PHP's printf-like functions have many custom specifiers, the amount of false-positives wasnt worth it
* | fixed several long vs zend_long castsAnatol Belski2014-08-261-1/+1
| |
* | master renames phase 3Anatol Belski2014-08-251-11/+2
| |
* | master renames phase 1Anatol Belski2014-08-251-3/+3
| |
* | added php_off_t aliasAnatol Belski2014-08-191-0/+1
| |
* | first shot on merging the core fro the int64 branchAnatol Belski2014-08-161-2/+10
| |
* | Merge branch 'PHP-5.6'Yasuo Ohgaki2014-02-131-0/+1
|\ \ | |/ | | | | | | * PHP-5.6: Implement RFC https://wiki.php.net/rfc/default_encoding
| * Implement RFC https://wiki.php.net/rfc/default_encodingYasuo Ohgaki2014-02-131-0/+1
| |
* | Merge branch 'PHP-5.6'Xinchen Hui2014-01-031-1/+1
|\ \ | |/
| * Bump yearXinchen Hui2014-01-031-1/+1
| |
| * bump API versionsFerenc Kovacs2013-11-061-1/+1
| |
* | Fixed ZTS build. Needed to bump API version number.Bob Weinand2013-12-181-1/+1
| |
* | bump API versionsFerenc Kovacs2013-11-061-1/+1
|/
* initial move on renaming files and fixing includesAnatol Belski2013-10-171-1/+1
|
* unify stdint type usageMichael Wallner2013-08-061-0/+2
| | | | if you need C99 stdint types, just include "php_stdint.h"
* Happy New YearXinchen Hui2013-01-011-1/+1
|
* Bump API versionsDavid Soria Parra2012-11-131-1/+1
|
* Fix bug 61193Rasmus Lerdorf2012-02-271-8/+3
|
* - Year++Felipe Pena2012-01-011-1/+1
|
* - Added new macro to be used in the end of zend_function_entry declaration ↵Felipe Pena2011-07-251-0/+1
| | | | (Gwynne)
* - Added a new PHPAPI function to return module_initialized:Derick Rethans2011-06-241-0/+1
| | | | | php_get_module_initialized().
* Add php_ignore_value() macro to suppress unused return value warningsRasmus Lerdorf2011-05-161-0/+5
| | | | | | from gcc. There are times when we really don't care about the return value and this will cleanly tell gcc.
* - Year++Felipe Pena2011-01-011-1/+1
|
* - add PHP_INSTALL_HEADERS to all parts (core&exts) exposing headers, ↵Pierre Joye2010-12-111-0/+4
| | | | generate the install-headers cmd
* Added TSRMLS macros into php_get_current_user()Kalle Sommer Nielsen2010-09-231-1/+1
|
* * implement new output API, fixing some bugs and implementing some feature Michael Wallner2010-05-311-14/+1
| | | | | | | | | | | requests--let's see what I can dig out of the bugtracker for NEWS-- and while crossing the road: * implemented new zlib API * fixed up ext/tidy (what was "s&" in zend_parse_parameters() supposed to do?) Thanks to Jani and Felipe for pioneering.
* Removed safe_modeKalle Sommer Nielsen2010-04-261-2/+1
| | | | | | | * Removed ini options, safe_mode* * Removed --enable-safe-mode --with-exec-dir configure options on Unix * Updated extensions, SAPI's and core * php_get_current_user() is now declared in main.c, thrus no need to include safe_mode.h anymore
* Bump PHP_API_VERSIONKalle Sommer Nielsen2010-04-151-1/+1
|