array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'faq.using.php', 1 => 'Utilizando o PHP', ), 'up' => array ( 0 => 'faq.php', 1 => 'FAQ', ), 'prev' => array ( 0 => 'faq.build.php', 1 => 'Problemas de Compilação', ), 'next' => array ( 0 => 'faq.passwords.php', 1 => 'Gerando hash de senha', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'faq/using.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
Esta seção reúne vários erros comuns que você pode encontrar enquanto estiver escrevendo scripts PHP.
O PHP é uma "cola" que reúne centenas de bibliotecas externas, então às vezes isso fica desorganizado. No entanto, uma regra simples é a seguinte:
Os parâmetros de funções de Array são ordenados como "needle, haystack" ao passo que funções de String são o contrário, logo "haystack, needle".
O PHP disponibiliza muitas variáveis predefinidas, como a superglobal $_POST. Você pode iterar através de $_POST, já que ele é um array associativo com todos os valores enviados com o método POST. Por exemplo, vamos iterar através de POST com foreach, verificar se há valores vazios com empty() e imprimi-los na tela.
<?php
$empty = $post = array();
foreach ($_POST as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}
print "<pre>";
if (empty($empty)) {
print "Nenhum dos valores enviados com POST estão vazios, enviado:\n";
var_dump($post);
} else {
print "Temos " . count($empty) . " valores vazios\n";
print "Enviado:\n"; var_dump($post);
print "Vazio:\n"; var_dump($empty);
exit;
}
?>
Considerando que isso seja para um banco de dados, utilize o mecanismo de escape que vem com o banco de dados. Por exemplo, utilize mysql_real_escape_string() com MySQL e pg_escape_string() com PostgreSQL. Existem também as funções genéricas addslashes() e stripslashes(), que são mais comuns com códigos PHP antigos.
<?php
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
?>
Para ser capaz de utilizar os resultados de suas funções em uma expressão (como concatenar com uma string no exemplo acima), você precisa utilizar return para retornar o valor e não echo.
<pre>
<?php echo "Esta deve ser a primeira linha."; ?>
<?php echo "Esta deveria ser uma nova linha."; ?>
</pre>
No PHP, um bloco de código é fechado com "?>" ou "?>\n" (onde \n significa uma nova linha). Logo, no exemplo anterior, as sentenças serão exibidas na mesma linha porque o PHP omite o caractere de nova linha após o final do bloco de código. Isso significa que você precisa inserir uma nova linha depois de cada bloco de código PHP para exibi-las em uma nova linha.
Por que o PHP faz isso? Porque quando está formatando HTML, isto normalmente torna sua vida mais fácil porque não se quer esta nova linha, senão você teria que criar linhas extremamente longas ou tornar o código fonte ilegível para alcançar este efeito.
As funções header(), setcookie() e as funções de sessão precisam adicionar os cabeçalhos ao stream de saída, mas os cabeçalhos só podem ser enviados antes de qualquer outro conteúdo. Não pode haver nenhuma saída antes de utilizar estas funções como HTML. A função headers_sent() irá verificar se o seu script já enviou cabeçalhos e veja também as funções de Controle de Saída.
A função getallheaders() fará isso se você estiver rodando o PHP como um módulo do Apache. Logo, o fragmento de código abaixo sempre exibirá todos os cabeçalhos de requisição:
<?php
$headers = getallheaders();
foreach ($headers as $name => $content) {
echo "headers[$name] = $content<br />\n";
}
?>
Veja também apache_lookup_uri(), apache_response_headers() e fsockopen()
O modelo de segurança do IIS é o culpado aqui. Este é um problema comum a todos os programas CGI rodando no IIS. A solução é criar um arquivo HTML (não interpretado pelo PHP) como uma página de entrada para o diretório autenticado. Então utilizar a tag META para redirecionar para a página PHP ou fornecer um link para a página PHP. O PHP irá então reconhecer a autenticação corretamente. Com o módulo ISAPI, este não é um problema. Isto não deve afetar outros servidores web NT. Para mais informações veja: » http://support.microsoft.com/kb/q160422/ e a seção do manual em Autenticação HTTP .
Você terá que alterar o Go to Internet Information
Services
. Localize o arquivo PHP e vá até as suas propriedades.
Vá até a aba File Security
, Edit -<
Anonymous access and authentication control
.
Pode-se corrigir o problema desabilitando Anonymous
Access
e deixando Integrated Window
Authentication
habilitado, ou habilitando Anonymous
Access
e editando o usuário para que ele não possa ter o
direito de acesso.
Para utilizar <?xml diretamente no seu código PHP, você terá que desabilitar
as short tags definindo a diretiva PHP
short_open_tags como
0
. Você não pode configurar esta diretiva com a função
ini_set(). Independentemente de
short_open_tags estar ativada ou
não, você pode fazer algo como: <?php echo '<?xml'; ?>
.
O padrão para esta diretiva é On
.
Leia a página do manual variáveis predefinidas dado que ele inclui uma lista parcial das variáveis predefinidas disponíveis para o seu script. Uma lista completa das variáveis disponíveis (e muito mais informação) pode ser vista chamando a função phpinfo(). Não deixe de ler a seção do manual variáveis de fontes externas uma vez que descreve cenários comuns para variáveis externas como aquelas originadas de um formulário HTML, cookie ou da URL.
Existem algumas poucas alternativas escritas em PHP como » FPDF e » TCPDF.
As opções disponíveis são K (para Kilobytes), M (para Megabytes) e G (para
Gigabytes), tanto em maiúsculas ou minúsculas.
Qualquer outra coisa é tratada como bytes. 1M
é igual a um Megabyte ou
1048576
bytes. 1K
é igual a um Kilobyte ou
1024
bytes. Essas notações abreviadas podem ser
utilizadas no php.ini e na função ini_set().
Importante observar que os valores são truncados para int apenas,
ou seja, 0.5M
será interpretado como 0
.
Nota: kilobyte versus kibibyte
A notação do PHP descreve um kilobyte equivalente a 1024 bytes, enquanto que o padrão IEC considera que este deve ser um kibibyte. Resumindo: k e K = 1024 bytes.