mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
Minor corrections to pull request #341 and initial translation of features/gc and features/dtrace (#343)
* Minor corrections to pull request #341 * Initial translation of features/gc and features/dtrace * Update to language-snippets.ent * Update to language/errors.xml * Updates to language/predefined/attributes/* * Updates to outdated language/predefined/variables/* * Update to outdated files in install/windows/ * New translation of missing file security/sessions.xml * New translation of missing files in language/context * Update datetime.xml * New translation of missing files in datetime/ --------- Co-authored-by: LEONARDO LARA RODRIGUES <leonardolara@github.com>
This commit is contained in:
committed by
GitHub
parent
69ef6d8f26
commit
909023c945
558
features/dtrace.xml
Normal file
558
features/dtrace.xml
Normal file
@@ -0,0 +1,558 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 9e2d8231b5d8a3795b365c6770fab288e59e6249 Maintainer: _ Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<chapter xml:id="features.dtrace" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Instrumentação dimâmica DTrace</title>
|
||||
|
||||
<sect1 xml:id="features.dtrace.introduction">
|
||||
<title>Introdução ao PHP e DTrace</title>
|
||||
|
||||
<para>
|
||||
DTrace é um framework de instrumentação com alta disponibilidade e pequena sobrecarga,
|
||||
disponível em um número de plataformas incluindo Solaris, macOS,
|
||||
Oracle Linux e BSD. DTrace pode instrumentar comportamento do sistema operacional
|
||||
e execução de programa de usuário. Ele pode exibir valores de argumentos e ser
|
||||
usado para inferir estatísticas de desempenho. Os sensores são monitorados pos scripts
|
||||
criados pelo usuário escritos na linguagem própria do DTrace (D). Isto
|
||||
permite uma análise eficiente de pontos de dados.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Sensores PHP que não estão monitorados ativamente por um script
|
||||
D do usuário não contêm código instrumentado, então não há
|
||||
degradação de desempenho durante a execução normal da aplicação.
|
||||
Sensores que estão sendo monitorados incorrem em uma sobrecarga pequena o suficiente
|
||||
para permitir monitoramento pelo DTrace em sistemas ativos em fase de produção.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
PHP incorpora sensores com "Instrumentação Estaticamente Definida no Nível de Usuário" (USDT em inglês)
|
||||
que são ativados em tempo de execução. Por exemplo, quando um script D
|
||||
está monitorando o sensor de <literal>entrada de função</literal> do PHP, então
|
||||
a cada momento que uma função do PHP é chamada, este sensor é disparado e
|
||||
o código de ação do script D associado é executado. Este código de ação
|
||||
poderia, por exemplo, imprimir argumentos de sensor como a localização do arquivo-fonte
|
||||
da função PHP. Ou a ação poderia agregar dados como
|
||||
o númedo de vezes que cada função é chamada.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Apenas os sensores USDT do PHP são descritas aqui. Refira-se à literatura externa do Dtrace,
|
||||
tanto geral quanto específica do sistema operacional, para entender como
|
||||
o DTrace pode ser usado para instrumentar funções arbitrárias, e como ele pode ser
|
||||
usado para instrumentar comportamento do sistema operacional. Note que nem todas as
|
||||
características do DTrace estão disponíveis em todas as implementações.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Os sensores estáticos do Dtrace no PHP podem alternativamente ser utilizados com a
|
||||
ferramenta SystemTap de algumas distribuições Linux.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="features.dtrace.dtrace">
|
||||
<title>Usando PHP e DTrace</title>
|
||||
<para>
|
||||
O PHP pode ser configuracom com sensores estáticos do DTrace em plataformas que
|
||||
suportam a Instrumentação Dinâmica do DTrace.
|
||||
</para>
|
||||
|
||||
<sect2 xml:id="features.dtrace.install">
|
||||
<title>Configurando o PHP para Sensores Estáticos DTrace</title>
|
||||
|
||||
<para>
|
||||
Refira-se à documentação externa específica da plataforma para habilitar
|
||||
o suporte do DTrace no sistema operacional. Por exemplo, no Oracle Linux
|
||||
inicialize um kernel UEK3 e rode os seguintes comandos:
|
||||
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
# modprobe fasttrap
|
||||
# chmod 666 /dev/dtrace/helper
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>
|
||||
Ao invés de usar <literal>chmod</literal>, pode-se alternativamente usar uma
|
||||
regra de pacote ACL para limitar o acesso a um dispositivo para um usuário específico.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Construa o PHP com o parâmetro de configuração <literal>--enable-dtrace</literal>:
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
# ./configure --enable-dtrace ...
|
||||
# make
|
||||
# make install
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>
|
||||
Isto habilita sensores estáticos no núcleo do PHP. Quaisquer extensões PHP
|
||||
que fornecem seus próprios sensores devem ser construídas separadamente como
|
||||
extensões compartilhadas.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.dtrace.static-probes">
|
||||
<title>Sensores Estáticos DTrace no Núcleo do PHP</title>
|
||||
<table>
|
||||
<title>Os sensores estáticos a seguir estão disponíveis no PHP</title>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Nome do Sensor</entry>
|
||||
<entry>Descrição do Sensor</entry>
|
||||
<entry>Argumentos do Sensor</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><literal>request-startup</literal></entry>
|
||||
<entry>Dispara quando uma requisição inicia.</entry>
|
||||
<entry>char *<varname>file</varname>, char *<varname>request_uri</varname>, char *<varname>request_method</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>request-shutdown</literal></entry>
|
||||
<entry>Dispara quando uma requisição termina.</entry>
|
||||
<entry>char *<varname>file</varname>, char *<varname>request_uri</varname>, char *<varname>request_method</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>compile-file-entry</literal></entry>
|
||||
<entry>Dispara quando a compilação de um script inicia.</entry>
|
||||
<entry>char *<varname>compile_file</varname>, char *<varname>compile_file_translated</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>compile-file-return</literal></entry>
|
||||
<entry>Dispara quando a compilação de um script termina.</entry>
|
||||
<entry>char *<varname>compile_file</varname>, char *<varname>compile_file_translated</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>execute-entry</literal></entry>
|
||||
<entry>Dispara quando um array de opcode está para ser executado. Por
|
||||
exemplo, ele dispara em chamadas de função, de includes e em continuação
|
||||
de geradores.</entry>
|
||||
<entry>char *<varname>request_file</varname>, int <varname>lineno</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>execute-return</literal></entry>
|
||||
<entry>Dispara depois da execução de um array de opcode.</entry>
|
||||
<entry>char *<varname>request_file</varname>, int <varname>lineno</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>function-entry</literal></entry>
|
||||
<entry>Dispara quando o motor do PHP entra em uma chamada de função ou método.</entry>
|
||||
<entry>char *<varname>function_name</varname>, char *<varname>request_file</varname>, int <varname>lineno</varname>, char *<varname>classname</varname>, char *<varname>scope</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>function-return</literal></entry>
|
||||
<entry>Dispara quando o motor do PHP retorna de uma chamada de função ou método.</entry>
|
||||
<entry>char *<varname>function_name</varname>, char *<varname>request_file</varname>, int <varname>lineno</varname>, char *<varname>classname</varname>, char *<varname>scope</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>exception-thrown</literal></entry>
|
||||
<entry>Dispara quando uma exceção é disparada.</entry>
|
||||
<entry>char *<varname>classname</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>exception-caught</literal></entry>
|
||||
<entry>Dispara quando uma exceção é capturada.</entry>
|
||||
<entry>char *<varname>classname</varname></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>error</literal></entry>
|
||||
<entry>Dispara quando um erro ocorre, independente do nível de <link linkend="ini.error-reporting">error_reporting</link>.</entry>
|
||||
<entry>char *<varname>errormsg</varname>, char *<varname>request_file</varname>, int <varname>lineno</varname></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<para>
|
||||
Extensões de PHP podem também conter sensores estáticos adicionais.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.dtrace.list-probes">
|
||||
<title>Listando os Sensores Estáticos DTrace no PHP</title>
|
||||
<para>
|
||||
Para listar os sensores disponíveis, inicie um processo PHP e então execute:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
# dtrace -l
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A saída será similar a:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
ID PROVIDER MODULE FUNCTION NAME
|
||||
[ . . . ]
|
||||
4 php15271 php dtrace_compile_file compile-file-entry
|
||||
5 php15271 php dtrace_compile_file compile-file-return
|
||||
6 php15271 php zend_error error
|
||||
7 php15271 php ZEND_CATCH_SPEC_CONST_CV_HANDLER exception-caught
|
||||
8 php15271 php zend_throw_exception_internal exception-thrown
|
||||
9 php15271 php dtrace_execute_ex execute-entry
|
||||
10 php15271 php dtrace_execute_internal execute-entry
|
||||
11 php15271 php dtrace_execute_ex execute-return
|
||||
12 php15271 php dtrace_execute_internal execute-return
|
||||
13 php15271 php dtrace_execute_ex function-entry
|
||||
14 php15271 php dtrace_execute_ex function-return
|
||||
15 php15271 php php_request_shutdown request-shutdown
|
||||
16 php15271 php php_request_startup request-startup
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Os valores da coluna Provider consistem de <literal>php</literal> mais o id
|
||||
do processo PHP sendo executado.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Se o servidor web Apache estiver rodando, o módulo poderia ser, por
|
||||
exemplo, <filename>libphp5.so</filename>, e haveria
|
||||
múltiplos blocos de listagens, um para cada processo Apache em execução.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A coluna Function refere-se aos nomes das funções da implementação
|
||||
interna do PHP, em C, onde cada fornecedor está localizado.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Se um processo PHP não estiver em execução, então nenhum sensor PHP será mostrado.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.dtrace.examples">
|
||||
<title>Exemplo de DTrace com PHP</title>
|
||||
<para>
|
||||
Este exemplo mostra o básico da linguagem D de scripts DTrace.
|
||||
<example>
|
||||
<title>Arquivo <filename>all_probes.d</filename> para instrumentar todos os Sensores Estáticos PHP com DTrace</title>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
#!/usr/sbin/dtrace -Zs
|
||||
|
||||
#pragma D option quiet
|
||||
|
||||
php*:::compile-file-entry
|
||||
{
|
||||
printf("PHP compile-file-entry\n");
|
||||
printf(" compile_file %s\n", copyinstr(arg0));
|
||||
printf(" compile_file_translated %s\n", copyinstr(arg1));
|
||||
}
|
||||
|
||||
php*:::compile-file-return
|
||||
{
|
||||
printf("PHP compile-file-return\n");
|
||||
printf(" compile_file %s\n", copyinstr(arg0));
|
||||
printf(" compile_file_translated %s\n", copyinstr(arg1));
|
||||
}
|
||||
|
||||
php*:::error
|
||||
{
|
||||
printf("PHP error\n");
|
||||
printf(" errormsg %s\n", copyinstr(arg0));
|
||||
printf(" request_file %s\n", copyinstr(arg1));
|
||||
printf(" lineno %d\n", (int)arg2);
|
||||
}
|
||||
|
||||
php*:::exception-caught
|
||||
{
|
||||
printf("PHP exception-caught\n");
|
||||
printf(" classname %s\n", copyinstr(arg0));
|
||||
}
|
||||
|
||||
php*:::exception-thrown
|
||||
{
|
||||
printf("PHP exception-thrown\n");
|
||||
printf(" classname %s\n", copyinstr(arg0));
|
||||
}
|
||||
|
||||
php*:::execute-entry
|
||||
{
|
||||
printf("PHP execute-entry\n");
|
||||
printf(" request_file %s\n", copyinstr(arg0));
|
||||
printf(" lineno %d\n", (int)arg1);
|
||||
}
|
||||
|
||||
php*:::execute-return
|
||||
{
|
||||
printf("PHP execute-return\n");
|
||||
printf(" request_file %s\n", copyinstr(arg0));
|
||||
printf(" lineno %d\n", (int)arg1);
|
||||
}
|
||||
|
||||
php*:::function-entry
|
||||
{
|
||||
printf("PHP function-entry\n");
|
||||
printf(" function_name %s\n", copyinstr(arg0));
|
||||
printf(" request_file %s\n", copyinstr(arg1));
|
||||
printf(" lineno %d\n", (int)arg2);
|
||||
printf(" classname %s\n", copyinstr(arg3));
|
||||
printf(" scope %s\n", copyinstr(arg4));
|
||||
}
|
||||
|
||||
php*:::function-return
|
||||
{
|
||||
printf("PHP function-return\n");
|
||||
printf(" function_name %s\n", copyinstr(arg0));
|
||||
printf(" request_file %s\n", copyinstr(arg1));
|
||||
printf(" lineno %d\n", (int)arg2);
|
||||
printf(" classname %s\n", copyinstr(arg3));
|
||||
printf(" scope %s\n", copyinstr(arg4));
|
||||
}
|
||||
|
||||
php*:::request-shutdown
|
||||
{
|
||||
printf("PHP request-shutdown\n");
|
||||
printf(" file %s\n", copyinstr(arg0));
|
||||
printf(" request_uri %s\n", copyinstr(arg1));
|
||||
printf(" request_method %s\n", copyinstr(arg2));
|
||||
}
|
||||
|
||||
php*:::request-startup
|
||||
{
|
||||
printf("PHP request-startup\n");
|
||||
printf(" file %s\n", copyinstr(arg0));
|
||||
printf(" request_uri %s\n", copyinstr(arg1));
|
||||
printf(" request_method %s\n", copyinstr(arg2));
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Este script usa a opção <literal>-Z</literal> para a aplicação
|
||||
<filename>dtrace</filename>, permitindo que ela seja executada quando não
|
||||
há processo PHP em execução. Se esta opção fosse omitida, o script
|
||||
iria terminar imediatamente porque ele saberia que nenhum dos sensores
|
||||
a serem monitorados existiriam.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
O script instrumenta todos os pontos de sensores estáticos do núcleo do PHP durante toda a
|
||||
duração de um script PHP em execução. Execute o script D:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
# ./all_probes.d
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Executa um script PHP ou aplicação. O script D de monitoramento terá
|
||||
como saída os argumentos de cada um dos sensores quando for disparado.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Quando o monitoramento estiver completo, o script D pode ser terminado com
|
||||
<keycombo action='simul'><keycap>CTRL</keycap><keycap>C</keycap></keycombo>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Em máquinas com múltiplas CPUs, pode parecer que os sensor estão em ordem
|
||||
não sequencial. Isto depende de qual CPU está processando os sensores,
|
||||
e como as threads migram atráves dos CPUs. Mostrar os timestamps dos sensores
|
||||
irá ajudar a reduzir a confusão, por exemplo:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
php*:::function-entry
|
||||
{
|
||||
printf("%lld: PHP function-entry ", walltimestamp);
|
||||
[ . . .]
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.dtrace.references">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><link linkend="oci8.dtrace">Instrumentação Dinâmica OCI8 e DTrace</link></member>
|
||||
</simplelist>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="features.dtrace.systemtap">
|
||||
<title>Usando SystemTap com Sensores Estáticos DTrace</title>
|
||||
<para>
|
||||
Em algumas distribuições Linux, o utilitário SystemTap de instrumentação pode ser
|
||||
usado para instrumentar sensores estáticos do PHP. Isso está disponível no
|
||||
PHP 5.4.20 e PHP 5.5.
|
||||
</para>
|
||||
|
||||
<sect2 xml:id="features.dtrace.systemtap-install">
|
||||
<title>Instalando PHP com SystemTap</title>
|
||||
|
||||
<para>
|
||||
Instale o pacote de desenvolvimento do SystemTap, SDT:
|
||||
<informalexample>
|
||||
<programlisting role="shell">
|
||||
<![CDATA[
|
||||
# yum install systemtap-sdt-devel
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Instale o PHP com os sensores DTrace habilitados:
|
||||
<informalexample>
|
||||
<programlisting role="shell">
|
||||
<![CDATA[
|
||||
# ./configure --enable-dtrace ...
|
||||
# make
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.dtrace.systemtap-list-probes">
|
||||
<title>Listando os Sensores Estáticos com SystemTap</title>
|
||||
|
||||
<para>
|
||||
Os sensores estáticos em PHP podem ser listados usando <filename>stap</filename>:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
# stap -l 'process.provider("php").mark("*")' -c 'sapi/cli/php -i'
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A saída será:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
process("sapi/cli/php").provider("php").mark("compile__file__entry")
|
||||
process("sapi/cli/php").provider("php").mark("compile__file__return")
|
||||
process("sapi/cli/php").provider("php").mark("error")
|
||||
process("sapi/cli/php").provider("php").mark("exception__caught")
|
||||
process("sapi/cli/php").provider("php").mark("exception__thrown")
|
||||
process("sapi/cli/php").provider("php").mark("execute__entry")
|
||||
process("sapi/cli/php").provider("php").mark("execute__return")
|
||||
process("sapi/cli/php").provider("php").mark("function__entry")
|
||||
process("sapi/cli/php").provider("php").mark("function__return")
|
||||
process("sapi/cli/php").provider("php").mark("request__shutdown")
|
||||
process("sapi/cli/php").provider("php").mark("request__startup")
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.dtrace.systemtap-examples">
|
||||
<title>Exemplo de SystemTap com PHP</title>
|
||||
|
||||
<para>
|
||||
<example>
|
||||
<title><filename>all_probes.stp</filename> para instrumentação de todos os Sensores Estáticos do PHP com SystemTap</title>
|
||||
<programlisting role="shell">
|
||||
<![CDATA[
|
||||
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
|
||||
printf("Probe compile__file__entry\n");
|
||||
printf(" compile_file %s\n", user_string($arg1));
|
||||
printf(" compile_file_translated %s\n", user_string($arg2));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
|
||||
printf("Probe compile__file__return\n");
|
||||
printf(" compile_file %s\n", user_string($arg1));
|
||||
printf(" compile_file_translated %s\n", user_string($arg2));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("error") {
|
||||
printf("Probe error\n");
|
||||
printf(" errormsg %s\n", user_string($arg1));
|
||||
printf(" request_file %s\n", user_string($arg2));
|
||||
printf(" lineno %d\n", $arg3);
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
|
||||
printf("Probe exception__caught\n");
|
||||
printf(" classname %s\n", user_string($arg1));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
|
||||
printf("Probe exception__thrown\n");
|
||||
printf(" classname %s\n", user_string($arg1));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
|
||||
printf("Probe execute__entry\n");
|
||||
printf(" request_file %s\n", user_string($arg1));
|
||||
printf(" lineno %d\n", $arg2);
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("execute__return") {
|
||||
printf("Probe execute__return\n");
|
||||
printf(" request_file %s\n", user_string($arg1));
|
||||
printf(" lineno %d\n", $arg2);
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("function__entry") {
|
||||
printf("Probe function__entry\n");
|
||||
printf(" function_name %s\n", user_string($arg1));
|
||||
printf(" request_file %s\n", user_string($arg2));
|
||||
printf(" lineno %d\n", $arg3);
|
||||
printf(" classname %s\n", user_string($arg4));
|
||||
printf(" scope %s\n", user_string($arg5));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("function__return") {
|
||||
printf("Probe function__return: %s\n", user_string($arg1));
|
||||
printf(" function_name %s\n", user_string($arg1));
|
||||
printf(" request_file %s\n", user_string($arg2));
|
||||
printf(" lineno %d\n", $arg3);
|
||||
printf(" classname %s\n", user_string($arg4));
|
||||
printf(" scope %s\n", user_string($arg5));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
|
||||
printf("Probe request__shutdown\n");
|
||||
printf(" file %s\n", user_string($arg1));
|
||||
printf(" request_uri %s\n", user_string($arg2));
|
||||
printf(" request_method %s\n", user_string($arg3));
|
||||
}
|
||||
probe process("sapi/cli/php").provider("php").mark("request__startup") {
|
||||
printf("Probe request__startup\n");
|
||||
printf(" file %s\n", user_string($arg1));
|
||||
printf(" request_uri %s\n", user_string($arg2));
|
||||
printf(" request_method %s\n", user_string($arg3));
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
O script acima irá instrumentar todos os pontos de sensores estáticos do núcleo do PHP
|
||||
durante toda a duração de um script PHP em execução:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
# stap -c 'sapi/cli/php test.php' all_probes.stp
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
690
features/gc.xml
Normal file
690
features/gc.xml
Normal file
@@ -0,0 +1,690 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 9957fc259b7b920269ead2a0180969db5bf13433 Maintainer: _ Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<chapter xml:id="features.gc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Garbage Collection</title>
|
||||
|
||||
<para>
|
||||
Esta seção explica os méritos do novo mecanismo do Coletor de Lixo (também conhecido
|
||||
como GC - Garbage Collector) que é parte do PHP 5.3.
|
||||
</para>
|
||||
|
||||
<sect1 xml:id="features.gc.refcounting-basics">
|
||||
<title>Básico sobre Contagem de Referência</title>
|
||||
<para>
|
||||
Uma variável PHP é armazenada em um contêiner chamado "zval". Um zval
|
||||
contém, além do tipo e do valor da variável, dois bits adicionais de
|
||||
informação. O primeiro é chamado de "is_ref" e é um valor booleano
|
||||
que indica se a variável é parte de um "conjunto de referência" ou não. Com
|
||||
este bit, o motor do PHP sabe como diferenciar entre variáveis normais
|
||||
e referências. Como o PHP permite referências no nível do usuário, como as criadas pelo
|
||||
operador & um contêiner zval também tem um mecanismo de contagem de referência
|
||||
interno para otimizar o uso de memória. Esta segunda parte de informação
|
||||
adicional, chamado "refcount", contém a quantidade de nomes de variáveis (também
|
||||
chamadas de símbolos) que apontam para este contêiner. Todos os símbolos são armazenados em
|
||||
uma tabela de símbolos, e existe uma por escopo. Existe um escopo para o
|
||||
script principal (ou seja, aquele requisitado através do navegador), assim como um escopo
|
||||
para cada função ou método.
|
||||
</para>
|
||||
<para>
|
||||
Um contêiner zval é criado quando uma nova variável é criada com um valor
|
||||
constante, como em:
|
||||
<example>
|
||||
<title>Criando um novo contêiner zval</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = "new string";
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Neste caso, o nome do símbolo, <literal>a</literal>, é criado no escopo atual,
|
||||
e um novo contêiner de variável é criado com o tipo <type>string</type> e o valor
|
||||
<literal>new string</literal>. O bit "is_ref" é por padrão definido para &false; porque nenhuma
|
||||
referência no nível do usuário foi criada. O "refcount" é definidois para <literal>1</literal> já
|
||||
que existe apenas um símbolo que faz uso deste contêiner de variável. Note
|
||||
que referências (isto é, "is_ref" igual a &true;) com "refcount" igual a <literal>1</literal>, são
|
||||
tratadas como se elas não fossem referências (como se "is_ref" fosse &false;). Se o <link
|
||||
xlink:href="&url.xdebug;">Xdebug</link> estiver instalado, esta informação pode ser
|
||||
mostrada chamando-se a função <function>xdebug_debug_zval</function>.
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Mostrando a informação zval</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = "new string";
|
||||
xdebug_debug_zval('a');
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=1, is_ref=0)='new string'
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Atribuindo esta variável a outro nome de variável irá aumentar o "refcount".
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Aumentando o "refcount" de um zval</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = "new string";
|
||||
$b = $a;
|
||||
xdebug_debug_zval( 'a' );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=2, is_ref=0)='new string'
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
O refcount é <literal>2</literal> aqui, porque o mesmo contêiner de variável está ligado
|
||||
tanto com <varname>a</varname> quanto com <varname>b</varname>.
|
||||
O PHP é inteligente o suficiente para não copiar o contêiner real da
|
||||
variável quando não for necessário. Contêineres são destruídos quando
|
||||
o "refcount" atinge zero. O "refcount" é diminuído em uma unidade quando qualquer
|
||||
símbolo ligado ao contêiner da variável deixa o escopo (ex.: quando a
|
||||
função termina) ou quanto um símbolo perde a atribuição (ex.: chamando <function>unset</function>).
|
||||
O exemplo a seguir mostra isso:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Diminuindo o "refcount" de zval</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = "new string";
|
||||
$c = $b = $a;
|
||||
xdebug_debug_zval( 'a' );
|
||||
$b = 42;
|
||||
xdebug_debug_zval( 'a' );
|
||||
unset( $c );
|
||||
xdebug_debug_zval( 'a' );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=3, is_ref=0)='new string'
|
||||
a: (refcount=2, is_ref=0)='new string'
|
||||
a: (refcount=1, is_ref=0)='new string'
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Se agora <literal>unset($a);</literal> for chamada, o contêiner da variável, incluindo o tipo
|
||||
e o valor, serão removidos da memória.
|
||||
</para>
|
||||
|
||||
<sect2 xml:id="features.gc.compound-types">
|
||||
<title>Tipos Compostos</title>
|
||||
|
||||
<para>
|
||||
As coisas ficam um pouco mais complexas com tipos compostos como <type>array</type>s e
|
||||
<type>objeto</type>s. Ao contrário dos valores <type>escalar</type>es, <type>array</type>s
|
||||
e <type>objeto</type>s armazenam suas
|
||||
propriedades em uma tabela de símbolos própria. Isto significa que o exemplo
|
||||
a seguir cria três contêineres zval:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Criando um zval de <type>array</type></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = array( 'meaning' => 'life', 'number' => 42 );
|
||||
xdebug_debug_zval( 'a' );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs.similar;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=1, is_ref=0)=array (
|
||||
'meaning' => (refcount=1, is_ref=0)='life',
|
||||
'number' => (refcount=1, is_ref=0)=42
|
||||
)
|
||||
]]>
|
||||
</screen>
|
||||
<para>Ou graficamenet</para>
|
||||
<mediaobject>
|
||||
<alt>Zvals para um array simples</alt>
|
||||
<imageobject>
|
||||
<imagedata fileref="en/features/figures/simple-array.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Os três contêineres zval são: <varname>a</varname>, <varname>meaning</varname>, e <varname>number</varname>.
|
||||
Regras similares se aplicam para aumento e redução de "refcounts". Abaixo, outro elemento é
|
||||
adicionado ao array, e define seu valor ao conteúdo de um elemento
|
||||
já existente:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Adicionando elemento já existente a um array</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = array( 'meaning' => 'life', 'number' => 42 );
|
||||
$a['life'] = $a['meaning'];
|
||||
xdebug_debug_zval( 'a' );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs.similar;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=1, is_ref=0)=array (
|
||||
'meaning' => (refcount=2, is_ref=0)='life',
|
||||
'number' => (refcount=1, is_ref=0)=42,
|
||||
'life' => (refcount=2, is_ref=0)='life'
|
||||
)
|
||||
]]>
|
||||
</screen>
|
||||
<para>Ou graficamente</para>
|
||||
<mediaobject>
|
||||
<alt>Zvals para um array simples com uma referência</alt>
|
||||
<imageobject>
|
||||
<imagedata fileref="en/features/figures/simple-array2.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Pela saída do Xdebug acima, pode-se perceber que tanto o elemento antigo do array
|
||||
quanto o novo agora apontam para um contêiner zval cujo "refcount" é
|
||||
<literal>2</literal>. Embora a saída do Xdebug mostre dois contêineres zval
|
||||
com valor <literal>'life'</literal>, eles são o mesmo. A função
|
||||
<function>xdebug_debug_zval</function> não mostra isso, mas
|
||||
pode-se ver isso mostrando o ponteiro de memória.
|
||||
</para>
|
||||
<para>
|
||||
Remover o elemento de um array é como remover um símbolo de um escopo.
|
||||
Fazendo isso, o "refcount" de um contêiner ao qual um elemento do array aponta
|
||||
é reduzido. Novamente, quando o "refcount" atinge zero, o contêiner da
|
||||
variável é removido da memória. Um exemplo para mostrar isto:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Removendo um elemento de um array</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = array( 'meaning' => 'life', 'number' => 42 );
|
||||
$a['life'] = $a['meaning'];
|
||||
unset( $a['meaning'], $a['number'] );
|
||||
xdebug_debug_zval( 'a' );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs.similar;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=1, is_ref=0)=array (
|
||||
'life' => (refcount=1, is_ref=0)='life'
|
||||
)
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Agora, as coisas ficam interessantes se o próprio array for adicionado como
|
||||
um elemento do array, o que é mostrado no exemplo a seguir, onde também um operador
|
||||
de referência foi inserido, senão o PHP criaria uma cópia:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Adicionando o próprio array como um elemento de si mesmo</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = array( 'one' );
|
||||
$a[] =& $a;
|
||||
xdebug_debug_zval( 'a' );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs.similar;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
a: (refcount=2, is_ref=1)=array (
|
||||
0 => (refcount=1, is_ref=0)='one',
|
||||
1 => (refcount=2, is_ref=1)=...
|
||||
)
|
||||
]]>
|
||||
</screen>
|
||||
<para>Ou graficamente</para>
|
||||
<mediaobject>
|
||||
<alt>Zvals para um array com referência circular</alt>
|
||||
<imageobject>
|
||||
<imagedata fileref="en/features/figures/loop-array.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Pode-se perceber que a variável do array (<varname>a</varname>) assim como o segundo elemento
|
||||
(<varname>1</varname>) agora apontam para um contêiner de veriável que tem um "refcount" de <literal>2</literal>.
|
||||
Os "..." no exemplo acima mostram que há recursão envolvida, e que,
|
||||
obviamente, neste caso significa que os "..." apontam de volta ao
|
||||
array original.
|
||||
</para>
|
||||
<para>
|
||||
Como antes, tirar a atribuição de uma variável remove o símbolo, e a
|
||||
contagem de referência do contêiner da variável à qual o símbolo aponta é reduzida em uma
|
||||
unidade. Então, se a variável <varname>$a</varname> perder a atribuição após execução do código acima,
|
||||
a contagem de referência do contêiner da variável à qual <varname>$a</varname> e o elemento "1" apontam
|
||||
será diminuída em uma unidade, de "2" para "1". Isto pode ser representado assim:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Removendo a atribuição de <varname>$a</varname></title>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
(refcount=1, is_ref=1)=array (
|
||||
0 => (refcount=1, is_ref=0)='one',
|
||||
1 => (refcount=1, is_ref=1)=...
|
||||
)
|
||||
]]>
|
||||
</screen>
|
||||
<para>Ou graficamente</para>
|
||||
<mediaobject>
|
||||
<alt>Zvals depois da remoção do array com um referência circular demonstrando o vazamento de memória</alt>
|
||||
<imageobject>
|
||||
<imagedata fileref="en/features/figures/leak-array.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</example>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.gc.cleanup-problems">
|
||||
<title>Problemas na Limpeza</title>
|
||||
<para>
|
||||
Embora não haja mais um símbolo em nenhum escopo apontando para esta
|
||||
estrutura, ela não pode ser limpa porque o elemento "1" do array ainda
|
||||
aponta para este mesmo array. Como não há símbolo externo apontando para
|
||||
ela, não há como um usuário limpar esta estrutura; e aí acontece o
|
||||
vazamento de memória. Felizmente, o PHP irá limpar esta estrutura de dados no final
|
||||
da requisição, mas até lá, ela irá ocupar um espaço valioso na
|
||||
memória. Esta situação ocorre frequentemente quando se está implementando algoritmos
|
||||
de interpretação ou outros onde existe um elemento "filho" apontando de volta para um
|
||||
elemento "pai". A mesma situação também pode com certeza ocorrer com objetos, onde
|
||||
na verdade existe mais probabilidade de ocorrer, já que objetos são sempre implicitamente
|
||||
usados por referência.
|
||||
</para>
|
||||
<para>
|
||||
Isso pode não ser um problema quanto acontecer somente uma ou duas vezes, mas se
|
||||
houver milhares, ou até milhões dessas perdas de memória, obviamente
|
||||
começa a ser um problema. É especialmente problemático em scripts de execução
|
||||
longa, como daemons onde a requisição basicamente nunca termina,
|
||||
ou em grande conjuntos de testes de unidades. Este último já causou problemas durante
|
||||
a execução de testes de unidades para o componente Template da bilioteca eZ
|
||||
Components. Em alguns casos, era necessário mais de 2GB de memória, que o servidor
|
||||
de testes não tinha.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="features.gc.collecting-cycles">
|
||||
<title>Ciclos de Coleta</title>
|
||||
<para>
|
||||
Tradicionalmente, mecanismos de memória de contagem de referência, como os
|
||||
usados anteriormente pelo PHP, falham ao lidar com vazamentos de memória de referência circular;
|
||||
entretanto, desde a versão 5.3.0, o PHP implementa o algoritmo síncrono do artigo
|
||||
<link xlink:href="&url.gc-paper;">Concurrent Cycle Collection in Reference Counted Systems</link>
|
||||
que lida com este problema.
|
||||
</para>
|
||||
<para>
|
||||
Uma explicação completa de como o algoritmo funciona estaria um pouco além do
|
||||
escopo desta seção, mas o básico é explicado aqui. Primeiramente,
|
||||
deve-se estabelecer algumas regras gerais. Se um "refcount" é incrementado, ele
|
||||
ainda está em uso e, portanto, não é lixo. Se o refcount é reduzido e
|
||||
alcança zero, o zval pode ser liberado. Isso significa que os ciclos de coleta
|
||||
somente podem ser criados quando um argumento "refcount" é reduzido para um valor diferente de zero.
|
||||
Adicionalmente, em um ciclo de coleta, é possível descobrir quais partes são lixo,
|
||||
verificando se é possível reduzir seus "refcounts" em uma unidade,
|
||||
e então observando quais dos zvals têm um "refcount" diferente de zero.
|
||||
</para>
|
||||
<para>
|
||||
<mediaobject>
|
||||
<alt>Algoritmo de coleta de lixo</alt>
|
||||
<imageobject>
|
||||
<imagedata fileref="en/features/figures/gc-algorithm.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</para>
|
||||
<para>
|
||||
Para evitar chamadas de verificação de ciclos de coleta com qualquer
|
||||
redução possível de um refcount, o algoritmo em vez disso coloca todas as
|
||||
raízes (zvals) possíveis no "buffer de raízes" (tornando-os "roxos"). Ele também
|
||||
certifica que cada raiz possível chegue ao buffer apenas uma vez. Apenas quando
|
||||
o buffer de raízes está cheio é que o mecanismo de coleta se inicia para todos
|
||||
os diferentes zvals contidos. Veja o passo A na figura acima.
|
||||
</para>
|
||||
<para>
|
||||
No passo B, o algoritmo executa uma pesquisa em profundidade em todas as raízes possíveis
|
||||
para reduzir em um os refcounts de cada zval que ele encontra, certificando-se de não
|
||||
reduzir um refcount no mesmo zval duas vezes (marcando-os de "cinza"). No
|
||||
passo C, o algoritmo novamente executa uma pesquisa em profundidade a partir de cada nó de raiz,
|
||||
para verificar o refcount de cada zval de novo. Se ele encontra o valor zero,
|
||||
o zval é marcado de "branco" (azul na figura). Se ele for maior que
|
||||
zero, ele reverte a redução do refcount em uma unidade com uma pesquisa em
|
||||
profundidade daquele ponto em diante, e eles são marcados de "preto" novamente. No último
|
||||
passo (D), o algoritmo percorre o buffer de raízes removendo as raízes de zval
|
||||
de lá e, ao mesmo tempo, verifica quais zvals foram marcados de "branco" no
|
||||
passo anterior. Cada zval marcado de "branco" será liberado da memória.
|
||||
</para>
|
||||
<para>
|
||||
Agora que há um entendimento básico de como o algoritmo funciona, vejamos
|
||||
como isto se integra com o PHP. Por padrão, o coletor de lixo do
|
||||
PHP fica habilitado. Existe, porém uma configuração
|
||||
do &php.ini; que permite mudar isso:
|
||||
<link linkend="ini.zend.enable-gc">zend.enable_gc</link>.
|
||||
</para>
|
||||
<para>
|
||||
Quando o coletor de lixo é habilitado, o algoritmo de pesquisa de ciclos como
|
||||
descrito acima é executado toda vez que o buffer ficar cheio. O buffer
|
||||
de raízes tem um tamanho fixo de 10.000 raízes possíveis (embora isso possa ser
|
||||
alterado mudando-se a constante <constant>GC_THRESHOLD_DEFAULT</constant> em
|
||||
<literal>Zend/zend_gc.c</literal> no código-fonte do PHP, e recompilando-o).
|
||||
Quando o coletor de lixo é desabilitado, o algoritmo de pesquisa
|
||||
de ciclos nunca será executado. Entretando, possíveis raízes serão sempre registradas
|
||||
no buffer de raízes, não importando se o mecanismo de coleta de lixo tenha
|
||||
sido ou não habilitado com esta configuração.
|
||||
</para>
|
||||
<para>
|
||||
Se o buffer de raízes ficar cheio de raízes possíveis enquanto o mecanismo de
|
||||
coleta de lixo está desabilitado, as possíveis raízes adicionais simplesmente
|
||||
não serão registradas. Essas raízes não registradas nunca serão
|
||||
analisadas pelo algoritmo. Se eles fossem parte de um ciclo de referência
|
||||
circular, eles nunca seriam limpados e iriam criar um vazamento de memória.
|
||||
</para>
|
||||
<para>
|
||||
O motivo pelo qual as raízes possíveis são registradas mesmo se o mecanismo
|
||||
for desabilitado é poque é mais rápido registrar raízes possíveis do que ter que
|
||||
verificar se o mecanismo está ligado toda vez que uma raiz possível puder
|
||||
ser encontrada. O próprio mecanismo de coleta e análise de lixo, no entanto,
|
||||
pode levar um tempo considerável.
|
||||
</para>
|
||||
<para>
|
||||
Além de mudar a configuração <link linkend="ini.zend.enable-gc">zend.enable_gc</link>,
|
||||
também é possível habilitar e desabilitar o mecanismo de coleta de lixo
|
||||
chamando-se <function>gc_enable</function> ou
|
||||
<function>gc_disable</function> respectivamente. Chamar estas funções tem
|
||||
o mesmo efeito de ligar ou desligar o mecanismo com a configuração.
|
||||
Também é possível forçar a coleta de ciclos mesmo se o
|
||||
buffer de raízes possíveis não estiver cheio. Para isto, pode-se usar
|
||||
a função <function>gc_collect_cycles</function>. Esta função retornará
|
||||
quantos ciclos foram coletados pelo algoritmo.
|
||||
</para>
|
||||
<para>
|
||||
A razão por trás da possibilidade do prório usuário ligar e desligar o mecanismo, e
|
||||
iniciar a coleta de ciclos, é que algumas partes de aplicações podem ser
|
||||
altamente sensíveis a tempo de execução. Nesses casos, pode não ser desejado que
|
||||
o mecanismo de coleta inicie. Obviamente, desligando-se o coletor
|
||||
de lixo para certas partes de uma aplicação cria o risco
|
||||
de gerar vazamentos de memória porque algumas raízes possíveis podem não
|
||||
caber no buffer limitado. Portanto, provavelmente é mais sábio chamar
|
||||
a função <function>gc_collect_cycles</function> logo antes de chamar
|
||||
a função <function>gc_disable</function> para liberar a memória que poderia ser perdida
|
||||
através de raízes possíveis que estariam já registradas no buffer. Isso
|
||||
então leva a um buffer vazio para que haja mais espaço para armazenar
|
||||
raízes possíveis enquanto o mecanismo de ciclos de coleta está desligado.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="features.gc.performance-considerations">
|
||||
<title>Considerações de Desempenho</title>
|
||||
<para>
|
||||
Já foi mencionado na seção anterior que simplesmente coletar as
|
||||
raízes possíveis tme um impacto muito pequeno em desempenho, mas isso quando
|
||||
compara-se o PHP 5.2 com o PHP 5.3. Embora o registro de raízes possíveis
|
||||
comparado ao não registro, como no PHP 5.2, seja mais lento, outras
|
||||
mudanção em tempo de execução no PHP 5.3 evitam que esta perda particular
|
||||
de desempenho apareça.
|
||||
</para>
|
||||
<para>
|
||||
Existem duas grandes áreas onde o desempenho é afetado. A primeira
|
||||
é o uso reduzido de memória, e a segunda é o atraso em tempo de execução
|
||||
quando o mecanismo de coleta de lixo faz suas limpezas de memória. Estes
|
||||
dois problemas serão mostrados a seguir.
|
||||
</para>
|
||||
|
||||
<sect2 xml:id="features.gc.performance-considerations.reduced-mem">
|
||||
<title>Uso Reduzido de Memória</title>
|
||||
<para>
|
||||
Primeiramente, o grande motivo pelo qual o mecanismo de coleta de lixo
|
||||
existe é para reduzir o uso de memória através de limpeza de variáveis
|
||||
em referência circular assim que os pré-requisitos são preenchidos. Na
|
||||
implementação do PHP, isso acontece assim que o buffer de raízes fica cheio, ou
|
||||
quando a função <function>gc_collect_cycles</function> é chamada. No
|
||||
gráfico abaixo, é mostrado o uso de memória do script a seguir,
|
||||
tanto no PHP 5.2 quanto no PHP 5.3, excluindo a memória básica que o próprio
|
||||
PHP usa quando se inicia.
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Exemplo de uso de memória</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
class Foo
|
||||
{
|
||||
public $var = '3.14159265359';
|
||||
public $self;
|
||||
}
|
||||
|
||||
$baseMemory = memory_get_usage();
|
||||
|
||||
for ( $i = 0; $i <= 100000; $i++ )
|
||||
{
|
||||
$a = new Foo;
|
||||
$a->self = $a;
|
||||
if ( $i % 500 === 0 )
|
||||
{
|
||||
echo sprintf( '%8d: ', $i ), memory_get_usage() - $baseMemory, "\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
<mediaobject>
|
||||
<alt>Comparação de uso de memória entre o PHP 5.2 e o PHP 5.3</alt>
|
||||
<imageobject>
|
||||
<imagedata fileref="en/features/figures/gc-benchmark.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Neste exemplo bem acadêmico, está sendo criado um objeto no qual
|
||||
uma propriedade é definida para apontar para o próprio objeto. Quando a variável <varname>$a</varname>
|
||||
no script é re-atribuída na iteração seguinte do loop, um vazamento de
|
||||
memória normalmente iria acontecer. Neste caso, dois contêineres são vazados
|
||||
(o zval objeto e o zval propriedade), mas apenas uma raiz possível é
|
||||
encontrada: a variável que perdeu a atribuição. Quando o buffer de raízes está cheio
|
||||
depois de 10.000 iterações (com um total de 10.000 raízes possíveis), o mecanismo
|
||||
de coleta de lixo entra e libera a memória associada com essas
|
||||
raízes possíveis. Isto pode ser visto claramente com o gráfico irregular
|
||||
de uso de memória para o PHP 5.3. Depois de 10.000 iterações, o mecanismo entre
|
||||
e libera a memória associada com as variáveis com referência circular..
|
||||
O mecanismo em si não tem muito trabalho neste exemplo,
|
||||
porque a estrutura que é vazada é extremamente simples. Pelo
|
||||
diagrama, pode-se verificar que o uso de memória no PHP 5.3 é de aproximadamente
|
||||
9Mb, enquanto que no PHP 5.2 o uso de memória continua crescendo.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.gc.performance-considerations.slowdowns">
|
||||
<title>Atraso em Tempo de Execução</title>
|
||||
<para>
|
||||
A segunda área onde o mecanismo de coleta de lixo influencia o
|
||||
desempenho é o tempo gasto quando o mecanismo entre
|
||||
para liberar a memória "vazada". Para verificar quanto é este tempo,
|
||||
o script anterior foi minimamente modificado para permitir um número maior de
|
||||
iterações e a remoção dos números de uso de memória intermediária. O
|
||||
segundo script está apresentado a seguir:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Influência do Coletor de Lixo no desempenho</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
class Foo
|
||||
{
|
||||
public $var = '3.14159265359';
|
||||
public $self;
|
||||
}
|
||||
|
||||
for ( $i = 0; $i <= 1000000; $i++ )
|
||||
{
|
||||
$a = new Foo;
|
||||
$a->self = $a;
|
||||
}
|
||||
|
||||
echo memory_get_peak_usage(), "\n";
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
O script será executado duas vezes, uma com a configuração
|
||||
<link linkend="ini.zend.enable-gc">zend.enable_gc</link> habilitada,
|
||||
e outra desabilitada:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Executando o script acima</title>
|
||||
<programlisting role="shell">
|
||||
<![CDATA[
|
||||
time php -dzend.enable_gc=0 -dmemory_limit=-1 -n example2.php
|
||||
# and
|
||||
time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Em uma máquina específica, o primeiro comando parece levar 10.7 segundos,
|
||||
enquanto que o segundo leva 11.4 seconds. Isto é um atraso de
|
||||
aproximadamente 7%. Entretanto, a quantidade máxima de memória usada pelo
|
||||
script é reduzida em 98%, de 931Mb para 10Mb. Esta referência não é muito
|
||||
científica, ou mesmo representativa para aplicações do mundo real, mas
|
||||
demonstra os benefícios de uso de memória que este mecanismo de coleta
|
||||
de lixo fornece. A boa notícia é que este atraso é sempre de
|
||||
7% para este script particular, enquando que as capacidades de
|
||||
redução de memória economizam mais e mais memória quando referências
|
||||
circulares adicionais são encontradas durante a execução do script.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.gc.performance-considerations.internal-stats">
|
||||
<title>Estatísticas de GC Internas do PHP</title>
|
||||
<para>
|
||||
É possível obter um pouco mais de informação sobre como o
|
||||
o mecanismo de coleta de lixo é executado no PHP. Mas para fazer isto,
|
||||
deve-se recompilar o PHP para habilitar o benchmark e o
|
||||
código de coleta de dados. Deve-se definir a variável de ambiente
|
||||
<literal>CFLAGS</literal> para <literal>-DGC_BENCH=1</literal> antes de executar
|
||||
<literal>./configure</literal> com as opções desejadas. A sequencia a
|
||||
seguir deve fazer este truque:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Recompilando o PHP para habilitar o benchmarking de GC</title>
|
||||
<programlisting role="shell">
|
||||
<![CDATA[
|
||||
export CFLAGS=-DGC_BENCH=1
|
||||
./config.nice
|
||||
make clean
|
||||
make
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Quando o exemplo acima for executado novamente com o novo
|
||||
binário do PHP, o resultado abaixo será visualizado assim que o
|
||||
PHP terminar a execução:
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Estatísticas GC</title>
|
||||
<programlisting role="shell">
|
||||
<![CDATA[
|
||||
GC Statistics
|
||||
-------------
|
||||
Runs: 110
|
||||
Collected: 2072204
|
||||
Root buffer length: 0
|
||||
Root buffer peak: 10000
|
||||
|
||||
Possible Remove from Marked
|
||||
Root Buffered buffer grey
|
||||
-------- -------- ----------- ------
|
||||
ZVAL 7175487 1491291 1241690 3611871
|
||||
ZOBJ 28506264 1527980 677581 1025731
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
As estatísticas mais informativas são mostradas no primeiro bloco. Pode-se
|
||||
ver que aqui que o mecanismo de coleta de lixo foi executado 110 vezes, e no
|
||||
total, mais de 2 milhões de alocações de memória foram liberadas durante estas
|
||||
110 execuções. Assim que o mecanismo tenha sido executado pelo menos
|
||||
uma vez, o "Root buffer peak" (pico do buffer de raízes) será sempre 10.000.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="features.gc.performance-considerations.conclusion">
|
||||
<title>Conclusãon</title>
|
||||
<para>
|
||||
Em geral o coletor de lixo no PHP irá causar um atraso apenas quando
|
||||
o algoritmo de coleta realmente for executado, enquanto que em scripts normais
|
||||
(menores), não deve haver nenhum prejuízo no desempenho.
|
||||
</para>
|
||||
<para>
|
||||
Entretanto, em casos onde o mecanismo de coleta é executado em
|
||||
scripts normais, a redução de memória que ele vai proporcionar irá permitir
|
||||
que mais desses scripts possam ser executados ao mesmo tempo no servidor, já que
|
||||
a quantidade de memória usada no total não será muito grande.
|
||||
</para>
|
||||
<para>
|
||||
Os benefícios são mais aparentes para scripts de longa execução, como os
|
||||
scripts de conjunto de testes ou daemons. Adicionalmente, para aplicações <link xlink:href="&url.php.gtk;">PHP-GTK</link>
|
||||
que geralmente tendem a rodar por mais tempo que scripts para a Web, o novo
|
||||
mecanismo deve fazer uma diferença considerável em relação a vazamentos
|
||||
de memória que insistem em acontecer.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
209
install/windows/commandline.xml
Normal file
209
install/windows/commandline.xml
Normal file
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 8e732e84a1425cf0ab3a5b0da8fe113c7a6da85e Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<sect1 xml:id="install.windows.commandline" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>PHP em Linha de Comando no Microsoft Windows</title>
|
||||
<para>
|
||||
Esta seção contém notas e dicas específicas para que o PHP
|
||||
seja executado da linha de comando do Windows.
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
Deve-se ler os passos do <link linkend="install.windows.manual">manual
|
||||
de instalação</link> primeiro!
|
||||
</para>
|
||||
</note>
|
||||
<para>
|
||||
Configurar o PHP para ser executado da linha de comando pode ser feito sem
|
||||
nenhuma mudança no Windows.
|
||||
<screen>
|
||||
<![CDATA[
|
||||
C:\php\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3
|
||||
]]>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Porém há alguns passos fáceis que podem ser seguidos para tornar o processo mais simples.
|
||||
Alguns desses passos podem já ter sido executados, mas estão repetidos aqui
|
||||
para fornecer uma sequência completa, passo a passo.
|
||||
|
||||
<itemizedlist>
|
||||
<note>
|
||||
<para>
|
||||
<envar>PATH</envar> e <envar>PATHEXT</envar> são importantes variáveis
|
||||
de sistemas pré-existentes no Windows,
|
||||
e deve-se tomar cuidado para não sobrescrever nenhuma das duas,
|
||||
apenas concatenar valores.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Concatene a localização do executável do PHP (<filename>php.exe</filename>,
|
||||
<filename>php-win.exe</filename> ou <filename>php-cli.exe</filename>
|
||||
dependendo da versão do PHP e preferências de visualização) à variável
|
||||
de ambiente <envar>PATH</envar>. Leia mais sobre como adicionar
|
||||
a pasta do PHP à variável <envar>PATH</envar> na <link
|
||||
linkend="faq.installation.addtopath">entrada FAQ correspondente</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Adicione a extensão <literal>.PHP</literal> à variável de
|
||||
ambiente <varname>PATHEXT</varname>. Isto pode ser feito
|
||||
ao mesmo tempo que se adiciona à variável <envar>PATH</envar>.
|
||||
Siga os mesmos passos descritos no <link
|
||||
linkend="faq.installation.addtopath">FAQ</link> mas adicione à variável
|
||||
<varname>PATHEXT</varname> no lugar da variável
|
||||
<envar>PATH</envar>.
|
||||
<note>
|
||||
<para>
|
||||
A posição em que você inserir a extensão <literal>.PHP</literal> irá
|
||||
determinar qual script ou programa será executado quando o nome do arquivo
|
||||
for especificado. Por exemplo, inserir <literal>.PHP</literal> antes de
|
||||
<literal>.BAT</literal> irá fazer com que seu script seja executado, em vez
|
||||
do arquivo de lote, se existir um arquivo de lote com o mesmo nome.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Associe a extensão <literal>.PHP</literal> com o tipo de arquivo. Isto
|
||||
pode ser feito executando o seguinte comando:
|
||||
<screen>
|
||||
<![CDATA[
|
||||
assoc .php=phpfile
|
||||
]]>
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Associe o tipo de arquivo <literal>phpfile</literal> com o executável PHP
|
||||
apropriado. Isto pode ser feito executando o seguinte comando:
|
||||
<screen>
|
||||
<![CDATA[
|
||||
ftype phpfile="C:\php\php.exe" -f "%1" -- %~2
|
||||
]]>
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Seguir estes passos irá permitir que os scripts PHP sejam executados de qualquer pasta
|
||||
sem a necessidade de digitar o executável PHP ou a extensão
|
||||
<literal>.PHP</literal> e todos os parâmetros serão fornecidos ao script para processamento.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
O exemplo abaixo detalha algumas das alterações de registro que podem ser realizadas manualmente.
|
||||
<example>
|
||||
<title>Alterações de Registro</title>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Windows Registry Editor Version 5.00
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
|
||||
@="phpfile"
|
||||
"Content Type"="application/php"
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
|
||||
@="PHP Script"
|
||||
"EditFlags"=dword:00000000
|
||||
"BrowserFlags"=dword:00000008
|
||||
"AlwaysShowExt"=""
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
|
||||
@="C:\\php\\php-win.exe,0"
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
|
||||
@="Open"
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
|
||||
@="&Open"
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
|
||||
@="\"C:\\php\\php.exe\" -f \"%1\" -- %~2"
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Com estas alterações o mesmo comando pode ser escrito como:
|
||||
<screen>
|
||||
<![CDATA[
|
||||
"C:\PHP Scripts\script" -arg1 -arg2 -arg3
|
||||
]]>
|
||||
</screen>
|
||||
ou, se o caminho <literal>"C:\PHP Scripts"</literal> estiver na
|
||||
variável de ambiente <envar>PATH</envar>:
|
||||
<screen>
|
||||
<![CDATA[
|
||||
script -arg1 -arg2 -arg3
|
||||
]]>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
Existe um pequeno problema se a intenção for usar esta técnica e usar
|
||||
os scripts PHP como um filtro de linha de comando, como o exemplo abaixo:
|
||||
<screen>
|
||||
<![CDATA[
|
||||
dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
|
||||
]]>
|
||||
</screen>
|
||||
ou
|
||||
<screen>
|
||||
<![CDATA[
|
||||
dir | script -arg1 -arg2 -arg3
|
||||
]]>
|
||||
</screen>
|
||||
Neste caso, o script poderá simplesmente travar e não produzir nenhuma saída.
|
||||
Para tornar esta opção operacional, deve-se fazer uma outra alteração no registro.
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Windows Registry Editor Version 5.00
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
|
||||
"InheritConsoleHandles"=dword:00000001
|
||||
]]>
|
||||
</screen>
|
||||
Mais informações sobre este problema pode ser encontrado neste artigo <link
|
||||
xlink:href="http://support.microsoft.com/default.aspx?scid=kb;en-us;321788">Microsoft
|
||||
Knowledgebase Article : 321788</link>.
|
||||
A partir do Windows 10, esta configuração foi invertida, fazendo com que a instalação padrão do
|
||||
Windows 10 suporte automaticamente esta opção. Esta postagem do <link
|
||||
xlink:href="https://social.msdn.microsoft.com/Forums/en-US/f19d740d-21c8-4dc2-a9ab-d5c0527e932b/nasty-file-association-regression-bug-in-windows-10-console?forum=windowssdk">
|
||||
Microsoft Forum</link> fornece a explicação.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
103
install/windows/manual.xml
Normal file
103
install/windows/manual.xml
Normal file
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 8e732e84a1425cf0ab3a5b0da8fe113c7a6da85e Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<sect1 xml:id="install.windows.manual" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Instalação Manual do PHP no Windows</title>
|
||||
<sect2>
|
||||
<title>Escolhendo o Servidor Web</title>
|
||||
<sect3>
|
||||
<title>IIS</title>
|
||||
<para>
|
||||
O servidor IIS já vem embutido na instalação do Windows.
|
||||
No Windows Server, o papel do IIS pode ser adicionado pelo Gerenciados do Servidor. O recurso CGI Role precisa ser incluído.
|
||||
No Windows Desktop, o IIS precisa ser instalado pelo Painel de Controle, na opção Adicionar/Remover Programas.
|
||||
A documentação da Microsoft tem <link xlink:href="https://docs.microsoft.com/en-us/previous-versions/ms181052(v=vs.80)">instruções detalhadas</link>.
|
||||
No caso de aplicações web para computadores e desenvolvimento web, o IIS/Express ou PHP Desktop também podem ser usados.
|
||||
<example>
|
||||
<title>Linha de comando para configurar IIS e PHP</title>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
|
||||
@echo off
|
||||
|
||||
REM Baixe o arquivo .ZIP da versão do PHP no link http://windows.php.net/downloads/
|
||||
|
||||
REM Caminho para a pasta onde deve-se descompactar o arquivo .ZIP do PHP (sem \ no final)
|
||||
set phppath=c:\php
|
||||
|
||||
|
||||
REM Limpe os manipuladores atuais do PHP
|
||||
%windir%\system32\inetsrv\appcmd clear config /section:system.webServer/fastCGI
|
||||
REM O comando a seguir irá gerar uma mensagem de erro se o PHP não estiver instalado. Isto pode ser ignorado.
|
||||
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /-[name='PHP_via_FastCGI']
|
||||
|
||||
REM Defina os manipuladores do PHP
|
||||
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='%phppath%\php-cgi.exe']
|
||||
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='%phppath%\php-cgi.exe',resourceType='Unspecified']
|
||||
%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /accessPolicy:Read,Script
|
||||
|
||||
REM Configure as variáveis FastCGI
|
||||
%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='%phppath%\php-cgi.exe'].instanceMaxRequests:10000
|
||||
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%phppath%\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']"
|
||||
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%phppath%\php-cgi.exe'].environmentVariables.[name='PHPRC',value='%phppath%\php.ini']"
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>Apache</title>
|
||||
<para>
|
||||
Existem várias compilações de Apache2 para Windows.
|
||||
As compilações do ApacheLounge são recomendadas, mas há outras opções incluindo XAMPP, WampServer e BitNami, que fornecem ferramentas de instalação automática.
|
||||
PHP pode ser usado no Apache através do mod_php ou do mod_fastcgi.
|
||||
mod_php requer uma compilação TS (thread safe) do Apache, com a mesma versão de Visual C e para a mesma CPU (x86 ou x64).
|
||||
</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Escolha a Compilação</title>
|
||||
<para>
|
||||
Compilações para o Windows podem ser baixadas de <link xlink:href="http://windows.php.net/download/">http://windows.php.net/download/</link>.
|
||||
Todas as compilações são otimizadas (<abbrev>PGO</abbrev>), e as versões QA e GA são extensivamente testadas.
|
||||
</para>
|
||||
<para>
|
||||
Existem 4 tipos de compilação do PHP:
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>Thread-Safe(TS) - para servidores web de processo único, como Apache com mod_php.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Non-Thread-Safe(NTS) - para IIS e outros servidores web FastCGI (Apache com mod_fastcgi) e recomendado para scripts de linha de comando.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>x86 - para sistemas de 32-bits.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>x64 - para sistemas de 64-bits.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
111
install/windows/recommended.xml
Normal file
111
install/windows/recommended.xml
Normal file
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 8e732e84a1425cf0ab3a5b0da8fe113c7a6da85e Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<sect1 xml:id="install.windows.recommended" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Configuração Recomendada em sistemas Windows</title>
|
||||
<sect2>
|
||||
<title>OpCache</title>
|
||||
<para>
|
||||
É altamente recomendado habilitar o OpCache.
|
||||
Esta extensão é incluída no PHP para Windows.
|
||||
Ela compila e otimiza os scripts PHP e os mantém na memória cache para
|
||||
que não sejam compilados toda vez que uma página é carregada.
|
||||
</para>
|
||||
<para>
|
||||
Configure o &php.ini;:
|
||||
<example>
|
||||
<title>Configuração recomendada do OpCache</title>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
opcache.enable=On
|
||||
opcache.enable_cli=On
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
Reinicie o servidor web.
|
||||
|
||||
Para mais informação, consulte: <link linkend="opcache.configuration">Configuração OpCache</link>
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>WinCache</title>
|
||||
<para>
|
||||
Recomenda-se usar o WinCache se o IIS for usado, especialmente em um ambiente
|
||||
de hospedagem web compartilhado ou em armazenamento de arquivos de rede (NAS).
|
||||
Note que o WinCache não é mais suportado a partir do PHP 8.0.0.
|
||||
|
||||
Todas as aplicações PHP se beneficiam automaticamente do recurso de cache de arquivo do WinCache. Operações do sistema de arquivos são armazenadas em cache.
|
||||
|
||||
WinCache também armazena em cache objetos de usuário e compartilha-os entre os processos <varname>php.exe</varname> ou <varname>php-cgi.exe</varname> (compartilha objetos entre requisições).
|
||||
|
||||
Muitas das grandes aplicações web têm um plugin ou extensão ou opção de configuração para uso do WinCache para cache de objetos de usuário.
|
||||
|
||||
Se um alto desempenho é requerido, deve-se usar cache de objetos na aplicação.
|
||||
|
||||
Consulte: <link xlink:href="http://pecl.php.net/package/WinCache">http://pecl.php.net/package/WinCache</link> para baixar uma DLL WinCache (or tgz) para a pasta de extensões PHP (extensions_dir no php.ini).
|
||||
|
||||
Configure o &php.ini;:
|
||||
<example>
|
||||
<title>Configuração WinCache recomendada</title>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
extension=php_wincache.dll
|
||||
wincache.fcenabled=1
|
||||
wincache.ocenabled=1 ; removida a partir do wincache 2.0.0.0
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
Para mais informação, consulte:
|
||||
<link linkend="wincache.configuration">Configuração WinCache</link>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Configuração IIS</title>
|
||||
|
||||
<para>
|
||||
No Gerenciador IIS, instale o módulo FastCGI e adicione um manipulador para mapear a
|
||||
extensão <varname>`.php`</varname> para o caminho do <varname>PHP-CGI.exe</varname>
|
||||
(não para o <varname>PHP.exe</varname>)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Pode ser usado o Prompt de Comando para configurar o IIS via script.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Banco de Dados</title>
|
||||
<para>
|
||||
Provavelmente será necessário um Servidor de Banco de Dados.
|
||||
Bancos de dados populares fornecem extensões PHP para que possam ser utilizados.
|
||||
Se o site não tiver um tráfego muito alto,
|
||||
o servidor de banco de dados pode ser executado no mesmo servidor web.
|
||||
Muitos bancos de dados populares podem são compatíveis com o Windows.
|
||||
</para>
|
||||
|
||||
<para>O PHP inclui as extensões mysqli e pdo_mysql.</para>
|
||||
<para>
|
||||
Consulte <link xlink:href="https://dev.mysql.com/downloads/windows/">https://dev.mysql.com/downloads/windows/</link>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
38
install/windows/tools.xml
Normal file
38
install/windows/tools.xml
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: c55dde8f549a2f939adfd924fe6e6d242c7754d3 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<sect1 xml:id="install.windows.tools" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Ferramentas de instalação do PHP no Windows</title>
|
||||
<sect2>
|
||||
<title>Ferramentas de instalação do PHP</title>
|
||||
<para>
|
||||
<link xlink:href="https://www.apachefriends.org/index.html">XAMPP</link>,
|
||||
WampServer e BitNami irão configurar as aplicações PHP para utilização com Apache no Windows.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Preparar e configurar o Nginx no Windows requer um pouco mais de configuração.
|
||||
Consulte a <link xlink:href="https://www.nginx.com/resources/wiki/start/topics/examples/phpfastcgionwindows/">documentação Nginx</link>
|
||||
para apoio adicional.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
42
install/windows/troubleshooting.xml
Normal file
42
install/windows/troubleshooting.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 53afbdaf791ddbc4455672122573644f3f0d7949 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<sect1 xml:id="install.windows.troubleshooting" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Solução de Problemas do PHP no Windows</title>
|
||||
<sect2>
|
||||
<title>Verifique as Permissões da Pasta Temporária</title>
|
||||
|
||||
<procedure>
|
||||
<step>
|
||||
<para>
|
||||
Clique com o botão direito na pasta de arquivos temporários no Explorador de Arquivos para obter as permissões.
|
||||
</para>
|
||||
</step>
|
||||
<step>
|
||||
<para>
|
||||
Para o IIS, verifique que o usuário IIS_User tem a permissão de MODIFICAÇÃO.
|
||||
Pode-se obter o caminho da pasta de arquivos temporários no arquivos de configuração ou na função php_info.
|
||||
</para>
|
||||
</step>
|
||||
</procedure>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 5a14f904d231d294e2e5b4fb5d2fc4d2fd9eddee Maintainer: adiel Status: ready --><!-- CREDITS: adiel, ae, atomotavio, fabioluciano, felipe, klaussilveira, rafaelbernard -->
|
||||
<!-- EN-Revision: ca426e50716c122e6fed8009369792e98d7c57b8 Maintainer: adiel Status: ready --><!-- CREDITS: adiel, ae, atomotavio, fabioluciano, felipe, klaussilveira, rafaelbernard, leonardolara -->
|
||||
|
||||
<!ENTITY installation.enabled.disable 'Esta extensão está habilitada por padrão. Ela pode ser desabilitada usando a seguinte opção em tempo de compilação: '>
|
||||
|
||||
@@ -2383,13 +2383,19 @@ relativos</simpara></warning>
|
||||
</row>
|
||||
'>
|
||||
<!ENTITY mongodb.option.encryption.kmsProviders '
|
||||
<row xmlns="http://docbook.org/ns/docbook">
|
||||
<row xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<entry>kmsProviders</entry>
|
||||
<entry><type>array</type></entry>
|
||||
<entry>
|
||||
<para>
|
||||
Um documento contendo a configuração de um ou mais provedores KMS, que são usados para criptografar chaves de dados. Os provedores compatíveis incluem <literal>"aws"</literal>, <literal>"azure"</literal>, <literal>"gcp"</literal>, <literal>"kmip"</literal> e <literal>"local"</literal> e pelo menos um deve ser especificado.
|
||||
</para>
|
||||
<para>
|
||||
Se um documento vazio for especificado para <literal>"aws"</literal>,
|
||||
<literal>"azure"</literal>, ou <literal>"gcp"</literal>, o driver
|
||||
tentará configurar o provedor usando
|
||||
<link xlink:href="&url.mongodb.specs;/blob/master/source/client-side-encryption/client-side-encryption.rst#automatic-credentials">Credenciais Automáticas</link>.
|
||||
</para>
|
||||
<para>
|
||||
O formato para <literal>"aws"</literal> é o seguinte:
|
||||
</para>
|
||||
|
||||
106
language/context/zip.xml
Normal file
106
language/context/zip.xml
Normal file
@@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: ec6e871a47fa15228aa3299f46fed826422adbc0 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
|
||||
<refentry xml:id="context.zip" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" annotations="verify_info:false">
|
||||
<refnamediv>
|
||||
<refname>Opções de contexto para Zip</refname>
|
||||
<refpurpose>Listagem de opções de contexto para Zip</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description"><!-- {{{ -->
|
||||
&reftitle.description;
|
||||
<para>
|
||||
Opções de contexto para Zip estão disponíveis para encapsuladores <literal>zip</literal>.
|
||||
</para>
|
||||
</refsect1><!-- }}} -->
|
||||
|
||||
<refsect1 role="options"><!-- {{{ -->
|
||||
&reftitle.options;
|
||||
<para>
|
||||
<variablelist>
|
||||
<varlistentry xml:id="context.zip.password">
|
||||
<term><parameter>password</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Utilizado para especificar a senha definida para o arquivo criptografado.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</refsect1><!-- }}} -->
|
||||
|
||||
<refsect1 role="changelog"><!-- {{{ -->
|
||||
&reftitle.changelog;
|
||||
<para>
|
||||
<informaltable>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>&Version;</entry>
|
||||
<entry>&Description;</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>PHP 7.2.0, PECL zip 1.14.0</entry>
|
||||
<entry>
|
||||
Incluído o parâmetro <parameter>password</parameter>.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</refsect1><!-- }}} -->
|
||||
|
||||
<refsect1 role="examples"><!-- {{{ -->
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example xml:id="context.zip.example-password"><!-- {{{ -->
|
||||
<title>Exemplo básico de uso de <parameter>password</parameter></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
// Ler o arquivo criptografado
|
||||
$opts = array(
|
||||
'zip' => array(
|
||||
'password' => 'secret',
|
||||
),
|
||||
);
|
||||
// criar o contexto...
|
||||
$context = stream_context_create($opts);
|
||||
|
||||
// ...e usá-lo para obter os dados
|
||||
echo file_get_contents('zip://test.zip#test.txt', false, $context);
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example><!-- }}} -->
|
||||
</para>
|
||||
</refsect1><!-- }}} -->
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
|
||||
78
language/context/zlib.xml
Normal file
78
language/context/zlib.xml
Normal file
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: ec6e871a47fa15228aa3299f46fed826422adbc0 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
|
||||
<refentry xml:id="context.zlib" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" annotations="verify_info:false">
|
||||
<refnamediv>
|
||||
<refname>Opções de contexto Zlib</refname>
|
||||
<refpurpose>Listagem de opções de contexto Zlib</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<para>
|
||||
Opções de contexto Zlib estão disponíveis para encapsuladores <literal>zlib</literal>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="options">
|
||||
&reftitle.options;
|
||||
<para>
|
||||
<variablelist>
|
||||
<varlistentry xml:id="context.zlib.level">
|
||||
<term><parameter>level</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Usado para especificar o nível de compressão (<literal>0</literal> - <literal>9</literal>).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="changelog">
|
||||
&reftitle.changelog;
|
||||
<para>
|
||||
<informaltable>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>&Version;</entry>
|
||||
<entry>&Description;</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>7.3.0</entry>
|
||||
<entry>
|
||||
O parâmetro <parameter>level</parameter> foi incluído.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: f0fe52e5a693be46f0c81012b15b929ad264228e Maintainer: fabioluciano Status: ready --><!-- CREDITS: fabioluciano -->
|
||||
<!-- EN-Revision: 7a75b854c8c52226d38397e7e8177e339fdb273f Maintainer: fabioluciano Status: ready --><!-- CREDITS: fabioluciano, leonardolara -->
|
||||
<chapter xml:id="language.errors" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Erros</title>
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<title>Introdução</title>
|
||||
|
||||
<para>
|
||||
Infelizmente, não importa quão cuidosos somos escrevendo nossos códigos, erros são
|
||||
Infelizmente, não importa quão cuidadosos somos escrevendo nossos códigos, erros são
|
||||
fatos da vida. O PHP reportará erros, advertências e avisos para muitos
|
||||
problemas comuns de codificação e problemas em tempo de execução, e saber como detectar e manusear estes
|
||||
problemas comuns de codificação e problemas em tempo de execução, e saber como detectar e lidar com estes
|
||||
erros farão o processo de depuração muito mais fácil.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 6e69d9342ef5b124a62c8a255cb0d9a091d07b5e Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel -->
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 14767af0f05dffa6fdb9b49e1a1f4e9ca7022a60 Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel, leonardolara -->
|
||||
<phpdoc:classref xml:id="class.allowdynamicproperties" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe AllowDynamicProperties</title>
|
||||
<titleabbrev>AllowDynamicProperties</titleabbrev>
|
||||
@@ -16,18 +16,12 @@
|
||||
<section xml:id="allowdynamicproperties.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<classsynopsis>
|
||||
<classsynopsis class="class">
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>AllowDynamicProperties</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo>
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>AllowDynamicProperties</classname>
|
||||
</ooclass>
|
||||
</classsynopsisinfo>
|
||||
|
||||
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.allowdynamicproperties')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='AllowDynamicProperties'])">
|
||||
<xi:fallback/>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: ee1ebe8df676914b22b5e39e53b34db65e240c89 Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel -->
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 14767af0f05dffa6fdb9b49e1a1f4e9ca7022a60 Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel, leonardolara -->
|
||||
<phpdoc:classref xml:id="class.attribute" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe Attribute</title>
|
||||
<titleabbrev>Attribute</titleabbrev>
|
||||
@@ -21,18 +21,12 @@
|
||||
<section xml:id="attribute.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<classsynopsis>
|
||||
<classsynopsis class="class">
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>Attribute</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo>
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>Attribute</classname>
|
||||
</ooclass>
|
||||
</classsynopsisinfo>
|
||||
|
||||
<classsynopsisinfo role="comment">&Constants;</classsynopsisinfo>
|
||||
<fieldsynopsis>
|
||||
<modifier>const</modifier>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 6e69d9342ef5b124a62c8a255cb0d9a091d07b5e Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel -->
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 14767af0f05dffa6fdb9b49e1a1f4e9ca7022a60 Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel, leonardolara -->
|
||||
<phpdoc:classref xml:id="class.returntypewillchange" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe ReturnTypeWillChange</title>
|
||||
<titleabbrev>ReturnTypeWillChange</titleabbrev>
|
||||
@@ -21,18 +21,12 @@
|
||||
<section xml:id="returntypewillchange.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<classsynopsis>
|
||||
<classsynopsis class="class">
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>ReturnTypeWillChange</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo>
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>ReturnTypeWillChange</classname>
|
||||
</ooclass>
|
||||
</classsynopsisinfo>
|
||||
|
||||
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.returntypewillchange')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='ReturnTypeWillChange'])">
|
||||
<xi:fallback/>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 49e193c69bb79503cf9efeb5f25be7f371051ef5 Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel -->
|
||||
<?xml version="1.0" encoding="utf-8"?> <!-- EN-Revision: 14767af0f05dffa6fdb9b49e1a1f4e9ca7022a60 Maintainer: adaiasmagdiel Status: ready --><!-- CREDITS: adaiasmagdiel, leonardolara -->
|
||||
<phpdoc:classref xml:id="class.sensitiveparameter" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe SensitiveParameter</title>
|
||||
<titleabbrev>SensitiveParameter</titleabbrev>
|
||||
@@ -17,18 +17,12 @@
|
||||
<section xml:id="sensitiveparameter.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<classsynopsis>
|
||||
<classsynopsis class="class">
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>SensitiveParameter</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo>
|
||||
<ooclass>
|
||||
<modifier>final</modifier>
|
||||
<classname>SensitiveParameter</classname>
|
||||
</ooclass>
|
||||
</classsynopsisinfo>
|
||||
|
||||
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.sensitiveparameter')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='SensitiveParameter'])">
|
||||
<xi:fallback/>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: cb0630b14901459c0bf1556e7d68f1b4c0d3796e Maintainer: fabioluciano Status: ready --><!-- CREDITS: felipe, fabioluciano -->
|
||||
<!-- EN-Revision: a6d209f4ff71ccba3f1255902827f5df3e092ff9 Maintainer: fabioluciano Status: ready --><!-- CREDITS: felipe, fabioluciano, leonardolara -->
|
||||
|
||||
<refentry role="variable" xml:id="reserved.variables.httpresponseheader" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>$http_response_header</refname>
|
||||
@@ -28,10 +29,10 @@
|
||||
<?php
|
||||
function get_contents() {
|
||||
file_get_contents("http://example.com");
|
||||
var_dump($http_response_header);
|
||||
var_dump($http_response_header); // variable is populated in the local scope
|
||||
}
|
||||
get_contents();
|
||||
var_dump($http_response_header);
|
||||
var_dump($http_response_header); // a call to get_contents() does not populate the variable outside the function scope
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
@@ -58,6 +59,8 @@ array(9) {
|
||||
[8]=>
|
||||
string(38) "Content-Type: text/html; charset=UTF-8"
|
||||
}
|
||||
|
||||
Warning: Undefined variable $http_response_header
|
||||
NULL
|
||||
]]>
|
||||
</screen>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: fd6629b1acf5a4b21d3e1ed3f4f33057b4fb3178 Maintainer: felipe Status: ready --><!-- CREDITS: adiel,felipe,ABDALAZARD -->
|
||||
<!-- EN-Revision: a6d209f4ff71ccba3f1255902827f5df3e092ff9 Maintainer: felipe Status: ready --><!-- CREDITS: adiel,felipe,ABDALAZARD,leonardolara -->
|
||||
|
||||
<refentry role="variable" xml:id="language.variables.superglobals" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" annotations="verify_info:false">
|
||||
<refnamediv>
|
||||
|
||||
84
reference/datetime/dateerror.xml
Normal file
84
reference/datetime/dateerror.xml
Normal file
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.dateerror" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateError</title>
|
||||
<titleabbrev>DateError</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateError intro -->
|
||||
<section xml:id="dateerror.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada quando o banco de dados de fuso horário não for encontrado ou contiver dados inválidos.
|
||||
</para>
|
||||
<para>
|
||||
Este erro nunca deveria ocorrer, e não é dependente do código. Existem duas
|
||||
exceções-filhas (<exceptionname>DateObjectError</exceptionname> e
|
||||
<exceptionname>DateRangeError</exceptionname>) que são disparadas dependendo
|
||||
do erro do programados ou de problemas relacionados a faixas de datas.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="dateerror.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateError</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>Error</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Error'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Error'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
<section role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><exceptionname>DateObjectError</exceptionname></member>
|
||||
<member><exceptionname>DateRangeError</exceptionname></member>
|
||||
</simplelist>
|
||||
</section>
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
82
reference/datetime/dateexception.xml
Normal file
82
reference/datetime/dateexception.xml
Normal file
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.dateexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateException</title>
|
||||
<titleabbrev>DateException</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateException intro -->
|
||||
<section xml:id="dateexception.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Classe pai das exceções de Data/Hora, para problemas que surgem devido a
|
||||
entradas do usuário ou argumentos texto em formato livre que precisam ser analisados.
|
||||
</para>
|
||||
<para>
|
||||
As exceções-filhas a seguir são disparadas pela extensão:
|
||||
<itemizedlist>
|
||||
<listitem><simpara><exceptionname>DateInvalidOperationException</exceptionname></simpara></listitem>
|
||||
<listitem><simpara><exceptionname>DateInvalidTimezoneException</exceptionname></simpara></listitem>
|
||||
<listitem><simpara><exceptionname>DateMalformedIntervalStringException</exceptionname></simpara></listitem>
|
||||
<listitem><simpara><exceptionname>DateMalformedPeriodStringException</exceptionname></simpara></listitem>
|
||||
<listitem><simpara><exceptionname>DateMalformedStringException</exceptionname></simpara></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="dateexception.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateException</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>Exception</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
79
reference/datetime/dateinvalidoperationexception.xml
Normal file
79
reference/datetime/dateinvalidoperationexception.xml
Normal file
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.dateinvalidoperationexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateInvalidOperationException</title>
|
||||
<titleabbrev>DateInvalidOperationException</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateInvalidOperationException intro -->
|
||||
<section xml:id="dateinvalidoperationexception.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada por <methodname>DateTimeImmutable::sub</methodname> e
|
||||
<methodname>DateTime::sub</methodname> quando uma operação não suportada é
|
||||
solicitada.
|
||||
</para>
|
||||
<para>
|
||||
Um exemplo de operação não suportada é o uso de
|
||||
um objeto <classname>DateInterval</classname> representando especificação de tempo
|
||||
relativo como <literal>next weekday</literal>, que não
|
||||
permite construir um objeto por ser inválido.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="dateinvalidoperationexception.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateInvalidOperationException</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateException</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
72
reference/datetime/dateinvalidtimezoneexception.xml
Normal file
72
reference/datetime/dateinvalidtimezoneexception.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.dateinvalidtimezoneexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateInvalidTimeZoneException</title>
|
||||
<titleabbrev>DateInvalidTimeZoneException</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateInvalidTimeZoneException intro -->
|
||||
<section xml:id="dateinvalidtimezoneexception.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada quando um valor incorreto é passado para
|
||||
<methodname>DateTimeZone::__construct</methodname>.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="dateinvalidtimezoneexception.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateInvalidTimeZoneException</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateException</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
72
reference/datetime/datemalformedintervalstringexception.xml
Normal file
72
reference/datetime/datemalformedintervalstringexception.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.datemalformedintervalstringexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>The DateMalformedIntervalStringException class</title>
|
||||
<titleabbrev>DateMalformedIntervalStringException</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateMalformedIntervalStringException intro -->
|
||||
<section xml:id="datemalformedintervalstringexception.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada quando um argumento <parameter>duration</parameter> inválido é passado para
|
||||
<methodname>DateInterval::__construct</methodname>.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="datemalformedintervalstringexception.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateMalformedIntervalStringException</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateException</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
72
reference/datetime/datemalformedperiodstringexception.xml
Normal file
72
reference/datetime/datemalformedperiodstringexception.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.datemalformedperiodstringexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateMalformedPeriodStringException</title>
|
||||
<titleabbrev>DateMalformedPeriodStringException</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateMalformedPeriodStringException intro -->
|
||||
<section xml:id="datemalformedperiodstringexception.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparaqa quando um argumento <parameter>isostr</parameter> inválido é passado para
|
||||
<methodname>DatePeriod::__construct</methodname>.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="datemalformedperiodstringexception.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateMalformedPeriodStringException</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateException</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
77
reference/datetime/datemalformedstringexception.xml
Normal file
77
reference/datetime/datemalformedstringexception.xml
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<phpdoc:exceptionref xml:id="class.datemalformedstringexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateMalformedStringException</title>
|
||||
<titleabbrev>DateMalformedStringException</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateMalformedStringException intro -->
|
||||
<section xml:id="datemalformedstringexception.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada quando uma string inválida de Data/Hora é detectada.
|
||||
</para>
|
||||
<para>
|
||||
Pode ser um valor para
|
||||
<methodname>DateTimeImmutable::__construct</methodname>,
|
||||
<methodname>DateTimeImmutable::modify</methodname>,
|
||||
<methodname>DateTime::__construct</methodname> ou
|
||||
<methodname>DateTime::modify</methodname>.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="datemalformedstringexception.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateMalformedStringException</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateException</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Exception'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
85
reference/datetime/dateobjecterror.xml
Normal file
85
reference/datetime/dateobjecterror.xml
Normal file
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.dateobjecterror" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateObjectError</title>
|
||||
<titleabbrev>DateObjectError</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateObjectError intro -->
|
||||
<section xml:id="dateobjecterror.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada quando uma das classe de Data/Hora não foi corretamente
|
||||
inicializada.
|
||||
</para>
|
||||
<para>
|
||||
Como as classes de Data/Hora não são finais, eles podem ser herdadas.
|
||||
Quando um construtor da classe pai não é chamado, este erro é disparado. Este é
|
||||
sempre um erro de programação.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="dateobjecterror.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateObjectError</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateError</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Error'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Error'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
<section role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><exceptionname>DateError</exceptionname></member>
|
||||
<member><exceptionname>DateRangeError</exceptionname></member>
|
||||
</simplelist>
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
171
reference/datetime/dateperiod/createfromiso8601string.xml
Normal file
171
reference/datetime/dateperiod/createfromiso8601string.xml
Normal file
@@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 0070ddc45d60b6eda095053847dba544aa4339bf Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="dateperiod.createfromiso8601string" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DatePeriod::createFromISO8601String</refname>
|
||||
<refpurpose>Cria um novo objeto DatePeriod a partir de uma string ISO8601</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis role="DatePeriod">
|
||||
<modifier>public</modifier> <modifier>static</modifier> <type>static</type><methodname>DatePeriod::createFromISO8601String</methodname>
|
||||
<methodparam><type>string</type><parameter>specification</parameter></methodparam>
|
||||
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Cria um novo objeto DatePeriod a partir de uma string ISO8601, como especificado no parâmetro
|
||||
<parameter>specification</parameter>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>specification</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Um subconjunto da <link xlink:href="&url.iso-8601.repeating_intervals;">especificação ISO 8601
|
||||
de intervalos repetitivos</link>.
|
||||
</para>
|
||||
<para>
|
||||
Um exemplo de uma especificação de intervalo ISO 8601 aceitável é
|
||||
<literal>R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M</literal>, que
|
||||
especifica:
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>
|
||||
5 iterações (<literal>R5/</literal>)
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Inicia em <literal>2008-03-01T13:00:00Z</literal>.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Cada iteração ocorrem em um intervalo de 1 ano, 2 meses, 10 dias, 2 horas e 30 minutos
|
||||
(<literal>/P1Y2M10DT2H30M</literal>).
|
||||
</simpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Exemplo de recursos de especificação de intervalos ISO 8601 que o PHP
|
||||
não suporta são:
|
||||
</para>
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<simpara>
|
||||
zero ocorrências (<literal>R0/</literal>)
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
deslocamento de fuso horário que não seja UTC (<literal>Z</literal>), como em <literal>+02:00</literal>.
|
||||
</simpara>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>options</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Um campo de bits que pode ser utilizado para controlar certos comportamentos com datas iniciais
|
||||
e finais.
|
||||
</para>
|
||||
<para>
|
||||
Com <constant>DatePeriod::EXCLUDE_START_DATE</constant>, pode-se
|
||||
excluir a data inicial do conjunto de datas recorrentes dentro do
|
||||
período.
|
||||
</para>
|
||||
<para>
|
||||
Com <constant>DatePeriod::INCLUDE_END_DATE</constant>, pode-se
|
||||
incluir a data final no conjunto de datas recorrentes dentro do
|
||||
período.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna um novo objeto DatePeriod.
|
||||
</para>
|
||||
<para>
|
||||
Objetos <classname>DatePeriod</classname> criados com este método podem ser
|
||||
usador como um iterador para gerar um número de
|
||||
objetos <classname>DateTimeImmutable</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="errors">
|
||||
&reftitle.errors;
|
||||
<para>
|
||||
Dispara <classname>DateMalformedPeriodStringException</classname> quando
|
||||
o parâmetro <parameter>specification</parameter> não puder ser analisado como um período ISO 8601
|
||||
válido.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title>Exemplo de DatePeriod::createFromISO8601String</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$iso = 'R4/2023-07-01T00:00:00Z/P7D';
|
||||
|
||||
$period = DatePeriod::createFromISO8601String($iso);
|
||||
|
||||
// Iterando pelo objeto DatePeriod, todas as
|
||||
// datas recorrentes dentro do período são exibidas.
|
||||
foreach ($period as $date) {
|
||||
echo $date->format('Y-m-d'), "\n";
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
2023-07-01
|
||||
2023-07-08
|
||||
2023-07-15
|
||||
2023-07-22
|
||||
2023-07-29
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
86
reference/datetime/dateperiod/getdateinterval.xml
Normal file
86
reference/datetime/dateperiod/getdateinterval.xml
Normal file
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="dateperiod.getdateinterval" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DatePeriod::getDateInterval</refname>
|
||||
<refpurpose>
|
||||
Obtém o intervalo
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<para>&style.oop;</para>
|
||||
<methodsynopsis role="DatePeriod">
|
||||
<modifier>public</modifier> <type>DateInterval</type><methodname>DatePeriod::getDateInterval</methodname>
|
||||
<void/>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Obtém um <type>object</type> da classe <classname>DateInterval</classname>
|
||||
representando o intervalo usado para o período.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
&no.function.parameters;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna um <type>object</type> <classname>DateInterval</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Exemplo de <methodname>DatePeriod::getDateInterval</methodname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$period = new DatePeriod('R7/2016-05-16T00:00:00Z/P1D');
|
||||
$interval = $period->getDateInterval();
|
||||
echo $interval->format('%d day');
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
1 day
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><methodname>DatePeriod::getStartDate</methodname></member>
|
||||
<member><methodname>DatePeriod::getEndDate</methodname></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
124
reference/datetime/dateperiod/getenddate.xml
Normal file
124
reference/datetime/dateperiod/getenddate.xml
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="dateperiod.getenddate" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DatePeriod::getEndDate</refname>
|
||||
<refpurpose>
|
||||
Obtém a data final
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<para>&style.oop;</para>
|
||||
<methodsynopsis role="DatePeriod">
|
||||
<modifier>public</modifier> <type class="union"><type>DateTimeInterface</type><type>null</type></type><methodname>DatePeriod::getEndDate</methodname>
|
||||
<void/>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Obtém a data final do período.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
&no.function.parameters;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna &null; se o <classname>DatePeriod</classname>
|
||||
não tiver uma data final. Por exemplo, quando inicializado com o
|
||||
parâmetro <parameter>recurrences</parameter> ou
|
||||
<parameter>isostr</parameter> sem uma
|
||||
data final.
|
||||
</para>
|
||||
<para>
|
||||
Retorna um <type>object</type> <classname>DateTimeImmutable</classname>
|
||||
quando o <classname>DatePeriod</classname> é inicializado com um
|
||||
<type>object</type> <classname>DateTimeImmutable</classname>
|
||||
no parâmetro <parameter>end</parameter>.
|
||||
</para>
|
||||
<para>
|
||||
Caso contrário, retorna um clone do <type>object</type> <classname>DateTime</classname>
|
||||
representando a data final.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Exemplo de <methodname>DatePeriod::getEndDate</methodname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$period = new DatePeriod(
|
||||
new DateTime('2016-05-16T00:00:00Z'),
|
||||
new DateInterval('P1D'),
|
||||
new DateTime('2016-05-20T00:00:00Z')
|
||||
);
|
||||
$start = $period->getEndDate();
|
||||
echo $start->format(DateTime::ISO8601);
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&examples.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
2016-05-20T00:00:00+0000
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
<example>
|
||||
<title>Exemplo de <methodname>DatePeriod::getEndDate</methodname> sem uma data final</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$period = new DatePeriod(
|
||||
new DateTime('2016-05-16T00:00:00Z'),
|
||||
new DateInterval('P1D'),
|
||||
7
|
||||
);
|
||||
var_dump($period->getEndDate());
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
NULL
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><methodname>DatePeriod::getStartDate</methodname></member>
|
||||
<member><methodname>DatePeriod::getDateInterval</methodname></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
105
reference/datetime/dateperiod/getrecurrences.xml
Normal file
105
reference/datetime/dateperiod/getrecurrences.xml
Normal file
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="dateperiod.getrecurrences" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DatePeriod::getRecurrences</refname>
|
||||
<refpurpose>Obtém o número de recorrências</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<para>&style.oop;</para>
|
||||
<methodsynopsis role="DatePeriod">
|
||||
<modifier>public</modifier> <type class="union"><type>int</type><type>null</type></type><methodname>DatePeriod::getRecurrences</methodname>
|
||||
<void/>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Obtém Obtém o número de recorrências.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
&no.function.parameters;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
O número de recorrências como definido explicitamente pelo parâmetro
|
||||
<literal>$recurrences</literal> passado ao contrutor da
|
||||
classe <classname>DatePeriod</classname>, ou &null; caso não tenha sido definido.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title>Diferentes valores para <methodname>DatePeriod::getRecurrences</methodname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[<?php
|
||||
$start = new DateTime('2018-12-31 00:00:00');
|
||||
$end = new DateTime('2021-12-31 00:00:00');
|
||||
$interval = new DateInterval('P1M');
|
||||
$recurrences = 5;
|
||||
|
||||
// recorrências definidas explicitamente através do construtor
|
||||
$period = new DatePeriod($start, $interval, $recurrences, DatePeriod::EXCLUDE_START_DATE);
|
||||
echo $period->getRecurrences(), "\n";
|
||||
|
||||
$period = new DatePeriod($start, $interval, $recurrences);
|
||||
echo $period->getRecurrences(), "\n";
|
||||
|
||||
$period = new DatePeriod($start, $interval, $recurrences, DatePeriod::INCLUDE_END_DATE);
|
||||
echo $period->getRecurrences(), "\n\n";
|
||||
|
||||
// recorrências não definidas no construtor
|
||||
$period = new DatePeriod($start, $interval, $end);
|
||||
var_dump($period->getRecurrences());
|
||||
|
||||
$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
|
||||
var_dump($period->getRecurrences());
|
||||
?>]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen role="php">
|
||||
5
|
||||
5
|
||||
5
|
||||
|
||||
NULL
|
||||
NULL
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><link linkend="dateperiod.props.recurrences">DatePeriod::$recurrences</link></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
92
reference/datetime/dateperiod/getstartdate.xml
Normal file
92
reference/datetime/dateperiod/getstartdate.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="dateperiod.getstartdate" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DatePeriod::getStartDate</refname>
|
||||
<refpurpose>
|
||||
Obtém a data inicial
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<para>&style.oop;</para>
|
||||
<methodsynopsis role="DatePeriod">
|
||||
<modifier>public</modifier> <type>DateTimeInterface</type><methodname>DatePeriod::getStartDate</methodname>
|
||||
<void/>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Obtém a data inicial do período.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
&no.function.parameters;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna um <type>object</type> <classname>DateTimeImmutable</classname>
|
||||
quando o <classname>DatePeriod</classname> é inicializado com um
|
||||
<type>object</type> <classname>DateTimeImmutable</classname>
|
||||
no parâmetro <parameter>start</parameter>.
|
||||
</para>
|
||||
<para>
|
||||
Caso contrário, retorna um <type>object</type>
|
||||
<classname>DateTime</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<example>
|
||||
<title>Exemplo de <methodname>DatePeriod::getStartDate</methodname></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$period = new DatePeriod('R7/2016-05-16T00:00:00Z/P1D');
|
||||
$start = $period->getStartDate();
|
||||
echo $start->format(DateTime::ISO8601);
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
2016-05-16T00:00:00+0000
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><methodname>DatePeriod::getEndDate</methodname></member>
|
||||
<member><methodname>DatePeriod::getDateInterval</methodname></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
82
reference/datetime/daterangeerror.xml
Normal file
82
reference/datetime/daterangeerror.xml
Normal file
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 696b6b9e32d8d4ef4cfd874caf677a47a6cbadb4 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<phpdoc:exceptionref xml:id="class.daterangeerror" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>A classe DateRangeError</title>
|
||||
<titleabbrev>DateRangeError</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
|
||||
<!-- {{{ DateRangeError intro -->
|
||||
<section xml:id="daterangeerror.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
Disparada por <methodname>DateTime::getTimestamp</methodname>,
|
||||
<methodname>DateTimeImmutable::getTimestamp</methodname> e
|
||||
<function>date_timestamp_get</function>em plataformas de 32 bits se o
|
||||
objeto representa uma data fora da faixa de inteiros de 32 bits com sinal.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
||||
<section xml:id="daterangeerror.synopsis">
|
||||
&reftitle.classsynopsis;
|
||||
|
||||
<!-- {{{ Synopsis -->
|
||||
<classsynopsis class="class">
|
||||
<ooexception>
|
||||
<exceptionname>DateRangeError</exceptionname>
|
||||
</ooexception>
|
||||
|
||||
<ooclass>
|
||||
<modifier>extends</modifier>
|
||||
<classname>DateError</classname>
|
||||
</ooclass>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
|
||||
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[@role='Error'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='Error'])">
|
||||
<xi:fallback/>
|
||||
</xi:include>
|
||||
</classsynopsis>
|
||||
<!-- }}} -->
|
||||
|
||||
</section>
|
||||
|
||||
<section role="seealso">
|
||||
&reftitle.seealso;
|
||||
<simplelist>
|
||||
<member><exceptionname>DateError</exceptionname></member>
|
||||
<member><exceptionname>DateObjectError</exceptionname></member>
|
||||
</simplelist>
|
||||
</section>
|
||||
|
||||
</partintro>
|
||||
|
||||
</phpdoc:exceptionref>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
@@ -14,7 +14,7 @@
|
||||
Representação de data e hora.
|
||||
</para>
|
||||
<para>
|
||||
Esta classe se comporta da mesma maneira que a classe<classname>DateTimeImmutable</classname>,
|
||||
Esta classe se comporta da mesma maneira que a classe <classname>DateTimeImmutable</classname>,
|
||||
exceto pelo fato de que os objetos se alteram quando métodos de modificação como
|
||||
<function>DateTime::modify</function> são chamados.
|
||||
</para>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
<para>
|
||||
Adiciona o objeto <classname>DateInterval</classname> informado a um objeto
|
||||
DateTime especificado.
|
||||
<classname>DateTime</classname> especificado.
|
||||
</para>
|
||||
<para>
|
||||
Equivalente a <methodname>DateTimeImmutable::add</methodname> mas funciona com
|
||||
|
||||
106
reference/datetime/datetime/createfromimmutable.xml
Normal file
106
reference/datetime/datetime/createfromimmutable.xml
Normal file
@@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="datetime.createfromimmutable" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DateTime::createFromImmutable</refname>
|
||||
<refpurpose>Retorna uma nova instância de DateTime encapsulando o objeto DateTimeImmutable informado</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis role="DateTime">
|
||||
<modifier>public</modifier> <modifier>static</modifier> <type>static</type><methodname>DateTime::createFromImmutable</methodname>
|
||||
<methodparam><type>DateTimeImmutable</type><parameter>object</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>object</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
O objeto imutável <classname>DateTimeImmutable</classname> que necessita
|
||||
ser convertido para uma versão mutável. Este objeto não é modificado, em
|
||||
vez disso uma nova instância <classname>DateTime</classname> é
|
||||
criada contendo as mesmas informações de data, horário e fuso.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna uma nova instância <classname>DateTime</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="changelog">
|
||||
&reftitle.changelog;
|
||||
<para>
|
||||
<informaltable>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>&Version;</entry>
|
||||
<entry>&Description;</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>8.0.0</entry>
|
||||
<entry>
|
||||
O método agora retorna uma instância da classe que está sendo chamada. Anteriormente, ele criava
|
||||
uma nova instância de <classname>DateTime</classname>.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title>Criando um objeto de data/hora mutável</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$date = new DateTimeImmutable("2014-06-20 11:45 Europe/London");
|
||||
|
||||
$mutable = DateTime::createFromImmutable( $date );
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
83
reference/datetime/datetime/createfrominterface.xml
Normal file
83
reference/datetime/datetime/createfrominterface.xml
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="datetime.createfrominterface" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DateTime::createFromInterface</refname>
|
||||
<refpurpose>Retorna um novo objeto DateTime encapsulando o objeto DateTimeInterface informado</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis role="DateTime">
|
||||
<modifier>public</modifier> <modifier>static</modifier> <type>DateTime</type><methodname>DateTime::createFromInterface</methodname>
|
||||
<methodparam><type>DateTimeInterface</type><parameter>object</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>object</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
O objeto <classname>DateTimeInterface</classname> que necessita
|
||||
ser convertido para uma versão mutável. Este objeto não é modificado, em
|
||||
vez disso uma nova instância <classname>DateTime</classname> é
|
||||
criada contendo as mesmas informações de data, horário e fuso.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna uma nova instância de <classname>DateTime</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title>Criando um objeto de data/hora mutável</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$date = new DateTimeImmutable("2014-06-20 11:45 Europe/London");
|
||||
|
||||
$mutable = DateTime::createFromInterface($date);
|
||||
|
||||
$date = new DateTime("2014-06-20 11:45 Europe/London");
|
||||
$also_mutable = DateTime::createFromInterface($date);
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
@@ -21,7 +21,7 @@
|
||||
<methodparam><type>DateTimeZone</type><parameter>timezone</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Define um novo fuso horário a um <type>objeto</type> <classname>DateTime</classname>.
|
||||
Define um novo fuso horário a um objeto <classname>DateTime</classname>.
|
||||
</para>
|
||||
<para>
|
||||
Equivalente a <methodname>DateTimeImmutable::setTimezone</methodname> mas funciona com
|
||||
|
||||
83
reference/datetime/datetimeimmutable/createfrominterface.xml
Normal file
83
reference/datetime/datetimeimmutable/createfrominterface.xml
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 02ff7fef5b34cf8f5395180d9d39fb64d9398d00 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<refentry xml:id="datetimeimmutable.createfrominterface" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>DateTimeImmutable::createFromInterface</refname>
|
||||
<refpurpose>Retorna um novo objeto DateTimeImmutable encapsulando o objeto DateTimeInterface informado</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
&reftitle.description;
|
||||
<methodsynopsis role="DateTimeImmutable">
|
||||
<modifier>public</modifier> <modifier>static</modifier> <type>DateTimeImmutable</type><methodname>DateTimeImmutable::createFromInterface</methodname>
|
||||
<methodparam><type>DateTimeInterface</type><parameter>object</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="parameters">
|
||||
&reftitle.parameters;
|
||||
<para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>object</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
O objeto <classname>DateTimeInterface</classname> que necessita
|
||||
ser convertido para uma versão mutável. Este objeto não é modificado, em
|
||||
vez disso uma nova instância <classname>DateTimeImmutable</classname> é
|
||||
criada contendo as mesmas informações de data, horário e fuso.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="returnvalues">
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
Retorna uma nova instância de <classname>DateTimeImmutable</classname>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="examples">
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title>Criando um objeto de data/hora imutável</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$date = new DateTime("2014-06-20 11:45 Europe/London");
|
||||
|
||||
$immutable = DateTimeImmutable::createFromInterface($date);
|
||||
|
||||
$date = new DateTimeImmutable("2014-06-20 11:45 Europe/London");
|
||||
$also_immutable = DateTimeImmutable::createFromInterface($date);
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
158
reference/datetime/examples.xml
Normal file
158
reference/datetime/examples.xml
Normal file
@@ -0,0 +1,158 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 8cdc6621f9826d04abc3e50438c010804d7e8683 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
|
||||
<chapter xml:id="datetime.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
&reftitle.examples;
|
||||
|
||||
<section xml:id="datetime.examples-arithmetic">
|
||||
<title>Aritmética de Data e Horário</title>
|
||||
<para>
|
||||
Os exemplos a seguir mostram algumas armadilhas da aritmética de Data/Horário em
|
||||
relação a transições de horário de verão e meses que contêm números diferentes de dias.
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>DateTimeImmutable::add/sub adicionando intervalos que tempo decorrido</title>
|
||||
<simpara>
|
||||
Adicionar PT24H sobre uma transição de horário de verão irá aparentar uma adição de
|
||||
23/25 horas (para a maioria dos fusos horários).
|
||||
</simpara>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$dt = new DateTimeImmutable("2015-11-01 00:00:00", new DateTimeZone("America/New_York"));
|
||||
echo "Start: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
$dt = $dt->add(new DateInterval("PT3H"));
|
||||
echo "End: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Start: 2015-11-01 00:00:00 -04:00
|
||||
End: 2015-11-01 02:00:00 -05:00
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>DateTimeImmutable::modify e strtotime incrementando ou decrementando valores de componentes individuais</title>
|
||||
<simpara>
|
||||
Adicionar +24 horas sobre uma transição de horário de verão irá adicionar exatamente 24 horas como visto na
|
||||
string de data/hora (a menos que o horário de início ou fim esteja em um ponto
|
||||
de transição).
|
||||
</simpara>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$dt = new DateTimeImmutable("2015-11-01 00:00:00", new DateTimeZone("America/New_York"));
|
||||
echo "Start: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
$dt = $dt->modify("+24 hours");
|
||||
echo "End: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Start: 2015-11-01 00:00:00 -04:00
|
||||
End: 2015-11-02 00:00:00 -05:00
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>Adicionar ou substrair períodos pode causar transferência de datas</title>
|
||||
<simpara>
|
||||
Como em 31 de janeiro + 1 mês, irá resultar em 2 de março (em ano bissexto) ou
|
||||
3 de março (em ano normal).
|
||||
</simpara>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
echo "Ano normal:\n"; // fevereiro tem 28 dias
|
||||
$dt = new DateTimeImmutable("2015-01-31 00:00:00", new DateTimeZone("America/New_York"));
|
||||
echo "Início: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
$dt = $dt->modify("+1 month");
|
||||
echo "Fim: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
|
||||
echo "Ano bissexto:\n"; // fevereiro tem 29 dias
|
||||
$dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York"));
|
||||
echo "Início: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
$dt = $dt->modify("+1 month");
|
||||
echo "Fim: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Ano normal:
|
||||
Início: 2015-01-31 00:00:00 -05:00
|
||||
Fim: 2015-03-03 00:00:00 -05:00
|
||||
Ano bissexto:
|
||||
Início: 2016-01-31 00:00:00 -05:00
|
||||
Fim: 2016-03-02 00:00:00 -05:00
|
||||
]]>
|
||||
</screen>
|
||||
<simpara>
|
||||
PAra obter o último dia do mês seguinte (para evitar a transferência),
|
||||
o formato <literal>last day of</literal> está disponível.
|
||||
</simpara>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
echo "Ano normal:\n"; // fevereiro tem 28 dias
|
||||
$dt = new DateTimeImmutable("2015-01-31 00:00:00", new DateTimeZone("America/New_York"));
|
||||
echo "Início: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
$dt = $dt->modify("last day of next month");
|
||||
echo "Fim: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
|
||||
echo "Ano bissexto:\n"; // fevereiro tem 29 dias
|
||||
$dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York"));
|
||||
echo "Início: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
$dt = $dt->modify("last day of next month");
|
||||
echo "Fim: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Normal year:
|
||||
Start: 2015-01-31 00:00:00 -05:00
|
||||
End: 2015-02-28 00:00:00 -05:00
|
||||
Leap year:
|
||||
Start: 2016-01-31 00:00:00 -05:00
|
||||
End: 2016-02-29 00:00:00 -05:00
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
@@ -174,7 +174,7 @@ object(DateTimeImmutable)#1 (3) {
|
||||
<entry>"04", "07", "19"</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>meridiano</literal></entry>
|
||||
<entry><literal>meridian</literal></entry>
|
||||
<entry>[AaPp] .? [Mm] .? [\0\t ]</entry>
|
||||
<entry>"A.m.", "pM", "am."</entry>
|
||||
</row>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<refentry xml:id="function.checkdate" xmlns="http://docbook.org/ns/docbook">
|
||||
<refnamediv>
|
||||
<refname>checkdate</refname>
|
||||
<refpurpose>Valida uma data Gregoriana</refpurpose>
|
||||
<refpurpose>Valida uma data gregoriana</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsect1 role="description">
|
||||
@@ -15,7 +15,7 @@
|
||||
<methodparam><type>int</type><parameter>year</parameter></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Checa a validade da data formada pelos argumentos. Uma data é considerada
|
||||
Verifica a validade da data formada pelos argumentos. Uma data é considerada
|
||||
válida se cada parâmetro é adequadamente definido.
|
||||
</para>
|
||||
</refsect1>
|
||||
@@ -36,8 +36,8 @@
|
||||
<term><parameter>day</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
O dia está dentro do número permitido de dias para um
|
||||
<parameter>month</parameter>. <parameter>year</parameter>s bissextos são
|
||||
O dia está dentro do número permitido de dias para o mês
|
||||
(<parameter>month</parameter>). Anos (<parameter>year</parameter>) bissextos são
|
||||
levados em consideração.
|
||||
</para>
|
||||
</listitem>
|
||||
@@ -46,7 +46,7 @@
|
||||
<term><parameter>year</parameter></term>
|
||||
<listitem>
|
||||
<para>
|
||||
O ano está entre 1 e 32767, incluso.
|
||||
O ano está entre 1 e 32767, inclusive.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
&reftitle.returnvalues;
|
||||
<para>
|
||||
A função retorna &false; se o
|
||||
<parameter>timezone_identifier</parameter> não for válido, ou &true;
|
||||
<parameter>timezoneId</parameter> não for válido, ou &true;
|
||||
caso contrário.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
@@ -227,6 +227,23 @@ echo date("D M d Y"). ', horário do nascer do sol : ' .date_sunrise(time(), SUN
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Mon Dec 20 2004, horário do nascer do sol : 08:54
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
<example>
|
||||
<title>Sem nascer do sol</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$solstice = strtotime('2017-12-21');
|
||||
var_dump(date_sunrise($solstice, SUNFUNCS_RET_STRING, 69.245833, -53.537222));
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
bool(false)
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<methodparam choice="opt"><type class="union"><type>float</type><type>null</type></type><parameter>utcOffset</parameter><initializer>&null;</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
A função <function>date_sunrise</function> retorna o horário do pôr do sol para um
|
||||
A função <function>date_sunset</function> retorna o horário do pôr do sol para um
|
||||
dia (especificado como um <parameter>timestamp</parameter>) e uma localização informados.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>timestamp</parameter><initializer>&null;</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Idêntica a função <function>date</function>, exceto que
|
||||
Idêntica à função <function>date</function>, exceto que
|
||||
a hora retornada será baseada no Horário de Greenwich (GMT).
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
@@ -184,6 +184,16 @@ Array
|
||||
</example>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 role="seealso">
|
||||
&reftitle.seealso;
|
||||
<para>
|
||||
<simplelist>
|
||||
<member><function>getdate</function></member>
|
||||
</simplelist>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
Além disso, nem todas as plataformas suportam timestamps negativos, então sua
|
||||
faixa de datas pode ficar limitada a um valor não anterior à época Unix. Isto significa que
|
||||
%e, %T, %R e %D (e possivelmente outras) - assim como datas anteriores a
|
||||
<literal>Jan 1, 1970</literal> - não funcionarão no Windows, algumas distribuições
|
||||
<literal>1 de janeito de 1970</literal> - não funcionarão no Windows, algumas distribuições
|
||||
Linux, e alguns outros sistemas operacionais. Para sistemas Windows, uma visão
|
||||
completa dos especificadores de conversão suportados podem ser encontrados em
|
||||
<link xlink:href="&url.strftime.win32;"><acronym>MSDN</acronym></link>.
|
||||
@@ -140,7 +140,7 @@
|
||||
<row>
|
||||
<entry><literal>%b</literal></entry>
|
||||
<entry>Nome do mês abreviado, baseado no idioma</entry>
|
||||
<entry><literal>Jan</literal> até <literal>Dez</literal></entry>
|
||||
<entry><literal>jan</literal> até <literal>dez</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%B</literal></entry>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- EN-Revision: 5c951013ca04161992efed8b86fb40f55669958e Maintainer: fabioluciano Status: ready --><!-- CREDITS: felipe, surfmax, thiago, fabioluciano, adiel, leonardolara -->
|
||||
|
||||
<!-- splitted from ./en/functions/datetime.xml, last change in rev 1.8 -->
|
||||
<refentry xml:id="function.strtotime" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<refnamediv>
|
||||
<refname>strtotime</refname>
|
||||
@@ -10,7 +10,7 @@
|
||||
&reftitle.description;
|
||||
<methodsynopsis>
|
||||
<type class="union"><type>int</type><type>false</type></type><methodname>strtotime</methodname>
|
||||
<methodparam><type>string</type><parameter>time</parameter></methodparam>
|
||||
<methodparam><type>string</type><parameter>datetime</parameter></methodparam>
|
||||
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>baseTimestamp</parameter><initializer>&null;</initializer></methodparam>
|
||||
</methodsynopsis>
|
||||
<simpara>
|
||||
@@ -44,7 +44,7 @@
|
||||
<para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>time</parameter></term>
|
||||
<term><parameter>datetime</parameter></term>
|
||||
<listitem>
|
||||
<para>&date.formats.parameter;</para>
|
||||
</listitem>
|
||||
@@ -191,7 +191,6 @@ if (($timestamp = strtotime($str)) === false) {
|
||||
<member><classname>DateTimeImmutable</classname></member>
|
||||
<member><methodname>DateTimeImmutable::createFromFormat</methodname></member>
|
||||
<member><link linkend="datetime.formats">Formatos de Data e Hora</link></member>
|
||||
<member><methodname>DateTime::createFromFormat</methodname></member>
|
||||
<member><function>checkdate</function></member>
|
||||
<member><function>strptime</function></member>
|
||||
</simplelist>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</methodsynopsis>
|
||||
<para>
|
||||
Retorna o horário atual medido como o número de segundos desde
|
||||
a Época Unix (January 1 1970 00:00:00 GMT).
|
||||
a Época Unix (1 de janeiro de 1970 00:00:00 GMT).
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
@@ -43,7 +43,7 @@
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title><function>time</function> example</title>
|
||||
<title>Exemplo de <function>time</function></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
@@ -123,7 +123,8 @@
|
||||
<para>
|
||||
O fuso horário padrão usado por todas as funções de data/hora.
|
||||
A ordem de precedência para qual fuso horário será utilizado se nenhum
|
||||
for explicitamente mencionado é descrita na função <function>date_default_timezone_get</function>. Acesse <xref
|
||||
for explicitamente mencionado é descrita na
|
||||
função <function>date_default_timezone_get</function>. Acesse <xref
|
||||
linkend="timezones"/> para uma lista de todos os fusos horários suportados.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
34
security/sessions.xml
Normal file
34
security/sessions.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 8782bc734072865ade29b8951bc94d98a53750ef Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<chapter xml:id="security.sessions" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Segurança da Sessão</title>
|
||||
|
||||
<para>
|
||||
É importante manter o gerenciamento de sessão HTTP seguro. A segurança
|
||||
relacionada a sessão está descrita na seção
|
||||
<link linkend="session.security">Segurança de Sessão</link>
|
||||
da referência <link linkend="book.session">Módulo de Sessão</link>.
|
||||
</para>
|
||||
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
||||
Reference in New Issue
Block a user