lumisys / bcmath_compat
PHP 5.x/7.x polyfill for bcmath extension
Requires
- phpseclib/phpseclib: >=2.0.19
Requires (Dev)
- phpunit/phpunit: ^4.8.35|^5.7|^6.0
- squizlabs/php_codesniffer: ^3.0
Suggests
- ext-gmp: Will enable faster math operations
Provides
- ext-bcmath: 7.3.5
README
PHP 5.x/7.x polyfill for bcmath extension
Installation
With Composer:
$ composer require phpseclib/bcmath_compat
Installation On Heroku
bcmath_compat does not install the normal way on Heroku / Composer < 2.0 because Heroku uses modified composer.json's. Composer 2 makes this a non-issue.
In light of this the way to install this on Heroku with Composer < 2.0 is to do the following:
$ composer require phpseclib/bcmath_compat:1.0.4
Limitations
-
extension_loaded('bcmath')
bcmath_compat cannot make this return true. The recommended remediation is to not do this.
-
ini_set('bcmath.scale', ...)
You cannot set configuration options for extensions that are not installed. If you do
ini_set('bcmath.scale', 5)
on a system without bcmath installed thenini_get('bcmath.scale')
will returnfalse
. It's similar to what happens when you doini_set('zzz', 5)
and thenini_get('zzz')
. You'll getfalse
back.The recommended remediation to doing
ini_set('bcmath.scale', ...)
is to dobcscale(...)
. The recommended remediation for doingini_get
is (if you're using PHP >= 7.3.0) to dobcscale()
or (if you're using PHP < 7.3.0) to domax(0, strlen(bcadd('0', '0')) - 2)
.Note that
ini_get
always returns a string whereas the recommended remediations return integers.