Fabyo 66 Denunciar post Postado Setembro 1, 2005 Entenda o php.ini e como funciona php.ini mais atual é esse:php.ini Para um melhor entendimento postarei links do manual do php assim nao preciso explicar uma coisa que ja esta no manual e de facil entendimento. manual do php: O php.ini é o arquivo de configuração do php, e ele é lido quando o php é iniciado. Quando o php esta rodando como modulo o php.ini é lido apenas quando o servidor é iniciado. para as versões CGI e CLI, isso acontece cada vez que eles são chamados. Nota: O servidor web Apache muda o diretório para a raiz ao ser iniciado, fazendo com que o PHP tente ler o arquivo php.ini da raiz do sistema de arquivos se esta existir. nem todas as diretivas do PHP são documentados no manual. Para uma lista completa das diretivas disponíveis na sua versão do PHP, por favor leia seu arquivo php.ini que é bem comentado. ; qualquer texto em uma linha após ponto-e-vírgula sem aspas é ignorado isso significa um comentario Como modificar valores de configuração Executando PHP como um módulo do Apache http://br2.php.net/manual/pt_BR/configuration.changes.php para um conhecimento melhor leia: http://br2.php.net/manual/pt_BR/configurat...figuration.file ini_set http://br2.php.net/manual/pt_BR/function.ini-set.php dl -- Carrega uma extensão do PHP durante a execução http://br2.php.net/manual/pt_BR/function.dl.php Apêndice H. Lista de diretivas principais do arquivo php.ini http://br2.php.net/manual/pt_BR/ini.php bom agora vamos estudar algumas linha do php.ini só irei explicar as linhas que realmente interessa para um usuario comun e nao um servidor com base no php.ini atual: #Linha 75 <span style='color:DarkBlue'>zend.ze1_compatibility_mode = Off</span> Permite modo de compatibilidade com o Zend Engine 1 (PHP 4). Afeta clonagem, conversão e comparação de objetos. #Linha 86 <span style='color:DarkBlue'>asp_tags = Off</span> nessa linha se você deixar em on você habilita as tags de asp para ser usado com o php exemplo: <span style='color:red'><% %> </span> #Linha 218 <span style='color:DarkBlue'>Syntax Highlighting mode</span> essas configurações mudam o efeito de cores da funções highlight_string() e highlight_file() #Linha 237 <span style='color:DarkBlue'>expose_php = On</span> Em geral, segurança por obscuridão é uma das mais fracas formas de segurança. Mas em alguns casos, cada pequeno bit extra de segurança é desejável. Algumas poucas técnicas simples podem ajudar a esconder o PHP, possivelmente atrasando um invasor que está tentando descobrir fraquezas em seu sistema. Setando expose_php = off em seu arquivo php.ini, você reduz a quantidade de informação disponível para ele. #Linha 292 <span style='color:DarkBlue'>error_reporting</span> error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT error_reporting -- Define quais erros serão reportados error_reporting() #Linha 299 <span style='color:DarkBlue'>display_errors = On</span> se tiver off deixe display_errors = On para programar Isto determina quando os erros devem ser mostrados como parte da saída ou se devem ser escondidos do usuário. Nota: Isto serve para suportar o seu desenvolvimento e nunca deve ser usado em sistemas de produção (ex. sistemas conectados a internet). #Linha 304 <span style='color:DarkBlue'>display_startup_errors = Off</span> Mesmo quando display_errors esta em on, erros que aconteçam durante a inicialização do PHP não são mostrados. É fortemente recomendado manter display_startup_errors em off, exceto para procurar erros. #Linha 309 <span style='color:DarkBlue'>log_errors = Off</span> Indica se as mensagens de erro do script devem ficar no log de erros do servidor ou em error_log. Esta opção depende do servidor. Nota: Você é fortemente avisado para usar o log de erros ao invés de mostra-los em web sites de produção. #Linha 313 <span style='color:DarkBlue'>log_errors_max_len = 1024</span> Define o limite de tamanho da mensagem de erro para logar em bytes. Em error_log é adicionada informação sobre a fonte. O padrão é 1024 e 0 permite que não seja estabelecido nenhum limite. #Linha 317 <span style='color:DarkBlue'>ignore_repeated_errors = Off</span> Não loga mensagens repetidas. Erros repetidos devem acontecer no mesmo arquivo na mesma linha enquanto ignore_repeated_source estiver em true. #Linha 322 <span style='color:DarkBlue'>ignore_repeated_source = Off</span> Ignora a fonte da mensagem quando estiver ignorando mensagens repetidos. Quando esta definição ON não irá logar mensagens de erros repetidas de arquivos diferentes ou linhas diferentes. #Linha 327 <span style='color:DarkBlue'>report_memleaks = On</span> Se este parâmetro estiver em Off, quando acontecerem memory leaks não será mostrado (na saída ou no log). Isto só tem efeito numa compilação de debug, e se error_reporting incluir E_WARNING na lista de permitidos. #Linha 330 <span style='color:DarkBlue'>track_errors = Off php5</span> PHP5 Se ativado, a última mensagem de erro sempre estará disponível na variável <span style='color:DarkBlue'>$php_errormsg.</span> #Linha 334<span style='color:DarkBlue'>html_errors = Off</span> Desativa as tags HTML nas mensagens de erro. O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e que direcionam o usuário para uma pagina descrevendo o erro ou a função que causou o erro. Estas referencias são afetadas por docref_root e docref_ext. #Linha 343 <span style='color:DarkBlue'>docref_root = "path_manualphp/"</span> #Linha 344 <span style='color:DarkBlue'>docref_ext = .html</span> O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e que direcionam o usuário para uma pagina descrevendo o erro ou a função que causou o erro. No caso de paginas de manual você pode baixar o manual na sua língua e definir esta diretiva para a sua cópia local. Se a sua cópia local do manual podur ser acessada por '/manual/' você pode simplesmente usar docref_root=/manual/. Adicionalmente você deve definir docref_ext para ser igual a extensão da sua cópia docref_ext=.html. É possível usar referencias externas. Por exemplo, você pode usar docref_root=http://manual/en/ ou docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F" A maior parte do tempo você deve querer que o valor de docref_root termine com uma barra '/'. Mas veja o segundo exemplo acima o qual não tem ou não necessita isso. Nota: Isto é para suportar o seu desenvolvimento já que torna mais fácil encontrar a descrição de uma função. Entretando não deve ser usado em sistemas de produção (ex. sistemas conectados na internet). docref_ext string Veja docref_root. Nota: O valor de docref_ext deve começar com um ponto '.'. #Linha 347 <span style='color:DarkBlue'>error_prepend_string = "<font color=ff0000>"</span> #Linha 350 <span style='color:DarkBlue'>error_append_string = "</font>"</span> formatação da string da mensagem de erro para manter o padrao XHTML use: <span style="color: #ff0000"> </span> #Linha 353 <span style='color:DarkBlue'>error_log = filename</span> #Linha 356 <span style='color:DarkBlue'>error_log = syslog</span> O nome do arquivo onde os erros do script serão logados. Se o valor especial syslog é usado, os erros são enviados para o log do sistema. No UNIX, isto indica syslog(3) e no Windows NT isto indica o log do evento. O log de sistema não é suportado no Windows 95. Veja também: [url=http://php.net/syslog]syslog()[/url]. #Linha 389 <span style='color:DarkBlue'>register_globals = Off </span> Usando Register Globals Talvez a mudança mais controversa no PHP é quando o valor padrão para a diretiva do PHP register_globals passou de <span style='color:DarkBlue'>ON</span> para <span style='color:red'>OFF</span> no PHP 4.2.0. Confiança nesta está diretiva foi bastante pública e muitas pessoas nem mesmo sabiam que ela existia e assumiam que ela é apenas a forma como o PHP trabalha. Esta página irá explicar como alguém pode escrever um código inseguro com esta diretiva, mas mantenha em mente que a diretiva por si só não é insegura, mas o seu uso incorreto sim. <span style='color:red'>Quando register_globals esta em on injetará (veneno) em seus scripts</span>, todos os tipos de variáveis, como variáveis request de formulários HTML. Isto junta-se com o fato deo PHP não exigir inicialização de variáveis siginifica que escrever códigos inseguros é muito mais fácil. Não foi uma decisão difícil, mas a comunidade PHP decidiu, por definição, desabilitar esta diretiva. Quando on, as pessoas usavam variáveis ainda sem saber realmente, com certeza, de onde elas vinham e podiam apenas supor. Variáveis internas que estão definidas no próprio script conseguem se misturar com dados requisitados enviados pelos usuários e desabilitando register_globals muda isto. Vamos demonstrar com um exemplo de mal uso de register_globals: Exemplo de uso incorreto com register_globals = on <!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css"> <?php <span style=' color: DarkGray;'>// definir $authorized = true apenas se o usuário está autenticado</span> if (authenticated_user<span style=' color: green;'>()</span>) { $authorized = true; } <span style=' color: DarkGray;'>// Por isso nós primeiro não inicializamos $authorized como false, isto poderia</span> <span style=' color: DarkGray;'>// ser definido através de register_globals, como por GET auth.php?authorized=1 </span> <span style=' color: DarkGray;'>// então, qualquer um pode ser visto como autenticado!</span> if <span style=' color: green;'>($authorized)</span> { include "/highly/sensitive/data.php"; } ?> <!--php2--></div><!--ephp2--> Quando register_globals = on, nossa lógica acima pode ser comprometida. Quando off, $authorized não pode ser setada via request portanto isto é mais agradável, apesar disso é realmente uma boa prática de programação inicializar as variáveis primeiro. Por exemplo, em nosso exemplo acima nós poderíamos ter feito primeiro $authorized = false. Fazendo isto primeiro significa que nosso código acima trabalharia com register_globals on ou off enquanto usuários, por definição, estariam desautorizados. Um outro exemplo é aquele das sessões. Quando register_globals = on, nós poderíamos também usar $username em nosso exemplo abaixo, mas novamente você deve imaginar que $username poderia, também, vir de outros meios, tal como GET (pela URL). Exemplo de uso de sessões com register_globals on ou off <!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css"> <?php <span style=' color: DarkGray;'>// Nós saberíamos de onde $username veio, mas fazer com $_SESSION é </span> <span style=' color: DarkGray;'>// para dados de sessão </span> if (isset<span style=' color: green;'>($_SESSION['username'])</span>) { echo "Olá <b>{$_SESSION<span style=' color: green;'><span style=' color: green;'>['username']</span>}</b>"</span>; } else { echo "Olá <b>Guest</b><br />"; echo "Você gostaria de logar?"; } ?> <!--php2--></div><!--ephp2--> É até possível tomar medidas preventivas para quando a formação de variável está sob tentativa. Se você já sabe de antemão de onde a variável está vindo, você pode ver se os dados submetidos está vindo de um tipo de submissão impróprio. Enquanto não está garantido que dados não foram formados, ele exige a um atacante que advinhe o tipo correto de formação da variável. Se você toma cuidado de onde os dados requisitados vêm, você pode usar $_REQUEST já que ele contém um misto de dados GET, POST e COOKIE. #Linha 452 <span style='color:DarkBlue'>;include_path = ".:/php/includes"</span> UNIX #Linha 455 <span style='color:DarkBlue'>;include_path = ".;c:\php\includes"</span> WINDOWS Especifica a lista de diretórios onde as funções [b]require()[/b], [b]include()[/b] e fopen_with_path() procuram por arquivos. O formato deve ser igual ao da variável PATH do sistema: uma lista de diretórios separados por vírgula no Unix e ponto-e-vírgula no Windows. Exemplo H-1. Unix include_path include_path=".:/php/includes" Exemplo H-2. Windows include_path include_path=".;c:\php\includes" Uso de . no caminho de inclusão (include path) permite que includes usando caminho relativo em relação ao diretório atual. #Linha 469 <span style='color:DarkBlue'>extension_dir = "./"</span> coloque o path das dll do php exemplo c:/bin/php/ext #Linha 519 <span style='color:DarkBlue'>upload_tmp_dir =</span> descomente e coloque o path pra onde ira salvar os arquivos tmp de upload exemplo c:/windows/temp #Linha 577 lista de extensoes caso você precise usar alguma delas só descomentar a linha para usar o MySQLi acrescente essa linha: extension=php_mysqli.dll #Linhas 577 a 609: ;extension=php_mbstring.dll ;extension=php_bz2.dll ;extension=php_curl.dll ;extension=php_dba.dll ;extension=php_dbase.dll ;extension=php_exif.dll ;extension=php_fdf.dll ;extension=php_filepro.dll ;extension=php_gd2.dll ;extension=php_gettext.dll ;extension=php_ifx.dll ;extension=php_imap.dll ;extension=php_interbase.dll ;extension=php_ldap.dll ;extension=php_mcrypt.dll ;extension=php_mhash.dll ;extension=php_mime_magic.dll ;extension=php_ming.dll ;extension=php_mssql.dll ;extension=php_msql.dll ;extension=php_mysql.dll ;extension=php_mysqli.dll ;extension=php_oci8.dll ;extension=php_openssl.dll ;extension=php_oracle.dll ;extension=php_pgsql.dll ;extension=php_shmop.dll ;extension=php_snmp.dll ;extension=php_sockets.dll ;extension=php_sybase_ct.dll ;extension=php_tidy.dll ;extension=php_xmlrpc.dll ;extension=php_xsl.dll e se você for usar a extensao exif extension=php_exif.dll recorte o extension=php_mbstring.dll e deixe ele antes da extensao extension=php_exif.dll senao nao funcionara o exif exemplo: se for o php.ini atual ele ja vem corrigido #Linha 627 <span style='color:DarkBlue'>SMTP = localhost</span> coloque o seu smtp valido exemplo smtp.terra.com.br #Linha 631 <span style='color:DarkBlue'>;sendmail_from = me@example.com</span> coloque o seu email #Linha 888 <span style='color:DarkBlue'>;session.save_path = "/tmp"</span> coloque o path onde sera salvo as temp do session exemplo c:/windows/temp bom é isso ai ate o proximo Compartilhar este post Link para o post Compartilhar em outros sites
luis-restart 0 Denunciar post Postado Setembro 2, 2005 Boa materia master, =Dacrescentou muitas coisas que eu nao sabia || nao tinha certeza. Estava lendo no php.net e achei o ini_set um tanto quanto prejudical em alguns pontos para o servidor que quer deixar uma configuracao apenas e pensa estar protegido, mas deixa isso pra falar no msn neh,[]sObs: Esse artigo dá de 10 a 0 naquele otro daquele carinha que a gente viw hehehe... luis fernando Compartilhar este post Link para o post Compartilhar em outros sites
Castor Jr. 0 Denunciar post Postado Setembro 3, 2005 Não presciso nem falar quem foi que postou ... parabens pelo post eu não sabia do lance da extension=php_mbstring.dll ser antes da extension=php_exif.dll, como sempre aprendendo com vcs.um abraço. Compartilhar este post Link para o post Compartilhar em outros sites
claudio_ts_ma 0 Denunciar post Postado Setembro 29, 2005 Mesmo que eu tenha tirado o comentario da linha do modulo do mysql, no php.ini ,ele continua dizendo que o php nao identifica as funçoes de acesso ao banco, o que poderia ser agora? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 29, 2005 você precisa copiar libmysql.dll pra pasta bin do apache Compartilhar este post Link para o post Compartilhar em outros sites
zando 0 Denunciar post Postado Novembro 28, 2005 Colegas, Estou precisando de uma pequena ajuda! Gostaria de colocar em meu site um sistema no qual precisa de algumas configurações. Acho que tenho que alterar o php.ini... como faço? O php.ini fica onde? O erro que está dando na instalação se encontra no seguinte endereço: http://projetos.webzan.com.br/install/index.php Desde já agradeço as respostas. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 28, 2005 nem tudo pra configuirar via script depende do que seja só editando o php.ini diretamente PHP_INI_USER = A entrada pode ser definida em scripts do usuário PHP_INI_PERDIR = A entrada pode ser definida em php.ini, .htaccess ou httpd.conf PHP_INI_SYSTEM = A entrada pode ser definida em php.ini ou httpd.conf PHP_INI_ALL = A entrada pode ser definida em qualquer lugar http://br2.php.net/manual/pt_BR/function.ini-set.php Compartilhar este post Link para o post Compartilhar em outros sites
zando 0 Denunciar post Postado Novembro 28, 2005 Não sei o que pode ser?Pode me ajudar?O que tenho que mudar pra conseguir instalar corretamente?Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 28, 2005 você tem acesso ao servidor ? nao entendi direito, o que você quer fazer? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 29, 2005 obrigado = ) Compartilhar este post Link para o post Compartilhar em outros sites
[ GuTo ] 0 Denunciar post Postado Março 14, 2006 o que é o mysqli ? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Março 15, 2006 Opa Guto o PHP para acompanhar as novas funções que foram implementadas depois da versao 4.1 em diante do mysql ele criou a função mysqli para alem de atender o mysql mais novos aproveitou e incrementou um monte de melhorias e usando metodos e classes mais definidas e funcionais um exemplo foi a eliminação da função "mysql_select_db", porque na verdade isso era uma gambiarra das feias nenhuma outra linguaguem faz assim, para conectar num banco de dados sempre se usou a string completa com nome, senha, servidor e nome do banco tudo junto, mas do jeito do php que usava nao fazia sentido algum, mas fora isso a classe mysqli tem muitos recursos e vantagens de uso e só lembrando só funciona com php5 e mysql acima do 4.1.x obs: e para manter compatibilidade ele manteve as outras funções antigas (mysql_) e criou a nova mysqli_ http://www.php.net/mysqli Compartilhar este post Link para o post Compartilhar em outros sites
[ GuTo ] 0 Denunciar post Postado Março 15, 2006 Ahhh :DValeu Fabyo! ;) Compartilhar este post Link para o post Compartilhar em outros sites
_rapper_x_ 0 Denunciar post Postado Abril 11, 2006 Valew aew tb não sabia! Compartilhar este post Link para o post Compartilhar em outros sites
Feliperc 0 Denunciar post Postado Maio 2, 2006 Utilizo servidor em casa para fazer testes das minhas páginas PHP.Nesse "servidor" de teste é plataforma Windows, para isso então terei que utilizar um servidor SMTP para Windows caso eu queira testar a função mail?Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Maio 4, 2006 se você tiver uma conta de email pode usar o smtp dela Compartilhar este post Link para o post Compartilhar em outros sites
Sergio de Andrade 0 Denunciar post Postado Maio 31, 2006 Caro Fabio, estou programando php em ambiente Linux, quando eu erro uma simples ";" o código não está sendo debugado, ou seja, fica dificil trabalhar assim, tem alguma coisa que eu possa configurar no php.ini para o código ser debugado quando eu rodar o programa ??? att Zaptool se você tiver uma conta de email pode usar o smtp dela Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Junho 1, 2006 Só prestar atenção no proprio topico #Linha 299 display_errors = On se tiver off deixe display_errors = On para programar Isto determina quando os erros devem ser mostrados como parte da saída ou se devem ser escondidos do usuário. Nota: Isto serve para suportar o seu desenvolvimento e nunca deve ser usado em sistemas de produção (ex. sistemas conectados a internet). Compartilhar este post Link para o post Compartilhar em outros sites
Ianaconi 0 Denunciar post Postado Junho 2, 2006 ótimo tutorial! Compartilhar este post Link para o post Compartilhar em outros sites
Recoder 0 Denunciar post Postado Setembro 6, 2006 Talvez aqui não seja o melhor lugar para esta dúvida.Estou usando o Apache em meu Windows XP instalado exatamente como explica este tutorial e um outro acerca do próprio Apache no site do ScriptBrasil.O problema é ao instalar um script que possuo aqui ele segue tudo ok, instala e configura o Banco de Dados, configura os endereços e tal. Mas quando vou acessar ele abre normalmente a tela principal (frontend), mas na tela para a Administração (backend) ele pede o Login só que ao confirmar os dados e clicar em logar, ele apenas faz um refresh na tela e não entra de jeito nenhum.Enviei o script pro meu website, em uma pasta separada, executei a instalação e ao completar tentei entrar na Administração, que, para meu espanto acessou normalmente.Conclusão: Talvez eu até esteja errado, mas acredito que seja realmente as configurações do servidor, pois o mesmo problema já ocorreu em outros 2 scripts.Poderia me dar uma luz do que talvez possa ser, ainda não estou muito familiar com as configurações de servidor. Compartilhar este post Link para o post Compartilhar em outros sites