Edit report at https://bugs.php.net/bug.php?id=53829&edit=1
ID: 53829 Comment by: skett...@php.net Reported by: rilatonal at hotmail dot de Summary: Compiling PHP with large file support will replace function gzopen by gzopen64 Status: Open Type: Bug Package: Zlib related Operating System: Linux PHP Version: 5.3.5 Block user comment: N Private report: N New Comment: Added patch "zlib-largefile-function-renaming" that fixes the gzopen, gzseek and gztell PHP function renaming. Previous Comments: ------------------------------------------------------------------------ [2013-02-08 12:24:51] skett...@php.net The following patch has been added/updated: Patch Name: zlib-largefile-function-renaming Revision: 1360326291 URL: https://bugs.php.net/patch-display.php?bug=53829&patch=zlib-largefile-function-renaming&revision=1360326291 ------------------------------------------------------------------------ [2012-08-26 11:07:08] comments at sentfrom dot com I encountered the same problem with a 64-bit build of PHP on OpenIndiana b151. The symptom I saw was Wordpress automatic updates were failing silently, because the class-pclzip.php module tests for the presence of gzopen. Patching that file is not a viable option since any WP update can overwrite it again. The gzopen patch attached fixes this at the PHP level by using lower-level ZEND macros that are not affected by zlib.h's #define gzopen gzopen64. It is preferable to using an undocumented zlib compilation flag ZLIB_INTERNAL, which may go away at some point in the future. I had to use ZEND_RAW_FENTRY as it does not have a PHP_ equivalent, and we have to pass the first argument "gzopen" as a string, since cpp would replace gzopen with gzopen64 if passed as a C identifier. ------------------------------------------------------------------------ [2011-09-07 07:09:20] tx-7-12 at tuxad dot com Hi, I also got this "bug" with the latest zlib 1.2.5 as system lib and "-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1". Dirty solution: Define ZLIB_INTERNAL. # /usr/local/php/bin/php -r 'var_dump(function_exists("gzopen"));' bool(false) # export CFLAGS="... -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -DZLIB_INTERNAL=1" configure && make # sapi/cli/php -r 'var_dump(function_exists("gzopen"));' bool(true) Matching lines in zlib.h: #if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 # define gzopen gzopen64 # define gzseek gzseek64 # define gztell gztell64 # define gzoffset gzoffset64 # define adler32_combine adler32_combine64 # define crc32_combine crc32_combine64 # ifdef _LARGEFILE64_SOURCE ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); # endif #else ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); #endif Frank ------------------------------------------------------------------------ [2011-05-27 17:06:42] j dot henge-ernst at interexa dot de I also encountered that problem compiling php on solaris x86_64 with zlib 1.2.5. I used the following configure commmand: #! /bin/sh # # Created by configure CFLAGS='-xmodel=small -m64 -Kpic -O4' \ CXXFLAGS='-xmodel=small -m64 -Kpic -O4' \ LDFLAGS='-m64' \ CC='cc' \ './configure' \ '--prefix=/opt/IXAGib64' \ '--with-config-file-path=/opt/IXAGib64/etc' \ '--with-config-file-scan-dir=/opt/IXAGib64/etc/php.ini.d' \ '--disable-debug' \ '--enable-inline-optimization' \ '--disable-all' \ '--enable-ctype' \ '--enable-dom' \ '--enable-libxml' \ '--with-libxml-dir=/opt/IXAGib64' \ '--with-openssl=/opt/IXAGib64' \ '--with-pcre-regex' \ '--enable-session' \ '--enable-simplexml' \ '--enable-wddx' \ '--enable-xml' \ '--enable-hash' \ '--enable-json' \ '--enable-filter' \ '--with-zlib=/opt/IXAGib64' \ '--with-apxs2=/opt/IXAGib64/bin/apxs' \ '--with-pear' \ '--with-layout=GNU' \ "$@" ------------------------------------------------------------------------ [2011-01-24 14:40:13] rilatonal at hotmail dot de Description: ------------ I am in the need of supporting large files in PHP. For the first time I tried to compile PHP on a machine with zlib 1.2.5 installed. After that, gzopen (and the other gz.. functions) is gone and is being replaced by gzopen64 (or the other gz...64-functions). Thats a big problem, because many PEAR-scripts (and other scripts, too) expect gzopen to be there! ZLIB is there (see the test scripts), but gzopen not! Test script: --------------- CFLAGS="-g -O3 -m32 -D_FILE_OFFSET_BITS=64" ./configure --prefix=/tmp/php --with-config-file-path=/tmp/php/etc --disable-all -with-zlib make make install /tmp/php/bin/php -r 'var_dump(function_exists("gzopen"));' /tmp/php/bin/php -r 'var_dump(function_exists("gzopen64"));' /tmp/php/bin/php -r '$fp = fopen("compress.zlib://hello-world.txt.gz", "wb"); fwrite($fp, "Hello World!\n"); fclose($fp);' zcat hello-world.txt.gz Expected result: ---------------- I expect gzopen to be there! Actual result: -------------- gzopen is being replaced by gzopen64! ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=53829&edit=1