O interpretador padrão, baseado no Zend Engine, é um software livre disponibilizado sob a licença BSD modificada, também chamada de PHP License versão 4. A implementação é escrita principalmente em C, com componentes em C++. Seu desenvolvimento é aberto à contribuição da comunidade, e a PHP Foundation financia parte do trabalho no núcleo da linguagem. Há versões para diferentes sistemas operacionais e formas de integração com servidores web.
História
O PHP se desenvolveu inicialmente sem uma especificação formal da linguagem. Em julho de 2014, foi publicada uma primeira proposta de especificação, elaborada com a participação da equipe do HHVM e hospedada pelo projeto PHP.
O desenvolvimento do PHP começou em 1994, quando Rasmus Lerdorf escreveu programas de Common Gateway Interface, ou CGI, em C para manter sua página pessoal. Ele ampliou esses programas para trabalhar com formulários HTML e se comunicar com bancos de dados, e deu à implementação o nome de "Personal Home Page/Forms Interpreter", ou PHP/FI.
<!--include /text/header.html--><!--getenv HTTP_USER_AGENT--><!--ifsubstr $exec_result Mozilla-->
Olá, você está usando o Netscape!<p><!--endif--><!--sql database select * from table where user='$username'--><!--ifless $numentries 1-->
Desculpe, esse registro não existe<p><!--endif exit-->
Boas-vindas, <!--$user-->!<p>
Você ainda tem <!--$index:0--> créditos na sua conta.<p><!--include /text/footer.html-->
O PHP/FI permitia criar aplicações web dinâmicas simples. Para acelerar a comunicação de erros e melhorar o código, Lerdorf anunciou o lançamento do PHP/FI com o nome "Personal Home Page Tools (PHP Tools) version 1.0" no grupo de discussão comp.infosystems.www.authoring.cgi, da Usenet, em 8 de junho de 1995. Essa versão oferecia funções básicas, como variáveis semelhantes às do Perl, processamento de formulários e inserção de HTML. A sintaxe já havia mudado para se aproximar da usada pelo Perl, mas era mais simples, limitada e menos consistente.
O PHP surgiu da ampliação dessas ferramentas, sem a intenção de criar uma nova linguagem de programação. Lerdorf afirmou: "Não sei como fazer isso parar [...] nunca houve a intenção de escrever uma linguagem de programação [...] não tenho a menor ideia de como escrever uma linguagem de programação [...] eu apenas acrescentava o próximo passo lógico pelo caminho". Uma equipe de desenvolvimento começou a se formar e, depois de meses de trabalho e testes beta, lançou oficialmente o PHP/FI 2 em novembro de 1997.
O desenvolvimento gradual do PHP, sem um projeto inicial para a linguagem, levou a inconsistências nos nomes das funções e na ordem de seus parâmetros. Em alguns casos, os nomes foram escolhidos para corresponder aos das bibliotecas de nível mais baixo que o PHP encapsulava. Em versões muito antigas, o comprimento dos nomes das funções era usado internamente como função de dispersão, de modo que os nomes eram escolhidos para melhorar a distribuição dos valores de dispersão.
Zeev Suraski e Andi Gutmans reescreveram o analisador sintático em 1997 e criaram a base do PHP 3. A linguagem recebeu o nome PHP: Hypertext Preprocessor, um acrônimo recursivo. Os testes públicos do PHP 3 começaram em seguida, e o lançamento oficial ocorreu em junho de 1998. Suraski e Gutmans iniciaram outra reescrita do núcleo do PHP, que resultou no Zend Engine em 1999. Os dois também fundaram a Zend Technologies em Ramat Gan, Israel.
O PHP 4.0, com o Zend Engine 1.0, foi lançado em 22 de maio de 2000. Em agosto de 2008, essa linha de desenvolvimento chegou à versão 4.4.9. O desenvolvimento do PHP 4 foi encerrado, sem previsão de novas atualizações de segurança.
O PHP 5.1 e o PHP 5.2 foram lançados nos anos seguintes, com melhorias menores e novos recursos, como a extensão PHP Data Objects, ou PDO, que define uma interface leve e consistente de acesso a bancos de dados. Em 2008, a série PHP 5.x se tornou a única versão estável em desenvolvimento.
Muitos projetos populares de código aberto deixaram de oferecer suporte ao PHP 4 em novos códigos a partir de 5 de fevereiro de 2008, com a iniciativa GoPHP5, organizada por um consórcio de desenvolvedores para incentivar a migração do PHP 4 para o PHP 5.
PHP 6 e Unicode
As funções nativas do PHP para cadeias de caracteres operavam apenas sobre bytes, o que dificultava seu uso com codificações de caracteres multibyte. Em 2005, Andrei Zmievski começou a dirigir um projeto para incorporar suporte nativo a Unicode em toda a linguagem, com a biblioteca International Components for Unicode, ou ICU, e a representação interna das cadeias de texto em UTF-16. Como isso exigiria grandes alterações na implementação da linguagem e nos programas dos usuários, o lançamento foi planejado para a versão 6.0, junto com outros recursos em desenvolvimento.
A falta de desenvolvedores familiarizados com as mudanças necessárias e os problemas de desempenho nas conversões de e para UTF-16, pouco usado na web, atrasaram o projeto. A versão PHP 5.3 foi criada em 2009 e, em março de 2010, o projeto foi oficialmente abandonado na forma que havia assumido. Começou então a preparação do PHP 5.4, com a maior parte dos recursos restantes do PHP 6 que não dependiam de Unicode. Esperava-se elaborar uma nova proposta para integrar Unicode, mas esse suporte não fazia parte da versão preparada em 2014 para suceder a série 5.x.
Com o abandono da linha de desenvolvimento dedicada a Unicode, um novo processo de lançamento foi adotado em 2011. Ele previa um ciclo anual e distinguia as versões que acrescentavam recursos, de x.y.z para x.y+1.0, das versões principais, de x.y.z para x+1.0.0. Os recursos restantes que haviam sido planejados para a versão 6.0 entraram no PHP 5.4, lançado em março de 2012, como o suporte a traits e uma sintaxe abreviada para arrays. O PHP 5.5, de junho de 2013, e o PHP 5.6, de agosto de 2014, trouxeram outras mudanças incrementais.
Nas versões 5.3 e 5.4, as únicas distribuições binárias para Microsoft Windows eram compilações IA-32 de 32 bits, que exigiam o modo de compatibilidade de 32 bits ao usar o Internet Information Services, ou IIS, no Windows de 64 bits. O PHP 5.5 passou a oferecer compilações x86-64 de 64 bits para Microsoft Windows.
O suporte oficial de segurança ao PHP 5.6 terminou em 31 de dezembro de 2018.
PHP 7.x, de 2015 a 2019
Em 2014 e 2015, foi desenvolvida uma nova versão principal da linguagem, que recebeu o número 7.0 depois de uma discussão entre os desenvolvedores. Os experimentos com Unicode no PHP 6 não haviam chegado a um lançamento, mas artigos e títulos de livros já usavam esse nome, o que poderia causar confusão se ele fosse reutilizado. Uma votação definiu o nome PHP 7.
A base do PHP 7.0 foi uma ramificação inicialmente chamada PHP next generation, ou phpng, escrita por Dmitry Stogov, Xinchen Hui e Nikita Popov. O objetivo era melhorar o desempenho pela refatoração do Zend Engine, mantendo uma compatibilidade quase completa com a linguagem. Em 14 de julho de 2014, testes baseados no WordPress, que eram o principal conjunto de testes de desempenho do projeto phpng, apontavam um ganho de quase 100%. As estruturas de dados mais compactas e outras mudanças do phpng facilitavam melhorias nas versões seguintes e eram mais adequadas à adoção de um compilador just-in-time, ou JIT. Dmitry Stogov afirmou que algumas ideias de otimização do PHP 7 vieram do HHVM, do LuaJIT e do V8. A reformulação recebeu o nome Zend Engine 3, em sucessão ao Zend Engine 2 usado no PHP 5.x.
O PHP 7.0 também trouxe mudanças incompatíveis com versões anteriores, permitidas para versões principais pelo sistema de numeração adotado em 2011. Entre as alterações no núcleo da linguagem estavam a desreferenciação mais consistente de variáveis, o comportamento mais previsível da instrução foreach e a uniformização entre plataformas dos deslocamentos de bits e da conversão de números de ponto flutuante em inteiros. Foram removidas do núcleo interfaces de programação de aplicações de servidor, ou SAPIs, e extensões sem manutenção ou descontinuadas, entre elas a extensão antiga mysql. Também foram removidos os delimitadores no estilo ASP, <% e %>, e a forma <script language="php"> ... </script>.
No PHP 5.x, somente parâmetros de funções podiam ter declarações de tipo. O PHP 7.0 estendeu essa possibilidade aos valores de retorno das funções, e o PHP 7.4, às propriedades dos objetos. O conjunto de tipos disponíveis também aumentou. A versão 7.0 acrescentou os tipos escalares, inteiro, ponto flutuante, cadeia de caracteres e booleano. A versão 7.1 acrescentou o tipo iterable, os tipos que aceitam valor nulo e o tipo de retorno void. O tipo object entrou na versão 7.2.
Outras mudanças ampliaram as possibilidades de expressão da linguagem, como os operadores ??, de coalescência nula, e <=>, de comparação de três vias, chamado "spaceship", na versão 7.0. O PHP 7.1 acrescentou sintaxe para desestruturar arrays e capturar mais de um tipo de exceção. A versão 7.3 flexibilizou as sintaxes Heredoc e Nowdoc, e a versão 7.4 acrescentou o operador de atribuição por coalescência nula.
PHP 8.x, a partir de 2020
O PHP 8.0 foi lançado em 26 de novembro de 2020, como uma versão principal com mudanças incompatíveis com as anteriores.
A versão acrescentou um compilador JIT, capaz de melhorar muito o desempenho em determinados usos. Esperavam-se ganhos maiores em operações matemáticas do que nas tarefas comuns de desenvolvimento web. O ganho de desempenho também abre a possibilidade de reescrever em PHP parte do código escrito em C.
O PHP 8.0 acrescentou atributos, que permitem incluir metadados em elementos de um programa, como classes, métodos e parâmetros. Versões seguintes acrescentaram atributos predefinidos que alteram o comportamento da linguagem, como #[\SensitiveParameter] no PHP 8.2, #[\Override] no PHP 8.3, #[\Deprecated] no PHP 8.4 e #[\NoDiscard] e #[\DelayedTargetValidation] no PHP 8.5.
O PHP 8.0 acrescentou tipos de união, como int|string, que aceita um inteiro ou uma cadeia de caracteres. O PHP 8.1 acrescentou tipos de interseção, como Traversable&Countable, que exige que o valor implemente as interfaces Traversable e Countable. O PHP 8.2 acrescentou tipos em forma normal disjuntiva, ou DNF, com uniões de interseções, como array|(Traversable&Countable). Novas palavras-chave para tipos especiais também foram acrescentadas, entre elas mixed e static no PHP 8.0, never, um tipo inferior que expressa que uma função nunca retorna, no PHP 8.1, e null, false e true como tipos independentes no PHP 8.2.
O PHP 8.0 introduziu mudanças incompatíveis nas comparações entre cadeias de caracteres e números, nas cadeias numéricas e nas assinaturas incompatíveis de métodos. Versões seguintes passaram a emitir avisos sobre comportamentos que deverão ser removidos em uma futura versão principal, como passar null a parâmetros de funções internas que não aceitam esse valor e criar propriedades dinâmicas não declaradas na classe.
O PHP 8.0 também introduziu a expressão match, que usa comparações estritas e retorna um valor. Uma proposta posterior para ampliar a linguagem com correspondência de padrões continuava em discussão em outubro de 2026.
Histórico de versões
Versão
Lançamento
Fim do suporte
Observações
1.0
8 de junho de 1995
Nome oficial "Personal Home Page Tools (PHP Tools)". Primeiro uso do nome "PHP".
2.0
12 de novembro de 1997
Nome oficial "PHP/FI 2.0". Primeira versão que já podia ser caracterizada como PHP, uma linguagem independente com recursos mantidos nas versões seguintes.
3.0
6 de junho de 1998
20 de outubro de 2000
O desenvolvimento deixou de se concentrar em uma pessoa e passou a reunir uma equipe. Zeev Suraski e Andi Gutmans reescreveram a base dessa versão.
4.0
22 de maio de 2000
23 de junho de 2001
Acrescentou o Zend Engine, um sistema mais avançado de interpretação de código em duas etapas, análise e execução.
4.1
10 de dezembro de 2001
12 de março de 2002
Introduziu as variáveis "superglobais", como $_GET, $_POST e $_SESSION.
4.2
22 de abril de 2002
6 de setembro de 2002
Desativou register_globals por padrão. Dados recebidos pela rede deixaram de ser inseridos diretamente no espaço de nomes global, eliminando possíveis falhas de segurança nas aplicações.
Corrigiu um erro de corrupção de memória, o que exigiu romper a compatibilidade binária com extensões compiladas para a versão 4.3.x.
5.0
13 de julho de 2004
5 de setembro de 2005
Zend Engine II, com um novo modelo de objetos.
5.1
24 de novembro de 2005
24 de agosto de 2006
Melhorou o desempenho com a introdução de variáveis do compilador em um mecanismo PHP reformulado. Acrescentou a extensão PHP Data Objects, ou PDO, com uma interface consistente de acesso a bancos de dados.
5.2
2 de novembro de 2006
6 de janeiro de 2011
Ativou a extensão de filtros por padrão e acrescentou suporte nativo a JSON.
5.3
30 de junho de 2009
14 de agosto de 2014
Suporte a espaços de nomes, vinculação estática tardia, rótulos de salto com um goto limitado, funções anônimas, fechamentos, arquivos PHP, ou phar, e coleta de lixo para referências circulares. Melhorias no suporte ao Windows, sqlite3, mysqlnd em substituição a libmysql como biblioteca subjacente das extensões para MySQL, fileinfo em substituição a mime_magic para melhorar o suporte a MIME, a extensão de internacionalização e descontinuação da extensão ereg.
5.4
1 de março de 2012
3 de setembro de 2015
Suporte a traits e à sintaxe abreviada de arrays. Remoção de register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() e session_is_registered(). Servidor web integrado. Melhorias nos recursos e no desempenho, com menor consumo de memória.
5.5
20 de junho de 2013
21 de julho de 2016
Suporte a geradores e a blocos finally para tratamento de exceções. OpCache, baseado no Zend Optimizer+, incluído na distribuição oficial.
5.6
28 de agosto de 2014
31 de dezembro de 2018
Expressões escalares constantes, funções variádicas, desempacotamento de argumentos, novo operador de exponenciação, ampliação da instrução use para funções e constantes, novo depurador phpdbg como módulo SAPI e outras melhorias menores.
6.x
Não lançada
Não se aplica
Versão abandonada que previa suporte nativo a Unicode.
7.0
3 de dezembro de 2015
10 de janeiro de 2019
Zend Engine 3, com melhorias de desempenho e suporte a inteiros de 64 bits no Windows. Sintaxe uniforme de variáveis, compilação baseada em árvore sintática abstrata, Closure::call(), deslocamentos de bits consistentes entre plataformas, operador ?? de coalescência nula, sintaxe de escape para pontos de código Unicode, declarações de tipos de retorno e de tipos escalares, inteiro, ponto flutuante, cadeia de caracteres e booleano. Operador <=> de comparação de três vias, chamado "spaceship", delegação de geradores, classes anônimas, API CSPRNG mais simples e disponível de forma mais consistente, substituição de erros internos remanescentes por exceções e sintaxe abreviada para importar mais de um item de um espaço de nomes.
Declaração do tipo object em parâmetros e valores de retorno, extensão libsodium, sobrescrita de métodos abstratos e ampliação dos tipos aceitos em parâmetros.
7.3
6 de dezembro de 2018
6 de dezembro de 2021
Sintaxes Heredoc e Nowdoc mais flexíveis, atribuição por referência e desestruturação de arrays com list(), suporte a PCRE2 e função hrtime.
7.4
28 de novembro de 2019
28 de novembro de 2022
Propriedades tipadas, pré-carregamento, operador de atribuição por coalescência nula, melhorias em openssl_random_pseudo_bytes, referências fracas, interface de funções externas, ou FFI, extensão de hash sempre disponível, registro de algoritmos de hash de senhas, divisão de cadeias multibyte, reflexão para referências, retirada de ext/wddx da distribuição e novo mecanismo de serialização personalizada de objetos.
8.0
26 de novembro de 2020
26 de novembro de 2023
Compilação just-in-time, ou JIT, incremento automático de índices negativos em arrays, regras mais estritas para a linguagem, com validação de métodos abstratos em traits, comparações mais consistentes entre cadeias de caracteres e números e tratamento mais consistente de cadeias numéricas. TypeError em operações aritméticas ou de bits inválidas, reclassificação de erros do mecanismo, erros de tipo consistentes em funções internas, erro fatal para assinaturas incompatíveis de métodos, conversão de ponto flutuante em cadeia de caracteres independente da configuração regional, ajustes na sintaxe de variáveis, atributos, argumentos nomeados, expressão match, promoção de propriedades no construtor, tipos de união, tipo mixed, tipo de retorno static, operador de acesso seguro em caso de nulo, cláusulas catch sem captura, expressão throw e extensão JSON sempre disponível.
8.1
25 de novembro de 2021
31 de dezembro de 2025
Notação explícita para literais inteiros octais, enumerações, propriedades somente de leitura, sintaxe para elementos chamáveis de primeira classe, new em inicializadores, tipos de interseção puros, tipo de retorno never, constantes de classe final e fibras.
8.2
8 de dezembro de 2022
31 de dezembro de 2026
Classes somente de leitura, null, false e true como tipos independentes, conversão entre maiúsculas e minúsculas independente da configuração regional, tipos em forma normal disjuntiva e constantes em traits.
8.3
23 de novembro de 2023
31 de dezembro de 2027
Constantes de classe tipadas, acesso dinâmico a constantes de classe, atributo #[\Override], reinicialização de propriedades somente de leitura durante a clonagem, nova função json_validate, novos recursos do gerador de valores aleatórios e suporte a mais de um arquivo no verificador de sintaxe da linha de comando.
8.4
21 de novembro de 2024
31 de dezembro de 2028
Ganchos de propriedades, visibilidade assimétrica, atualização da API do DOM, melhorias de desempenho, correções de erros e revisão geral do código.
8.5
20 de novembro de 2025
31 de dezembro de 2029
Operador de encadeamento |>.
8.6
Previsto para 19 de novembro de 2026
Legenda:versão antiga, sem suporte · versão anterior, ainda com suporte · versão estável mais recente · versão em desenvolvimento · versão abandonada
A equipe de desenvolvimento adotou, em 28 de junho de 2011, um calendário para os lançamentos do PHP. O sistema previa pelo menos um lançamento por mês e uma versão secundária por ano, que poderia acrescentar recursos. Cada versão secundária receberia correções de erros e de segurança por pelo menos dois anos, seguidos de pelo menos mais um ano apenas com correções de segurança, totalizando um ciclo de três anos. Ao longo desse ciclo, novos recursos só poderiam ser introduzidos se fossem pequenos e independentes. Uma proposta aprovada em 2024 estendeu para dois anos a etapa dedicada apenas à segurança, fixou o encerramento do suporte em 31 de dezembro e eliminou a exceção que permitia acrescentar recursos pequenos e independentes às versões de correção.
Uso de versões desatualizadas
Em 22 de outubro de 2026, a pesquisa da W3Techs ainda identificava PHP 7 em 26,9% dos sites que usavam PHP, PHP 5 em 7,7% e PHP 4 em 0,1%. Essas três versões principais já estavam sem suporte oficial. As versões 8.0 e 8.1 também haviam encerrado seus ciclos de suporte.
Mascote
O elePHPant, mascote do PHP
O mascote do projeto PHP é o elePHPant, um elefante azul com o logotipo do PHP na lateral, desenhado por Vincent Pontier em 1998. Pontier relatou que a ideia surgiu ao perceber a forma de um elefante nas letras PHP vistas de lado.
As versões do elePHPant em pelúcia podem ter outras cores. Os modelos oficiais seguem o desenho original de Pontier. Há séries associadas a empresas, projetos e eventos da comunidade, reunidas em catálogos de colecionadores.
Sintaxe
Um programa "Olá, mundo!" em PHP 7.4, executado no servidor de desenvolvimento integrado à linguagem
<!DOCTYPE html><html><head><title>Programa "Olá, mundo!" em PHP</title></head><body><p><?='Olá, mundo!'?></p></body></html>
O interpretador PHP só executa o código que está entre seus delimitadores. O conteúdo fora deles não é processado como PHP, embora possa estar sujeito às estruturas de controle definidas no código. O delimitador <?php abre um trecho de PHP, e ?> o encerra. A forma abreviada <?= equivale a <?phpecho.pp. 22–23 e 46 Existe também a forma curta <?, que reduz a portabilidade dos arquivos de script, pois pode estar desativada na configuração local do PHP. Por esse motivo, o PHP Group desaconselha seu uso. Essa recomendação não se aplica à forma abreviada de echo, <?=. Antes do PHP 5.4.0, essa forma só funcionava com a opção short_open_tag ativada. A partir dessa versão, está sempre disponível. Os delimitadores separam o código PHP de outros conteúdos, como código JavaScript ou marcação HTML.
Em documentos XHTML e XML, os delimitadores <?php e ?> produzem instruções de processamento XML bem formadas. Dessa forma, a combinação de código PHP com a marcação do arquivo no servidor pode constituir um documento XML bem formado.
Os nomes das variáveis recebem um prefixo com o símbolo do cifrão, e não é necessário declarar seu tipo antecipadamente. O PHP 5 introduziu declarações de tipo que permitem exigir que os parâmetros de uma função sejam objetos de determinada classe, arrays, interfaces ou funções de retorno de chamada. Antes do PHP 7, essas declarações não podiam ser usadas com tipos escalares, como inteiros e strings.
O exemplo a seguir mostra como declarar e inicializar variáveis em PHP:
<?php$nome='João';// declaração e inicialização de uma variável do tipo string$idade=18;// declaração e inicialização de uma variável do tipo inteiro$altura=1.75;// declaração e inicialização de uma variável do tipo doubleecho$nome.' tem '.$altura." m de altura\n";// concatenação de variáveis e stringsecho"$nome tem $idade anos.";// interpolação de variáveis em uma string?>
Os nomes das variáveis diferenciam maiúsculas de minúsculas, ao contrário dos nomes de funções e classes. Strings delimitadas por aspas duplas ou pela sintaxe heredoc permitem inserir o valor de uma variável por interpolação. Como linguagem de formato livre, o PHP considera as quebras de linha como espaços em branco, e as instruções terminam com ponto e vírgula. Há três formas de escrever comentários: /* */ delimita comentários de uma ou mais linhas, enquanto // e # iniciam comentários de uma linha. A instrução echo é uma das palavras-chave usadas para produzir texto na saída.pp. 24–26
As palavras-chave e a sintaxe do PHP seguem o estilo de C. Condições if, laços for e while e instruções de retorno de funções têm sintaxe semelhante à de C, C++, C#, Java e Perl.
Tipos de dados
O PHP tem tipagem fraca e armazena números inteiroscom sinal em um intervalo que depende da plataforma, normalmente de 32 ou 64 bits. Não há um tipo inteiro nativo sem sinal. Variáveis inteiras podem receber valores em notação decimal, positiva ou negativa, octal, hexadecimal ou binária.
O intervalo dos números de ponto flutuante também depende da plataforma. Eles podem ser escritos em notação decimal de ponto flutuante ou em duas formas de notação científica. O PHP tem um tipo booleano nativo semelhante aos de Java e C++. Na conversão de números para esse tipo, valores diferentes de zero tornam-se verdadeiros, e zero torna-se falso, como em Perl e C++.
O tipo nulo é usado para variáveis sem valor, e NULL é seu único valor permitido.
Variáveis do tipo resource contêm referências a recursos externos. Em geral, são criadas por funções de uma extensão e só podem ser manipuladas por funções dessa mesma extensão. Arquivos abertos e conexões oferecidas por algumas extensões de bancos de dados são exemplos desses recursos. As imagens da extensão GD também eram representadas por recursos; a partir do PHP 8.0, passaram a usar objetos GdImage.
Arrays podem conter elementos de qualquer tipo aceito pelo PHP, como recursos, objetos e outros arrays. A ordem dos elementos é preservada nas listas de valores e nas tabelas hash com chaves e valores, e essas duas formas podem ser combinadas. O PHP também oferece strings, que podem ser delimitadas por aspas simples, aspas duplas ou pelas sintaxes nowdoc e heredoc.
A Standard PHP Library, ou SPL, reúne interfaces e classes para resolver problemas comuns e acessar dados com eficiência.
Funções
O núcleo do PHP define muitas funções, e outras estão disponíveis em extensões, com documentação acessível no manual on-line da linguagem. A biblioteca interna, porém, usa convenções de nomenclatura diferentes e apresenta as inconsistências mencionadas na seção de história.
O programador pode definir suas próprias funções:
functionminhaIdade(int$anoDeNascimento):string{// Calcula a idade subtraindo o ano de nascimento do ano atual.$idade=date('Y')-$anoDeNascimento;// Retorna uma string com a idade.return$idade.($idade==1?' ano':' anos');}echo'Tenho '.minhaIdade(1995).'.';
Em 2026, a saída desse programa é "Tenho 31 anos."
Funções PHP podem ser referenciadas por strings que contêm seus nomes, em lugar de ponteiros para funções. Isso permite usar funções comuns como retornos de chamada ou em tabelas de funções. Funções definidas pelo usuário podem ser criadas a qualquer momento, sem um protótipo prévio. Também podem ser definidas dentro de blocos de código, de modo que a decisão de criá-las ocorra durante a execução. A função function_exists verifica se uma função com determinado nome já foi definida. Chamadas de função exigem parênteses. A exceção são os construtores de classes chamados sem argumentos com o operador new, para os quais os parênteses são opcionais.
A função create_function(), introduzida no PHP 4.0.1 como uma pequena camada sobre eval(), permitia criar funções durante a execução do programa. Seu uso foi descontinuado no PHP 7.2, e a função foi removida no PHP 8.0 em favor da sintaxe de funções anônimas ou fechamentos, introduzida no PHP 5.3, que permite capturar variáveis do escopo envolvente. A sintaxe abreviada com seta foi acrescentada no PHP 7.4:
Nesse exemplo, criarSomador() cria um fechamento que captura o argumento $x, recebe outro argumento, $y, e é devolvido a quem chamou a função. Esse fechamento é um objeto de primeira classe, que pode ser armazenado em uma variável ou passado como parâmetro para outras funções.
Embora tenha tipagem dinâmica, o PHP aceita declarações de tipo nos parâmetros de funções e as verifica durante a execução. Esse recurso está disponível para classes e interfaces desde o PHP 5.0, para arrays desde o PHP 5.1, para valores invocáveis, ou callable, desde o PHP 5.4, e para os tipos escalares inteiro, ponto flutuante, string e booleano desde o PHP 7.0. O PHP 7.0 também introduziu declarações de tipo de retorno, escritas após a lista de parâmetros e precedidas por dois-pontos. A função criarSomador do exemplo anterior pode receber essas declarações da seguinte forma, com a sintaxe de seta disponível a partir do PHP 7.4:
functioncriarSomador(int$x):Closure{returnfn(int$y):int=>$x+$y;}$somador=criarSomador(8);echo$somador(2);// exibe "10"echo$somador(null);// lança um TypeError porque o tipo passado é incorreto$somador=criarSomador([]);// também lançaria um TypeError
Por padrão, declarações de tipos escalares seguem as regras de tipagem fraca. Se um parâmetro for do tipo int, por exemplo, a função pode receber inteiros, strings numéricas conversíveis, números de ponto flutuante ou booleanos, que serão convertidos para o tipo esperado. Desde o PHP 7, é possível ativar por arquivo um modo de tipagem estrita que impede essas conversões nos argumentos e valores de retorno, com a exceção de valores int aceitos onde se espera float.
A classe IntlDateFormatter permite obter o nome do dia da semana em português do Brasil, com a localidade pt_BR e o fuso America/Sao_Paulo.
<?phpdate_default_timezone_set("America/Sao_Paulo");functiondiasemana($data){$d=explode('/',$data);$ano=$d[2];$mes=$d[1];$dia=$d[0];$dataFormatada=DateTime::createFromFormat('Y-m-d',"$ano-$mes-$dia");$formatter=newIntlDateFormatter('pt_BR',IntlDateFormatter::FULL,IntlDateFormatter::NONE,'America/Sao_Paulo',IntlDateFormatter::GREGORIAN,'EEEE');return$formatter->format($dataFormatada);}echo'<h1>',diasemana('20/05/2017'),' - Dia da semana','</h1>';?>
Objetos PHP
O PHP 3 introduziu recursos básicos de programação orientada a objetos, ampliados no PHP 4. Isso permitiu trabalhar com níveis adicionais de abstração e facilitou a criação de programas. O tratamento de objetos foi inteiramente reescrito no PHP 5, com novos recursos e melhorias de desempenho. Nas versões anteriores, os objetos eram manipulados como tipos por valor. Para modificar um objeto recebido sem criar uma cópia, o código precisava recorrer com frequência a variáveis de referência. No novo modelo, os objetos passaram a ser referenciados por um identificador, em vez de serem passados por valor.
O PHP 5 introduziu variáveis de membro e métodos privados e protegidos, classes abstratas, classes finais, métodos abstratos e métodos finais. Também passou a oferecer uma forma padronizada de declarar construtores e destrutores, semelhante à de outras linguagens orientadas a objetos, como C++, e um modelo padrão de tratamento de exceções. O PHP 5 acrescentou interfaces e permitiu que uma classe implementasse mais de uma. Algumas interfaces permitem que os objetos interajam com o ambiente de execução. Objetos que implementam ArrayAccess podem ser usados com a sintaxe de arrays, enquanto objetos que implementam Iterator ou IteratorAggregate podem ser percorridos pela construção da linguagemforeach. A expressão static:: permite a vinculação estática tardia, que considera a classe chamada durante a execução.
Ao copiar um objeto com a palavra reservada clone, o PHP faz uma cópia superficial de suas propriedades. Propriedades que são referências a outras variáveis continuam sendo referências. Se houver um método __clone(), ele será chamado no novo objeto após a cópia, permitindo ajustar as propriedades necessárias. O programador pode, assim, partir da cópia das propriedades originais e modificar apenas o que precisar de outro valor.
A visibilidade das propriedades e dos métodos é definida pelas palavras-chavepublic, private e protected. Propriedades declaradas apenas com var são públicas, pois var equivale a public. Membros públicos podem ser acessados de qualquer lugar. O modificador protected restringe o acesso à classe que define o membro e às classes que participam de sua hierarquia de herança, enquanto private restringe a visibilidade à própria classe que o define. Objetos do mesmo tipo podem acessar os membros privados e protegidos uns dos outros, mesmo sendo instâncias distintas.
<?phpabstractclassUsuario{protectedstring$nome;publicfunction__construct(string$nome){// Coloca a primeira letra em maiúscula e as demais em minúsculas.$this->nome=ucfirst(strtolower($nome));}publicfunctionapresentar():string{return"Olá, meu nome é ".$this->nome;}abstractpublicfunctionatividade():string;}classEstudanteextendsUsuario{publicfunction__construct(string$nome,privatestring$curso){parent::__construct($nome);}publicfunctionatividade():string{return"estudo ".$this->curso;}}classDocenteextendsUsuario{publicfunction__construct(string$nome,privatearray$cursos){parent::__construct($nome);}publicfunctionatividade():string{return"ensino ".implode(", ",$this->cursos);}}$estudantes=[newEstudante("Alice","Ciência da Computação"),newEstudante("Bruno","Ciência da Computação"),newEstudante("Carlos","Administração"),];$docentes=[newDocente("Daniel",["Ciência da Computação","Segurança da Informação"]),newDocente("Elisa",["Ciência da Computação","Programação Gráfica 3D"]),newDocente("Fernanda",["Marketing Digital","Administração","Comércio Eletrônico"]),];foreach([$estudantes,$docentes]as$usuarios){echo$usuarios[0]::class."s:\n";array_walk($usuarios,function(Usuario$usuario){echo"{$usuario->apresentar()}, {$usuario->atividade()}\n";});}
O programa produz a seguinte saída:
Estudantes:
Olá, meu nome é Alice, estudo Ciência da Computação
Olá, meu nome é Bruno, estudo Ciência da Computação
Olá, meu nome é Carlos, estudo Administração
Docentes:
Olá, meu nome é Daniel, ensino Ciência da Computação, Segurança da Informação
Olá, meu nome é Elisa, ensino Ciência da Computação, Programação Gráfica 3D
Olá, meu nome é Fernanda, ensino Marketing Digital, Administração, Comércio Eletrônico
Implementações
A implementação original de PHP usa o Zend Engine. Para diferenciá-la das demais implementações, às vezes recebe informalmente o nome "Zend PHP". O Zend Engine compila o código-fonte PHP durante a execução, convertendo-o em um formato interno que consegue executar, e funciona assim como um interpretador. Uma primeira proposta de especificação da linguagem foi publicada em 2014. O repositório dessa especificação a identifica como um trabalho em elaboração.
Na execução de aplicações web, o PHP inicializa e encerra o contexto de cada requisição, embora um mesmo processo possa atender a várias requisições sucessivas. Para reduzir o tempo de execução e evitar a recompilação do código-fonte a cada acesso à página, os scripts podem ser armazenados no formato interno do mecanismo PHP por meio de um cache de opcodes. Esse recurso mantém a forma compilada do script em memória compartilhada, evitando que a análise sintática e a compilação sejam repetidas a cada execução. O Zend Opcache está incorporado ao PHP desde a versão 5.5. Outro cache de opcodes muito utilizado foi o Alternative PHP Cache, ou APC, disponível como extensão da PECL.
Além do Zend PHP, foram desenvolvidas implementações que usam compiladores ou compilação JIT. Elas buscaram ganhos de desempenho, embora nem sempre reproduzissem todo o comportamento da implementação de referência. Entre elas estão:
HHVM, sigla de HipHop Virtual Machine, desenvolvido no Facebook e publicado como código aberto. Quando oferecia suporte a PHP, convertia seu código em um bytecode de alto nível, uma linguagem intermediária, que um compilador JIT traduzia dinamicamente para código de máquina x86-64. Em dezembro de 2013, o projeto informou um ganho de desempenho de 16% na execução do site facebook.com após três semanas de otimizações. Em uma comparação reproduzida pela Kinsta em 2019, o PHP 7.2 teve desempenho ligeiramente superior ao HHVM na maioria das plataformas testadas. A versão 3.24 do HHVM foi a última com compromisso de compatibilidade com PHP 5. O suporte a PHP foi encerrado na versão 4.0, lançada em fevereiro de 2019.
HipHop, também desenvolvido no Facebook e publicado como código aberto, convertia os scripts PHP em código C++ e compilava o resultado. Em 2010, o Facebook informou uma redução média de cerca de 50% no uso de CPU de seus servidores web com essa ferramenta. No início de 2013, o Facebook o descontinuou em favor do HHVM, devido a dificuldades de implantação e à falta de suporte a partes da linguagem, como create_function() e eval().
Parrot, máquina virtual para linguagens dinâmicas. O tradutor Pipp transforma o código-fonte PHP em uma representação intermediária do Parrot, da qual é gerado o bytecode executado pela máquina virtual.
PeachPie, compilador de segunda geração que converte o código para bytecode CIL do .NET. Construído sobre a plataforma Roslyn, sucedeu o Phalanger e compartilha com ele componentes da arquitetura.
Phalanger, antecessor do PeachPie, que compila PHP para bytecode Common Intermediate Language do .NET.
Quercus, implementação de PHP em Java. Na edição Resin Professional, os scripts PHP são compilados em classes Java.
A sintaxe semelhante a XML do XHP, uma extensão do PHP usada pelo Facebook, participou dos experimentos que antecederam o React. A sintaxe JSX foi desenvolvida a partir de um projeto de Marcel Laverdet, também criador do XHP.
Licenciamento
PHP é um software livre disponibilizado sob a licença BSD de três cláusulas, também chamada de PHP License versão 4. Versões anteriores foram distribuídas sob as licenças PHP então vigentes, que permitem optar pelos termos de uma versão posterior da licença.
A PHP License 3.01, usada antes dessa mudança, continha a seguinte restrição:
Produtos derivados deste software não podem ser chamados de "PHP", nem podem ter "PHP" no nome, sem autorização prévia por escrito de group@php.net. É possível indicar que o software funciona em conjunto com PHP usando a expressão "Foo para PHP", em vez de chamá-lo de "PHP Foo" ou "phpfoo".
Essa restrição ao uso do nome "PHP" tornava as versões anteriores da licença incompatíveis com a GNU General Public License, ou GPL. A antiga licença do Zend Engine também era incompatível, devido a uma cláusula de publicidade semelhante à da licença BSD original.
Desenvolvimento e comunidade
O PHP distribui bibliotecas livres e de código aberto junto com seu código-fonte ou as utiliza na construção dos arquivos binários. A linguagem tem módulos para acessar servidores FTP, servidores de bancos de dados como PostgreSQL, MySQL e Microsoft SQL Server, o banco de dados embutido SQLite e servidores LDAP. As distribuições padrão também oferecem funções familiares a programadores de C, como as da família stdio.
Os desenvolvedores podem escrever extensões em C para acrescentar recursos à linguagem. Essas extensões podem ser compiladas estaticamente junto com o PHP ou carregadas dinamicamente durante a execução. Há extensões para a API do Windows, gerenciamento de processos em sistemas operacionaissemelhantes ao Unix, cadeias de caracteres multibyte e Unicode, cURL e formatos de compressão. Também foram criadas extensões para integração com IRC, geração dinâmica de imagens e conteúdo Adobe Flash, síntese de fala e acesso a bancos de dados. Neste último caso, PHP Data Objects, ou PDO, oferece uma camada de abstração. Algumas funções básicas da linguagem, como as que manipulam cadeias de caracteres e arrays, também são implementadas como extensões. O projeto PHP Extension Community Library, ou PECL, mantém um repositório dessas extensões. A maior parte da comunidade trabalha com desenvolvimento web, executando PHP no servidor, que também pode enviar JavaScript para execução no cliente. Entre os usos menos comuns estão as aplicações gráficas independentes, desenvolvidas, por exemplo, com o PHP-GTK, que deixou de receber manutenção, e o controle de drones.
Projetos como o Zephir permitem criar extensões em uma linguagem de alto nível e compilá-las como extensões nativas do PHP. O projeto se propõe a simplificar a criação das extensões e reduzir o tempo de programação e testes em comparação com sua escrita diretamente em C.
A Zend Technologies oferece uma certificação em PHP baseada em um exame sobre a linguagem até a versão 8.4. O exame, que antes se baseava no PHP 7 e no PHP 5.5, permite obter o título de desenvolvedor certificado.
A fundação contrata desenvolvedores para trabalhar no repositório central da linguagem. Roman Pronskiy, integrante de seu conselho, afirmou que a intenção era pagar "salários de mercado" a esses profissionais.
O Sovereign Tech Fund, da Alemanha, destinou mais de 200 mil euros à fundação. Em 2026, ela contava com 13 engenheiros em regime integral ou parcial.
Instalação e configuração
Exemplo de saída da função phpinfo() no PHP 7.1
O suporte a PHP pode ser acrescentado a um servidor web como módulo nativo ou por meio de CGI ou FastCGI. As formas de integração são chamadas SAPIs. O Servidor Apache pode carregar um módulo PHP; o Microsoft IIS pode usar FastCGI; e o FrankenPHP integra a linguagem ao Caddy. Historicamente, o PHP também ofereceu módulos para servidores como o iPlanet Web Server, por meio de NSAPI, e o OmniHTTPd, por meio de ISAPI. Essas duas SAPIs foram removidas no PHP 7.0. Quando se usa CGI ou FastCGI, o servidor encaminha as requisições PHP ao processo responsável pela execução dos scripts.
O PHP-FPM, sigla de FastCGI Process Manager, é uma implementação alternativa de FastCGI incluída na distribuição oficial do PHP desde a versão 5.3.3. Acrescenta recursos à implementação mais antiga de FastCGI, sobretudo para servidores web que recebem muitas requisições.
Para executar scripts na linha de comando, pode-se usar o executável PHP CLI. A linguagem oferece uma SAPI para CLI desde a versão 4.3.0. Essa interface foi criada principalmente para o desenvolvimento de aplicações de shell. Seu comportamento difere em alguns pontos das demais SAPIs, embora compartilhe com elas boa parte do funcionamento.
A interface SAPI permite que o PHP se comunique com diferentes servidores web. Na combinação de PHP 5 e Apache 2.0 para Windows, por exemplo, ela era fornecida pelo arquivo DLLphp5apache2.dll, um módulo que intermediava a comunicação entre o PHP e o servidor no formato esperado pelo Apache. As interfaces CGI e de linha de comando também são SAPIs do PHP.
O PHP também pode ser usado para escrever aplicações de computador com interface gráfica, por meio do PHP Desktop ou da extensão descontinuada PHP-GTK. O PHP-GTK não faz parte da distribuição oficial. A versão PHP-GTK 2 exige PHP 5.1.0 ou posterior, e sua instalação geralmente é feita pela compilação do código-fonte.
O Windows Azure SDK for PHP, para uso com o Microsoft Azure. Esse SDK deixou de receber suporte oficial da Microsoft em fevereiro de 2021.
As opções de configuração controlam o funcionamento do núcleo do PHP e de suas extensões. O arquivo php.ini é procurado em locais diferentes, conforme a forma de execução da linguagem. Ele se divide em seções, e algumas opções também podem ser definidas na configuração do servidor web.
Uso
Organização do conjunto de programas LAMP, apresentado aqui com o Squid
Há também distribuições e adaptações específicas para outras plataformas. Para IBM i, a IBM documenta as opções Seiden PHP+ e ZendPHP. Para OpenVMS, a VMS Software disponibiliza uma adaptação própria; em outubro de 2026, seu catálogo listava as versões V8.0-1A para Integrity e x86 e V5.6-10L para Alpha. Em 2026, a equipe de software aberto da IBM incluiu PHP entre os programas cujas versões recentes haviam sido validadas em Linux na arquitetura IBM Z (s390x).
Geração de uma página web dinâmica com PHP e MySQL no lado do servidor
A arquitetura LAMP difundiu-se como uma forma de implantar aplicações web. PHP costuma ser o "P" desse conjunto, ao lado de Linux, Apache e MySQL, embora a letra também possa designar Python, Perl ou uma combinação dessas linguagens. Há conjuntos semelhantes para Windows e macOS, chamados WAMP e MAMP, cuja primeira letra corresponde ao sistema operacional. Esses pacotes simplificam a instalação e a atualização dos componentes. O macOS já trouxe PHP e Apache em sua instalação padrão, mas deixou de incluir PHP a partir do macOS 12 Monterey.
Para necessidades específicas, o PHP permite escrever extensões em C ou C++, com uma estrutura documentada para integração ao interpretador. Além de acrescentar bibliotecas, essas extensões podem acelerar partes do programa que exigem mais processamento, ao usar uma linguagem compilada. O PHP também pode ser incorporado a outros programas como linguagem interna de scripts, com acesso às estruturas de dados do programa que o hospeda.
A ausência de suporte a múltiplas threads no núcleo da linguagem recebeu críticas. A extensão "pthreads", da PECL, permitia esse uso, mas deixou de receber manutenção e foi substituída pela extensão "parallel".
Além da interface de linha de comando php-cli, foram desenvolvidos mecanismos de integração com ActiveX e Windows Script Host, como o PHPScript, que permite incorporar PHP a aplicações compatíveis com ActiveScript.
Em janeiro de 2013, PHP era usado em mais de 240 milhões de sites, equivalentes a 39% da amostra pesquisada, e estava instalado em 2,1 milhões de servidores web.
Em 22 de outubro de 2026, segundo a W3Techs, PHP era usado por 69,3% dos sites cuja linguagem de programação no servidor podia ser identificada. Entre os sites que usavam PHP, 65,3% utilizavam PHP 8, 26,9% PHP 7, 7,7% PHP 5 e 0,1% PHP 4.
Participação das versões principais entre os sites que usavam PHP em 22 de outubro de 2026
PHP 8
PHP 7
PHP 5
Distribuição das versões principais entre os sites que usavam PHP em 22 de outubro de 2026
Versão
Participação
PHP 8
65,3%
PHP 7
26,9%
PHP 5
7,7%
PHP 4
0,1%
Distribuição das versões secundárias entre os sites com PHP 8 em 22 de outubro de 2026. As cores correspondem às linhas da tabela. O PHP 8.6, em desenvolvimento e com participação inferior a 0,1%, não é representado.
Distribuição das versões do PHP em 22 de outubro de 2026
Versão
Participação dentro da versão principal
Participação estimada no total de sites com PHP
PHP 8.6 (em desenvolvimento)
Menos de 0,1% do PHP 8
Menos de 0,1%
PHP 8.5
4,4% do PHP 8
2,9%
PHP 8.4
12,1% do PHP 8
7,9%
PHP 8.3
34,8% do PHP 8
22,7%
PHP 8.2
27,7% do PHP 8
18,1%
PHP 8.1
15,2% do PHP 8
9,9%
PHP 8.0
5,8% do PHP 8
3,8%
PHP 7.4
73,4% do PHP 7
19,7%
PHP 7.3
10,5% do PHP 7
2,8%
PHP 7.2
8,4% do PHP 7
2,3%
PHP 7.1
3,7% do PHP 7
1,0%
PHP 7.0
4,0% do PHP 7
1,1%
PHP 5.6
55,0% do PHP 5
4,2%
PHP 5.5
7,9% do PHP 5
0,6%
PHP 5.4
14,7% do PHP 5
1,1%
PHP 5.3
15,4% do PHP 5
1,2%
PHP 5.2
6,7% do PHP 5
0,5%
PHP 5.1
0,4% do PHP 5
Menos de 0,1%
PHP 5.0
Menos de 0,1% do PHP 5
Menos de 0,1%
PHP 4.4
74,0% do PHP 4
Menos de 0,1%
PHP 4.3
22,0% do PHP 4
Menos de 0,1%
PHP 4.2
2,7% do PHP 4
Menos de 0,1%
PHP 4.1
0,6% do PHP 4
Menos de 0,1%
PHP 4.0
0,6% do PHP 4
Menos de 0,1%
A segunda coluna usa como universo os sites de cada versão principal. A terceira apresenta uma estimativa obtida pela multiplicação dessa proporção pela participação da versão principal entre todos os sites com PHP. Os valores foram arredondados e podem não somar exatamente 100%. A pesquisa também registra identificadores como 7.9, 7.5, 4.20 e 4.6, que não correspondem a versões oficiais e não foram incluídos na tabela.
Segurança
Em um levantamento com dados gerados em 1 de janeiro de 2013, Fabien Coelho classificou como relacionados a PHP cerca de 29% dos registros de vulnerabilidades da National Vulnerability Database e 18% dos produtos nela catalogados. A análise abrangia tanto a linguagem quanto aplicações escritas em PHP e reconhecia as limitações da identificação por palavras-chave. O autor identificou 22 vulnerabilidades no próprio PHP publicadas em 2009. Para detectar automaticamente falhas de validação de entradas, algumas linguagens incluem verificação de contaminação de dados. Propostas para acrescentar esse recurso ao PHP foram rejeitadas ou abandonadas.
Projetos externos, como Suhosin e Snuffleupagus, procuram remover ou modificar recursos da linguagem que podem causar problemas de segurança.
Versões antigas do PHP tinham parâmetros de configuração e valores padrão que tornavam aplicações vulneráveis. Entre os mais conhecidos estavam as diretivas magic_quotes_gpc e register_globals. A segunda transformava parâmetros da URL em variáveis PHP, permitindo que um invasor atribuísse valores a variáveis globais não inicializadas e interferisse na execução do script. Os recursos "magic quotes" e "register globals" foram desaconselhados a partir do PHP 5.3.0 e removidos no PHP 5.4.0.
Manter a execução de PHP habilitada no diretório que armazena arquivos enviados pelos usuários também pode permitir a execução de código malicioso inserido nesses arquivos. Quando o PHP é executado como módulo do Apache, a diretiva engine permite desabilitar essa execução. Para reduzir o risco, os arquivos podem ser armazenados fora do diretório público do servidor e disponibilizados por um script intermediário, ou mantidos em um diretório no qual a execução de código esteja desabilitada.
O carregamento dinâmico de extensões por dl() é controlado pela diretiva enable_dl. A função só está disponível nas SAPIs CLI e embed e na SAPI CGI quando executada pela linha de comando.
Conversões de tipo implícitas podem fazer valores diferentes serem considerados iguais, contrariando a intenção do programador e abrindo falhas de segurança. Por exemplo, '0e1234' == '0' resulta em true, porque cadeias de caracteres que podem ser interpretadas como números são convertidas em números. Nesse caso, o primeiro valor é interpretado como notação científica, 0 × 101234, que equivale a zero. Falhas desse tipo foram descritas no mecanismo de redefinição de senhas do Simple Machines Forum, que comparava partes de hashes em MD5, e no controle de acesso a arquivos do TYPO3, que comparava um hash recebido com o valor calculado. Uma comparação semelhante também foi analisada no código de redefinição de senhas do phpBB, embora a análise sobre o Simple Machines Forum apontasse que o ataque não era viável naquele código do phpBB. A função strcmp e o operador de identidade === evitam a conversão numérica nessa comparação, de modo que '0e1234' === '0' resulta em false. Para comparar valores secretos e também reduzir a exposição a ataques de temporização, a linguagem oferece hash_equals().
Em um levantamento publicado em 2013, Paweł Krawczyk apresentou dados fornecidos pelo Zone-H sobre mais de 90 mil relatos de desfiguração de sites, registrados entre dezembro de 2012 e fevereiro de 2013. A inclusão de arquivos foi a técnica mais frequente nessa amostra, com 53,5% dos relatos. No PHP, a diretiva allow_url_include controla o uso de URLs em construções como include e require e depende de allow_url_fopen também estar habilitada.
Segurança criptográfica
As funções rand() e mt_rand() usam geradores de números pseudoaleatórios que não são seguros para fins criptográficos. Desde o PHP 7.0, a função random_int() usa uma fonte de aleatoriedade criptograficamente segura fornecida pelo sistema.
Um estudo de 2012 demonstrou ataques contra a semente e ataques de recuperação de estado de geradores pseudoaleatórios usados por aplicações PHP. Em 2012, uma GPU de US$ 250 podia realizar até 230 cálculos de MD5 por segundo, enquanto uma GPU de US$ 750 podia realizar quatro vezes esse número no mesmo intervalo. A recuperação da semente ou do estado de um gerador previsível pode permitir a previsão de códigos de redefinição de senha e a tomada de contas de usuários.
Suporte de longo prazo
A equipe de desenvolvimento fornece correções de erros durante dois anos após o lançamento de cada versão secundária, seguidos por dois anos de correções de segurança. Depois desse prazo, a versão chega ao fim de seu ciclo de vida e deixa de receber suporte oficial.
Empresas como a Zend e a Pagely oferecem suporte comercial por períodos mais longos.
As vulnerabilidades CVE-2026-109618 e CVE-2026-109619 permitem a execução remota de código em PHP e receberam, em conjunto, o nome PHP2Shell. Sua existência foi anunciada em 20 de outubro de 2026. As correções de emergência e os detalhes das falhas foram publicados no dia seguinte.
↑About this manual. PHP Manual. Em inglês. Consultado em 22 de outubro de 2026.
↑Chris Rayns et al. Introduction to CICS Dynamic Scripting. IBM Redbooks. Março de 2011. p. 18. ISBN: 9780738435527. Em inglês. Consultado em 22 de outubro de 2026.
↑Trachtenberg, Adam (15 de julho de 2004). «Why PHP5 Rocks!» (em inglês). O'Reilly. Consultado em 22 de fevereiro de 2008. Arquivado do original em 31 de março de 2016
↑Corbet, Jonathan (24 de março de 2010). «Resetting PHP6» (em inglês). Cópia arquivada em 5 de junho de 2026. Há livros que anunciam a cobertura do PHP 6 desde pelo menos 2008, embora, em março de 2010, essa versão ainda esteja longe do lançamento.
↑«Visibility (PHP Manual)». theserverpages.com (em inglês). 19 de maio de 2005. Consultado em 26 de agosto de 2010. Arquivado do original em 24 de setembro de 2010
↑«Embedding PHP in HTML» (em inglês). O'Reilly. 3 de maio de 2001. Consultado em 25 de fevereiro de 2008. Arquivado do original em 19 de fevereiro de 2008
↑PHP on IBM i. IBM. 5 de dezembro de 2025. Em inglês. Consultado em 22 de outubro de 2026.
↑PHP. VMS Software. Em inglês. Consultado em 22 de outubro de 2026.
↑Manual:Installation requirements#PHP. MediaWiki. 25 de janeiro de 2010. Em inglês. Consultado em 26 de fevereiro de 2010. "PHP é a linguagem de programação em que o MediaWiki é escrito [...]"
↑About WordPress. Em inglês. Consultado em 26 de fevereiro de 2010. "O WordPress foi [...] construído em PHP."
Dall'Oglio, Pablo (2007). PHP Programando com Orientação a Objetos. Inclui Design Patterns 1 ed. São Paulo: Novatec. 576páginas. ISBN978-85-7522-137-2
Dall'Oglio, Pablo (2007). PHP-GTK. Criando Aplicações Gráficas com PHP 2 ed. São Paulo: Novatec. 445páginas. ISBN978-85-7522-110-5
Melo, Alexandre Altair de; Nascimento, Mauricio G. F. (2007). PHP Profissional. Aprenda a desenvolver sistemas profissionais orientados a objetos com padrões de projeto 1 ed. São Paulo: Novatec. 464páginas. ISBN978-85-7522-141-9
Fischer, Herbert G. (2000). PHP. Guia de Consulta Rápida. São Paulo: Novatec. 128páginas. ISBN85-85184-69-8
Ligações externas
O Commons possui uma categoria com imagens e outros ficheiros sobre PHP