64bit PHP 5.2 and Firebird blobs
There’s a bug introduced between PHP 5.2.1 and 5.2.2 that affects handling of Firebird blobs on 64bit machines. Having moved some of my servers to 64bit Slackware (Slamd64 to be more precise) I run into this problem.
Unless you want to recompile the whole PHP to a newer version with the fix (5.3 as I understand, although did not test), you can patch the sources: Just open ibase_blobs.c file and modify this function:
_php_ibase_quad_to_string
char *result = (char *) emalloc(BLOB_ID_LEN+1); /* shortcut for most common case */ if (sizeof(ISC_QUAD) == sizeof(ISC_UINT64)) { sprintf(result, "0x%0*" LL_MASK "x", 16, *(ISC_UINT64*)(void *) &qd); } else { ISC_UINT64 res = ((ISC_UINT64) qd.gds_quad_high; sprintf(result, "0x%0*" LL_MASK "x", 16, res); } result[BLOB_ID_LEN] = '\0'; return result;
Rebuild the interbase.so, copy to extension directory, restart Apache and you’re done.
Tweet to @mbabuskov Tweet Milan Babuškov, 2010-03-20