Hypertext Preprocessor is a general-purpose programming language!

PHP for Mac

PHP 8.0.0

  -  14.59 MB  -  Open Source

Sometimes latest versions of the software can cause issues when installed on older devices or devices running an older version of the operating system.

Software makers usually fix these issues but it can take them some time. What you can do in the meantime is to download and install an older version of PHP 8.0.0.


For those interested in downloading the most recent release of PHP for Mac or reading our review, simply click here.


All old versions distributed on our website are completely virus-free and available for download at no cost.


We would love to hear from you

If you have any questions or ideas that you want to share with us - head over to our Contact page and let us know. We value your feedback!

What's new in this version:

BZ2:
- Fixed (fread() does not report bzip2.decompress errors)

CLI:
- Allow debug server binding to an ephemeral port via `-S localhost:0`

COM:
- Fixed (DOTNET .NET 4.0 GAC new location)
- Fixed (com_event_sink crashes on certain arguments)

Calendar:
- Fixed (Potential type confusion in unixtojd() parameter parsing)

Core:
- Fixed (scandir duplicates file name at every 65535th file)
- Fixed (Fatal error "Function must be a string" message should be renamed)
- Fixed (register_shutdown_function() does not correctly handle exit code)
- Fixed (Allow implementing Traversable on abstract classes)
- Fixed (Enhance undefined class constant error with class name)
- Fixed (Calling exit() in a shutdown function does not change the exit value in CLI)
- Fixed (Unclear error message when not implementing a renamed abstract trait function)
- Fixed (Converting optional argument to variadic forbidden by LSP checks)
- Fixed (Can't rebind closure returned by Closure::fromCallable())
- Fixed (Shebang line not stripped for non-primary script)
- Fixed (Wrong reflection on MultipleIterator::__construct)
- Fixed (Cannot alias a method named "namespace")
- Fixed (convert error on receiving variables when duplicate [)
- Fixed (Incorrect callability check inside internal methods)
- Fixed (Referencing argument in a function makes it a reference in the stack trace)
- Fixed ("Unexpected end of file" is not an acceptable error message)
- Fixed (method_exists and property_exists incoherent behavior)
- Fixed (data:// wrappers are writable)
- Fixed (Check __set_state structure)
- Fixed ("Illegal offset type" exception during AST evaluation not handled properly)
- Fixed (Assertion failure when unsetting variable during binary op)
- Fixed (Segfault when trying to access non-existing variable)
- Fixed (Syntax error in configure / unescaped "[]" in php.m4)
- Fixed (count(DOMNodeList) doesn't match count(IteratorIterator(DOMNodeList)))
- Fixed (Promoted untyped properties should get null default value)
- Fixed (Promoted constructor params with attribs cause crash)
- Fixed (Generator doesn't throw exception after multiple yield from iterable)
- Fixed (Build fails due to undeclared UINT32_C)
- Fixed (Exit in auto-prepended file does not abort PHP execution)
- Fixed (memleak after two set_exception_handler calls with __call)
- Fixed (Segmentation fault with named arguments in nested call)
- Fixed (Cannot skip arguments when extended debug is enabled)
- Fixed (broken namespace usage in eval code)
- Fixed (Windows Deduplication Enabled, randon permission errors)
- Fixed (ADD_EXTENSION_DEP() fails for ext/standard and ext/date)
- Fixed (assert() vs named parameters - confusing error)
- Fixed (Abstract trait methods returning "self" cannot be fulfilled by traits)
- Fixed faulty generator cleanup with yield from
- Implement #[Attr] Attribute syntax as per final vote in RFC https://wiki.php.net/rfc/shorter_attribute_syntax_change
- Implemented FR #47074 (phpinfo() reports "On" as 1 for the some extensions)
- Implemented FR #72089 (require() throws fatal error instead of exception)
- Removed the pdo_odbc.db2_instance_name php.ini directive
- Use SSE2 instructions do locale independent strtolower

Curl:
- Bumped required libcurl version to 7.29.0
- Fixed (Null pointer deref if CurlHandle directly instantiated)

DOM:
- Add property DOMXPath::$registerNodeNamespaces and constructor argument that allow global flag to configure query() or evaluate() calls
- Fixed bug #79968 (DOMChildNode API crash on unattached nodes)
- Fixed bug #80268 (loadHTML() truncates at NUL bytes)

Date:
- Fixed (DateTime::createFromFormat should new static(), not new self())
- Fixed (Default value for sunrise/sunset zenith still wrong)
- Fixed (discrepancy between time and microtime)
- Fixed (DateTimeImmutable::createFromFormat() does not populate time)
- Implemented FR #79903 (datetime: new format "p", same as "P" but returning "Z" for UTC)

Enchant:
- Add LIBENCHANT_VERSION macro
- Add enchant_dict_add and enchant_dict_is_added functions
- Deprecate enchant_broker_set_dict_path, enchant_broker_get_dict_path, enchant_dict_add_to_personal and enchant_dict_is_in_session
- Use libenchant-2 when available

FFI:
- Added FFICType::getName() method
- Fixed bug #79177 (FFI doesn't handle well PHP exceptions within callback)
- Fixed bug #79749 (Converting FFI instances to bool fails)

FPM:
- Add pm.status_listen option

Fileinfo:
- Upgrade to libmagic 5.39

GD:
- Added imagegetinterpolation()
- Fixed bug #55005 (imagepolygon num_points requirement)
- Made the $num_points parameter of php_imagepolygon optional
- Removed deprecated image2wbmp()
- Removed deprecated png2wbmp() and jpeg2wbmp()
- Replaced gd resources with objects

IMAP:
- Fixed bug #64076 (imap_sort() does not return FALSE on failure)
- Fixed bug #76618 (segfault on imap_reopen)
- Fixed bug #80213 (imap_mail_compose() segfaults on certain $bodies)
- Fixed bug #80215 (imap_mail_compose() may modify by-val parameters)
- Fixed bug #80216 (imap_mail_compose() does not validate types/encodings)
- Fixed bug #80220 (imap_mail_compose() may leak memory)
- Fixed bug #80223 (imap_mail_compose() leaks envelope on malformed bodies)
- Fixed bug #80226 (imap_sort() leaks sortpgm memory)
- Fixed bug #80239 (imap_rfc822_write_address() leaks memory)
- Fixed bug #80242 (imap_mail_compose() segfaults for multipart with rfc822)
- Fixed minor regression caused by fixing bug #80220

Iconv:
- Dropped support for iconv without proper errno setting

Intl:
- Removed deprecated INTL_IDNA_VARIANT_2003

JIT:
- Fixed (Wrong result if executed with JIT)
- Fixed (PHP cannot be compiled with enable JIT)
- Fixed (Crash seen when opcache.jit=1235 and opcache.jit_debug=2)
- Fixed (Fatal error when assigning to array property with JIT enabled)
- Fixed (JIT segfault in Symfony OptionsResolver)
- Fixed (Incorrect execution with JIT enabled)

JSON:
- The JSON extension is now an integral part of PHP and cannot be disabled as per RFC: https://wiki.php.net/rfc/always_enable_json (tandre)

LDAP:
- Fixed memory leaks
- Removed deprecated ldap_sort

MBString:
- Fixed (mb_regex_set_options() return current options)
- Removed the unused $is_hex parameter from mb_decode_numericentity()

MySQLi:
- Fixed (SSL settings aren't respected when persistent connections are used)

Mysqlnd:
- Fixed (mysqlnd exposes 160 lines of stats in phpinfo)

OCI8:
- Deprecated old OCI8 function aliases
- Modernized oci_register_taf_callback() callable argument parsing implementation
- Removed obsolete no-op function oci_internal_debug()

ODBC:
- Fixed bug #22986 (odbc_connect() may reuse persistent connection)
- Fixed bug #44618 (Fetching may rely on uninitialized data)

Opcache:
- Fixed (Opcache does not replay compile-time warnings)
- Fixed (Incorrectly computed opcache checksum on files with non-ascii characters)
- Fixed (ini_get() and opcache_get_configuration() inconsistency)
- Fixed (Optimizer segfault with isset on static property with undef dynamic class name)
- Fixed (PHP8 RC1 - JIT Buffer not working)
- Fixed (Complex expression in while / if statements resolves to false incorrectly)
- Fixed (Opcache bug (bad condition result) in 8.0.0rc1)
- Fixed nding of preloaded dynamically declared function

OpenSSL:
- Added Cryptographic Message Syntax (CMS) support

PCRE:
- Don't ignore invalid escape sequences
- Updated to PCRE2 10.35

PDO:
- Changed default PDO error mode to exceptions
- Fixed bug #77849 (Disable cloning of PDO handle/connection objects)

PDO_Firebird:
- Fixed (Firebird PDO preprocessing sql)

PDO_OCI:
- Added support for setting and getting the oracle OCI 18c call timeout

PDO_PGSQL:
- Bumped required libpq version to 9.1

PGSQL:
- Bumped required libpq version to 9.1

Phpdbg:
- Fixed (phpdbg support for display_errors=stderr)
- Fixed (too many open files)
- Fixed (phpdbg segfaults on listing some conditional breakpoints)
- Fixed (phpdbg build fails when readline is shared)

Reflection:
- Fixed (ReflectionClass::getMethods() returns methods out of scope)
- Fixed (Reflection does not honor trait conflict resolution / method aliasing)
- Fixed (Nested traits' aliased methods are lowercased)
- Fixed (ReflectionClassConstant::$class returns wrong class when extending)
- Fixed (ReflectionClass::implementsInterface - inaccurate error message with traits)
- Fixed (ReflectionMethod::getReturnType() does not handle static as part of union type)
- Fixed (ReflectionFunction->invokeArgs confused in arguments)
- Fixed (getAttributes segfault on dynamic properties)
- Implement (Add $filter parameter for ReflectionClass::getConstants and ReflectionClass::getReflectionConstants) (carusogabriel)
- Implement ReflectionProperty::hasDefaultValue and Reflection::getDefaultValue (beberlei)

SNMP:
- Fixed (disable md5 code when it is not supported in net-snmp)

SPL:
- Fixed (spl_autoload_register fails with multiple callables using self, same method)
- Fixed (Circular references in SPL iterators are not garbage collected)
- Fixed (Second call of spl_autoload_register() does nothing if it has no arguments)
- Fixed (Memory leak in SplFileInfo because of missing zend_restore_error_handling())
- SplFixedArray is now IteratorAggregate rather than Iterator

SQLite3:
- Added SQLite3::setAuthorizer() and respective class constants

Session:
- Fixed (session_decode() silently fails on wrong input)
- Fixed (session_gc return value for user defined session handlers)

Shmop:
- Converted shmop resources to objects

SimpleXML:
- Fixed (Root elements are not properly cloned)
- Fixed (Don't set content of elements with only whitespaces)

Sodium:
- Fixed (sign_detached() strings not terminated)

Standard:
- Don't force rebuild of symbol table, when populating $http_response_header variable by the HTTP stream wrapper
- Fixed (mixed LF and CRLF line endings in mail())
- Fixed (lstat_stat_variation7.phpt fails on certain file systems)
- Fixed (str_replace should warn when misused with nested arrays)
- Fixed (stream_get_line skips data if used with data-generating filter)
- Fixed (getimagesize(): Read error! should mention file path)
- Fixed (parse_url() does not include 'query' when question mark is the last char)
- Fixed (Sorting with array_unique gives unwanted result)
- Fixed (file_get_contents strip first line with chunked encoding redirect)
- Fixed (parse_url silently drops port number 0)
- Fixed (Double free when ASSERT_CALLBACK is used with a dynamic message)
- Implemented FR (__PHP_Incomplete_Class should be final)
- Made quoting of cmd execution functions consistent

Tidy:
- Removed the unused $use_include_path parameter from tidy_repair_string()

Tokenizer:
- Fixed (PhpToken::getAll() confusing name)

XML:
- Fixed (xml_parser_free() should never leak memory)

XMLWriter:
- Changed functions to accept/return XMLWriter objects instead of resources
- Implemented FR #79344 (xmlwriter_write_attribute_ns: $prefix should be nullable)
- Removed return types from XMLWriter stubs

Zip:
- Add "flags" options to ZipArchive::addGlob and addPattern methods keeping previous behavior having FL_OVERWRITE by default
- Add ZipArchive::EM_UNKNOWN and ZipArchive::EM_TRAD_PKWARE constants
- Add ZipArchive::isCompressionMethodSupported() and ZipArchive::isEncryptionMethodSupported() method (libzip 1.7.0)
- Add ZipArchive::replaceFile() method
- Add ZipArchive::setCancelCallback method (since libzip 1.6.0)
- Add ZipArchive::setMtimeName and ZipArchive::setMtimeIndex methods
- Add ZipArchive::setProgressCallback method (since libzip 1.3.0)
- Add lastId property to ZipArchive
- Add optional "flags" parameter to ZipArchive::addEmptyDir, addFile and addFromString methods
- Fixed bug #50678 (files extracted by ZipArchive class lost their original modified time)
- Fixed bug #72374 (remove_path strips first char of filename)
- Implemented FR #77960 (add compression / encryption options for ZipArchive::addGlob and ZipArchive::addPattern)
- ZipArchive::status and ZipArchive::statusSys properties and ZipArchive::getStatusString() method stay valid after the archive is closed

Zlib:
- Fixed (fread() does not report zlib.inflate errors)
- Fixed (zlib.output_compression disabled by Content-Type: image/)