Edit report at https://bugs.php.net/bug.php?id=53829&edit=1
ID: 53829
Comment by: comments at sentfrom dot com
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:
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.
Previous Comments:
------------------------------------------------------------------------
[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