Jump to content
Fórum Script Brasil

Search the Community

Showing results for tags 'wordpress'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Programação & Desenvolvimento
    • ASP
    • PHP
    • .NET
    • Java
    • C, C++
    • Delphi, Kylix
    • Lógica de Programação
    • Mobile
    • Visual Basic
    • Outras Linguagens de Programação
  • WEB
    • HTML, XHTML, CSS
    • Ajax, JavaScript, XML, DOM
    • Editores
  • Arte & Design
    • Corel Draw
    • Fireworks
    • Flash & ActionScript
    • Photoshop
    • Outros Programas de Arte e Design
  • Sistemas Operacionais
    • Microsoft Windows
    • GNU/Linux
    • Outros Sistemas Operacionais
  • Softwares, Hardwares e Redes
    • Microsoft Office
    • Softwares Livres
    • Outros Softwares
    • Hardware
    • Redes
  • Banco de Dados
    • Access
    • MySQL
    • PostgreSQL
    • SQL Server
    • Demais Bancos
  • Segurança e Malwares
    • Segurança
    • Remoção De Malwares
  • Empregos
    • Vagas Efetivas
    • Vagas para Estágios
    • Oportunidades para Freelances
  • Negócios & Oportunidades
    • Classificados & Serviços
    • Eventos
  • Geral
    • Avaliações de Trabalhos
    • Links
    • Outros Assuntos
    • Entretenimento
  • Script Brasil
    • Novidades e Anúncios Script Brasil
    • Mercado Livre / Mercado Sócios
    • Sugestões e Críticas
    • Apresentações

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. Em algumas consultas de trafego do site charlescorrea.com.br pelos buscadores bing e google, notei que várias visitas estão vindo do endereço http://charlescorrea.com.br/blog/roleta-online, http://charlescorrea.com.br/blog/poker-online, http://charlescorrea.com.br/blog/roulette-online, http://charlescorrea.com.br/blog/online-blackjack, http://charlescorrea.com.br/blog/no-deposit-bonus-casino achei um pouco estranho por não me recordava de ter criado uma pasta com o nome de online-blackjack, nisso ao acessar o endereço mencionado, é redirecionado para uma página onde contamos com diversos jogos de cassinos online. Fui correndo abrir o filezilla e procurar estes arquivos e exclui-los mas não é exibido em lugar algum estes. Não realize nenhuma publicação deste tipo ainda mais de cassinos em um domínio onde eu uso para trabalho. Lhes pergunto onde devo começar a busca para que seja eliminado esses redirecionamentos e apresentação dessas propagandas?
  2. Bom dia pessoal, Eu estou criando um projeto de um site e preciso definir qual o CMS irei utilizar. Já li várias matérias e artigos sobre o assunto, porém praticamente todos são unanimes em afirmar que o melhor CMS depende da necessidade do site. Sendo assim, gostaria da opinião de profissionais da área de desenvolvimento para CMSs. Trata-se de um site onde terei grande quantidade de artigos e os editores dos artigos estarão espalhados por diversas regiões (portanto preciso ter uma boa estrutura para a edição), porém preciso também de um grande apelo visual que possa ser totalmente customizado. O site também terá uma comunidade social (usuários deverão se cadastrar e trocar informações como em uma rede social) e teremos aplicativos que deverão rodar provavelmente em um webserver com plataforma microsoft. Agradeço muito quem puder opinar sobre o melhor CMS para este caso: Joomla, Drupal ou Wordpress? Muito obrigada, Luciana.
  3. Ola, Tudo bom? Gostaria de saber se alguém tem alguma ideia de como faco para deixar esses botoes de COMPRAR sempre ALINHADOS. Estou usando o Tema StoreFront, no WordPress. Em outros sites vi que normalmente os titulos quando excede um numero de caracteres (2 linhas), ele coloca os ' ... ' (tres pontinhos), que ai o titulo completo so ficaria visivel caso o cliente clicasse e fosse ver a pagina do produto. Esse botao de OFERTA, acho que vou ter que excluir ele de qualquer jeito pra se adequar melhor ao tema.
  4. Olá, Fiquei um bom tempo procurando no fórum algo relacionado, como não chequei 100% e já tiver uma pergunta com esse tema, gostaria que me indicassem o link por gentileza. Bom, sou novo no mundo do desenvolvimento e acabei encalhando em uma situação onde surgiu a necessidade de criar formulários dinâmicos dentro do Wordpress para, por exemplo, mostrar um calculo em tempo real ao combinar escolhas de dois campos Select, porém para fazer isso fiz em php com javascript, pois plugins de formulários com contact forms 7 são muito restritos a algo mais personalizado. Outra informação, costumo fazer tudo na minha máquina como servidor através do XAMPP. São dois formulários, o primeiro, de três campos, envia as informações para o segundo e armazena em inputs do tipo hidden, e também deveria enviar um email com esses três campos, como esse é simples, consigo usar o contact forms 7. O segundo, como já descrito, recebe os dados do primeiro e armazena cada informação dos três campos em três inputs do tipo hidden, ele posssui 4 campos, um input do tipo text e três select, para os dois últimos faz uma série de ifs em JS para testar 30 combinações para trazer um resultado dentro de um span. Por ser um formulário todo personalizado não consigo enviar email com esses dados com a mesma facilidade que o Contact Forms 7, utilizo o plugin WP Mail SMTP para configurar o SMTP do wordpress, e gostaria de usa-lo como ponte, se existir como fazer isso, para enviar os dados desse segundo formulário por email com uma mensagem personalizada. Usei o código abaixo, mas sem sucesso, tentei configurar o PHPMailer e também não rolou. Não sei o que faço para resolver esse problema. Quem puder me ajudar agradeço muito. Segue código que tentei usar. <?php $para = "seu-email@dominio.com.br"; $nome = $_POST['nome']; $assunto = $_POST['assunto']; $mensagem = "<strong>Nome: </strong>".$nome; $mensagem .= "<br> <strong>Mensagem: </strong>" .$_POST['mensagem']; $headers = "Content-Type:text/html; charset=UTF-8\n"; $headers .= "From: dominio.com.br<sistema@dominio.com.br>\n"; $headers .= "X-Sender: <sistema@dominio.com.br>\n"; $headers .= "X-Mailer: PHP v".phpversion()."\n"; $headers .= "X-IP: ".$_SERVER['REMOTE_ADDR']."\n"; $headers .= "Return-Path: <sistema@dominio.com.br>\n"; $headers .= "MIME-Version: 1.0\n"; mail($para, $assunto, $mensagem, $headers); ?>
  5. Oi O plugin BB Press do Wordpress não tem a opção do idioma Português... Mas deixa subir o xml do idioma, só que eu não sei como funciona e nem onde conseguir... Alguém sabe como? Agradeçoa aatenção
  6. Bom dia! Faz tempo que eu procuro mais não encontro um código CSS para mudar a cor do menu principal do meu site wordpress de acordo com a rolagem. Por exemplo, o código que eu tenho muda a cor do menu quando a pessoa rola a página para baixo e quando ela volta para cima ele fica na cor original. Porém o menu quando rolado fica somente com uma cor, eu precisaria que de acordo com a parte que a pessoa esta no site ele fique com uma cor diferente. Esse é o código que eu tenho: div#top-bar-wrap { display: none!important; } #header.elementor-sticky--effects { background-color: #000000d7; transition: all .5s ease; box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.1); } #header.elementor-sticky--effects .logo img { content:url('link da logo principal do site'); } #header.elementor-sticky--effects .menufixo li a { color: #fff!important; } #header.elementor-sticky--effects .menufixosecundario li a { color: #fff!important; } O que eu preciso é exatamente como nesse site: https://www.c6bank.com.br/ Reparem que o menu fixo muda de cor, de acordo com a parte que ele está no site. Desde já agradeço pela ajuda!
  7. Olá, eu estava mexendo em um Tema Wordpress, e no final do menu tem alguns ícones de social mídia que posso trocar selecionando em um biblioteca interna. Mas não tem o ícone do whatsapp para eu escolher Queria saber se tem alguma forma de trocar ícones assim no editor CSS colocando o Fontawesome no lugar por exemplo "<i class="fab fa-whatsapp"></i>" Obrigado!
  8. preciso de uma ajuda, tenho um site em wordpress como todos sabem em php e preciso que quando o usuario entre em uma pagina x peça senha, porém essa senha tem que ser a senha do adm ou seja de algum usuario que tenha função de adm tem como fazer isso? tipo quando o usuario digitar a senha ele verifica se essa senha é de algum adm e deixa entrar. OBS isso é para aparecer em algumas páginas apenas.
  9. Estou com uma dúvida e gostaria da ajuda de vocês. Vou descrever a situação para ajudar na resposta. Trabalho em um site que está há 10 anos no ar. O site é feito em Wordpress desde o início e hoje tem milhares de posts publicados. Em 2011, com 2 anos no ar, o site começou a apresentar problemas e ficar fora do ar. O pessoal da hospedagem disse que estava causando sobrecarga e que não teria como manter o site no servidor. Trocamos Temas, deixando o padrão do wp, desinstalamos plugins, reparamos banco, mas de nada adiantou. Trocamos então de servidor, mas perdemos tudo, tendo que começar o site do zero. Desde 2011 até o momento, passamos por instabilidades, mas o site se manteve no ar. Essa semana tivemos um problema mais sério e o site ficou fora do ar. A hospedagem informou que o site provocou sobrecarga, o que fez reviver a situação de 2011, quando perdemos tudo. Reparamos banco, excluímos plugins inativos, instalamos outros plugins de otimização e o site voltou ao ar, e está funcionando. Estamos agora para trocar o tema, depois de vários anos com o mesmo. E é aí que surge a dúvida que me trouxe até aqui. Vou deixar algumas opções, com o que entendo ser vantagens e desvantagens, para decidir qual devo seguir. Outras sugestões também são aceitas. Opção 1 Instalar o novo tema no mesmo site que já existe. Vantagem: é o jeito mais simples, pois apenas trocarei o tema. Desvantagem: Posso continuar tendo problemas, pois o banco é o mesmo, com milhares de posts e a sobrecarga pode continuar. Podemos perder todo o conteúdo como aconteceu anteriormente. Opção 2 Mover o site que está hoje no ar para uma pasta e instalar um novo do domínio principal. A estrutura ficaria assim: nossosite.com.br/antigo Assim, tudo que publicarmos daqui pra frente ficaria no site novo, no domínio principal. O conteúdo antigo permanece também, com acesso a pasta antigo. Criaremos links para direcionar par esse conteúdo antigo Vantagem: Começaremos um site novo, limpo, menos risco de perder o conteúdo. Desvantagens: Precisaremos fazer redirecionamento, para não perder ranking no Google. Curtidas que já tem nos posts serão perdidas, pois o endereço mudará. As buscas internas podem não localizar nos dois bancos. Opção 3 Criar um novo site, em uma pasta diferente. Redirecionar para o novo quando acessarem o domínio principal. A estrutura ficaria assim nossosite.com.br/novo No domínio principal ficaria o site antigo, sem publicarmos mais nada nele, mas mantendo tudo que já existe. Vantagem: site novo do zero, menor risco de perde o conteúdo. Tudo que já tem permanece como está, links, curtidas, etc. Desvantagem: URL ficará com a palavra ‘novo’, que não é muito amigável. Não tenho certeza que o antigo funcionará sem o index, já que usarei o index no domínio principal para direcionar para o novo.
  10. Como visualizo valor de poste, de meta_key de tabela? Tenho que recuperar um valor de um poste que esta em uma meta_key em uma tabela. Eu acho que para poder importa os valores da meta_key certos, tenho que importa pelo test_id que é o id, que esta na tabela. como faço isso? <?php global $wpdb; $id = get_the_ID(); $option5 = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM wp_table_test WHERE meta_key = 'test_options' AND test_id = '%d'", $id)); echo "Meta key value for post ID $id: $option5"; ?>
  11. Olá, gostaria de saber se alguém consegue me ajudar. Eu atualizando as informações do site de uma amiga, mas depois de retirar algumas página e mudar algumas coisas no site, ele ficou todo alinhado a esquerda Esse é o site www.carioca-languages.com
  12. Pessoal, tudo bem ? estou fazendo um site wordpress de campeonatos de futebol offline. Comprei um plugin de torneio e quando os usuários de cadastram em um torneio é gerado uma única tabela automática com todos os usuários. por exemplo se eu criar um torneio com 64 jogadores uma única tabela é criada com os 64 no mesmo grupo O problema é que preciso que esta tabela seja dividida em grupos vários grupos de 8 jogadores. alguém pode me ajudar
  13. Pessoal, boa tarde. Já trabalho há um tempo com WordPress, mas quase não mexi com a programação em si. Conheço bem pouco PHP. Preciso fazer um projeto e estou com dificuldades. Tenho um site em WordPress onde os usuários fazem cadastro normalmente como assinante para obter acesso à alguns conteúdos. Esse site é de um software onde há uma versão de teste e de estudantes. Gostaria de, ao o usuário se cadastrar, gerar uma key para ele. Essa key será o "serial" do programa e seria um número sequencial (1,2,3,4,5......). O programa é divido em código cliente e código máquina. O código cliente, no caso, seria o cliente teste (onde seria todos os testes solicitados) e o cliente estudante (todos usuários estudantes), e dentro desses dois clientes, seriam os usuários (código máquina). O que seria gerado, era o código máquina (key). Eu pensei em deixar o próprio ID do cadastro, mas eu também gostaria de, caso necessário, poder editar esse código máquina. Caso fosse editado, o próximo código iniciaria a partir do último cadastrado. Esses códigos terão validade (uma variável que, também quando necessário, pode ser alterada). Eu encontrei um plugin para isso. Se chama Software License Manager. Ele quase faz o que preciso. Mas para o key, ele utiliza o uniqid para gerar. Como eu disse, eu gostaria que fosse uma sequencia numérica simples, e que pudesse alterar. Mas também eu teria que cadastrar o usuário manualmente, mesmo depois dele cadastrar no site, pois são dois cadastros distintos. Tela: http://prntscr.com/j62h4y Eu não sei por onde começar. Alguém pode me ajudar?
  14. Olá pessoal, não consigo inserir script do PopAds no meu site Wordpress. Embora tenha seguido as orientações de colocar na head, tentei várias vezes sem sucesse. O PopAds diz não ter problema algum com o script deles. Já usei até o plugin scripts inserter e o resultado foi o mesmo. Agradeço a colaboração.
  15. Olá, estou tentando desenvolver uma plataforma para hospedar videoaulas. No caso essa plataforma seria paga, os videos seriam hospedados do Vimeo e tem que ter uma região para cadastrar. Pois bem, nesse ponto começam as dificuldades. Gostaria de saber se é possivel criar uma área de login de tal modo que não permitesse que uma mesma conta pudessse ser acessada por mais de um computador ao mesmo tempo. Seria algo análogo ao que ocorre com o netflix, o sistema não perimite você acessar sua conta caso ela estaja sendo usada em outro computador. Alguém pode me dar uma luz??
  16. Olá. Tenho uma loja virtual na plataforma Wordpress e plugin woocommerce. Meus fornecedores me enviavam um arquivo xml com todos os produtos disponiveis e valores, e eu gostaria de carregar todos os produtos em meu banco de dados somando a porcentagem do meu lucro. Consegui um plugin que me permite transferir os produtos do xml para minha loja, porém para alterar o preço preciso desenvolver uma função em PHP. Tenho pouquissimo conhecimento em PHP, mas vendo algumas dicas na internet consegui desenvolver o seguinte Codigo que está funcionando, porém quando o resultado dá por exemplo R$ 12,234 ele não fica R$ 12,23 e sim R$12.000,00, preciso de alguém que me auxilie nisso. Obrigado Codigo : <?php function valor($price) { echo $price+( $price * 0.50); } ?>
  17. Boa noite, Estou desenvolvendo um tema para wordpress e todas as imagens que coloco não carregam e/ou não são reconhecidas. Esta é a tag q estou usando: <img src="img/logo.png"/> Porem quando chamo imagens pelo arquivo style.css, com a o código background: url(img/logo.svg) center center/235px no-repeat; , elas carregam normalmente. Já testei com outros tipos de arquivos de imagens (jpeg, jpg, svg e gif) e continuam com o mesmo problema. Para testar o tema estou usando um servidor online gratuito
  18. Oi pessoal, Estou precisando criar uma pagina em um site WordPress que mostre todos os álbuns de uma conta Flickr. E que cada álbum abra dentro do próprio site. Essa pagina também precisa ser atualizada automaticamente quando a conta Flickr adicionar um novo álbum. Achei essa função funcionando neste site: http://www.escolasaberviver.com.br/site/galeria-de-fotos Nesse caso estão usando a API phpFlickr. Alguém pode me orientar como fazer isso ou indicar alguma ferramenta? Grato.
  19. Prezados Bom dia, fiz o download do meu site no wordpress através do plugin Duplicator, e estou fazendo as alterações localmente para depois duplicar de novo para web. Na página inicial contem 4 posts mais recentes em destaque, porém não consigo dividi-los em 2 colunas uma vez que seu conteudo é por meio de uma função que já vem pronta, ou do tema ou da empresa que montou o site, eu não entendi muito bem. CSS da div: .conteudo-home{ margin-top:30px;} .noticias{ width:440px; height:400px; position:relative; float: left;} .news{ width:440px; height:135px; margin-bottom:13px;} .news-img{ position:relative; float:left; width:240px; height:137px;} .news-txt{ width:305px; height:135px; position:relative; float:left;} .news-txt h2, .news-txt h2 a{ text-decoration:none; color:#000; font-size:16px; font-weight:bold; text-align:center; padding-top:px; font-family: 'Arial'; line-height: 1.5;} .news-txt p{ font-size:12px; line-height: 1.5; margin:11px 20px 10px 20px;} Código da pagina: <?php $recent = new WP_Query("showposts=4"); if ($recent->have_posts()) : $class = 0; //Variável para testar a contagem while ($recent->have_posts()) : $recent->the_post(); $class++; //Inclementa a variável $tipo = ($class > 1) ? "ultimos-posts" : "news-post1"; ?> <div class="news"> <div class="news-img"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a></div> <div class="news-txt <?php echo $tipo; ?>"><h2><a href="<?php the_permalink(); ?>"><?php title_limite(25); ?></a></h2> <p><?php the_excerpt(); ?></p></div></div> <?php endwhile; else: ?> <?php endif; ?>
  20. Olá, tenho um blog e não consigo de jeito nenhum centralizar o menu. Eu uso um tema pronto como base, então estou um pouco perdida nos códigos. O tema é responsivo, então não sei qual a classe do menu principal, que aparece nos desktops. Link do blog: http://frutacritica.com ;) Obrigada! ul.nav li.dropdown:hover > ul.dropdown-menu { display: block; margin: 0; padding: 0; border: 1px solid rgba(174, 174, 174, 0.12); border-radius: 0px; -webkit-box-shadow: none; box-shadow: none; } ul.nav li.dropdown ul.dropdown-menu li:hover ul.dropdown-menu{ margin-left: 100%; top: 0; } .blogx-navbar { background-color: transparent; border-color: transparent; } .navbar{ margin-bottom: 0 !important; } .navbar-nav li a { padding-top: 0px; padding-bottom: 0px; line-height: 20px; padding: 0; background-color: transparent; margin: 20px 20px; } .navbar-nav li:last-child a{ margin-right: 0; } .navbar-collapse{ padding-right: 0; } .navbar-nav .dropdown-menu li a{ padding: 10px 20px; margin: 0; } .navbar-default .navbar-nav .dropdown-menu li a:hover, .dropdown-menu li a:focus, .navbar-default .navbar-nav .dropdown-menu .active a{ background-color: #68c3a3; color: #fff; } .navbar-default .navbar-nav .active a, .navbar-default .navbar-nav .active a:hover, .navbar-default .navbar-nav .active a:focus { color: #68c3a3; background-color: transparent; } .navbar-default .navbar-nav li a:hover, .navbar-default .navbar-nav li a:focus{ color: #68c3a3; }
  21. Boa tarde, preciso de uma ajuda. Tenho a seguinte situação: Desenvolvi um site em MUSE mas utilizo alguns recursos do Wordpress, como os Posts e alguns outros Plugins, que aí incorporo a página feita no Adobe Muse no Wordpress, puxando o HEADER e o FOOTER do Wordpress. E puxo via <IFRAME> a página HTML feita no MUSE para um Template de Pág. novo no Wordpress. Estou usando o seguinte código para a página no Tema do Wordpress puxar a página em HTML: <?php /** * Template Name: Nome * */ get_header(); ?> <!-- #Content --> <div> <iframe name="Nome" src="NOME.html" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" width="100%" height="1400px"></iframe> </div> <?php get_footer(); Só que o problema meu é o seguinte. Como fiz o site para versão Mobile também, as alturas ficam diferentes da Normal para a Mobile. Ex: NORMAL: 1400px de altura; MOBILE preciso de no mín. 2000px de altura, pois os layouts ficaram com a altura diferente. E com este código que estou utilizando só consigo deixar para uma das versões OK, ou fica cortado ou fica muito maior na outra. Alguém tem uma solução para que a altura seja compatível com ambas as versões? Algo do tipo HEIGHT automático. Desde já, agradeço.
  22. Olá Membros do Fórum Script Brasil, Estou precisando desenvolver uma galeria de fotos e como não sei por onde começar, vim solicitar ajuda aos universitários (rsrs). Bem, preciso de uma galeria onde o usuário poderá aprovar aquela foto (Tipo Aquelas enquetes - Você Gostou Sim ou Não), e no final da galeria, todas as fotos que forem aprovadas, seja gerada um "relatório" listando-as. Exemplo: Uma galeria com 05 imagens, sendo que 3 foram aprovadas pelo usuário, no final em formato XLS apareça a listagem: Slide I Descrição__________ Slide 01 I Foto da Casa de João Slide 03 I Foto da Rua C Slide 05 I Foto da Lagoa Azul Pronto, este é o primeiro desafio. O Segundo é o seguinte, das fotos aprovadas o usuário poderá atribuir um valor a elas (Classificar por exemplo de 1 a 5 estrelas, mas com valores). Exemplo: Slide I Descrição__________ I Valor/Classificação Slide 01 I Foto da Casa de João I 05 Slide 03 I Foto da Rua C I 03 Slide 05 I Foto da Lagoa Azul I 04 TOTAL: I 12 Procurei por algo semelhante porém não achei, conto com a ajuda de vocês. Desde já agradeço.
  23. Boa tarde amigos. Estou com uma dúvida que esta tirando meu sono. Estou fazendo esse site em WP: http://romandiniarquitetura.hospedagemdesites.ws E estou tentando fazer esse efeito de menu: www.deboraaguiar.com.br Quando passa sobre o link, ele preenche. Não consigo alinhar isso no Estilo CSS. Alguém? Abraço.
  24. Eu cuido de dois sites, o http://www.acompanhantes31.com.br/ (para Belo Horizonte) e ohttp://www.acompanhantes11.com.br/ (para São Paulo). Os dois usam o mesmo tema. Embaixo do banner cada um deles tem três imagens redondas. O problema é que elas aparecem no site de São Paulo mas não no de Belo Horizonte. Eu mesmo fiz a configuração do tema, e fiz no site de São Paulo primeiro, ai depois que tudo lá funcionou, eu ia olhando nele e fazendo igual no site de Belo Horizonte, e funcionou bem, menos essas três imagens. Tem dias que tá assim. Eu já mudei várias vezes mas não resolveu. Também testei nos outros navegadores como o explorer e o firefox. Nada deu certo. As três imagens existem, estão lá, mas não aparecem no site. Alguém pode me ajudar com isso?
  25. Boa Noite sou novo nesse fórum, nem sei como começar mas vamos lá! Estou desenvolvendo um programa em VB.NET como autentificação no MySQL com MD5 funcionou na boa, mas que eu queria fazer é a autenticação no banco de dados MySQL que eu tenho de meus clientes no WordPress, as senhas são codificadas com Salt e outras coisas lá esquisitas que eu não conheço e nem sei fazer essa proeza. Sei que o PHPass.php é uma Classe e queria converter essa Classe para VB.NET para poder utilizar as codificações certas para autenticar e permitir acesso ao meu Software! Deixarei o Código em PHP da PHPass.php logo abaixo! Se precisarem de mais informações não exitem em perguntar! <?php /** * Portable PHP password hashing framework. * @package phpass * @since 2.5.0 * @version 0.3 / WordPress * @link http://www.openwall.com/phpass/ */ # # Written by Solar Designer <solar at openwall.com> in 2004-2006 and placed in # the public domain. Revised in subsequent years, still public domain. # # There's absolutely no warranty. # # Please be sure to update the Version line if you edit this file in any way. # It is suggested that you leave the main version number intact, but indicate # your project name (after the slash) and add your own revision information. # # Please do not change the "private" password hashing method implemented in # here, thereby making your hashes incompatible. However, if you must, please # change the hash type identifier (the "$P$") to something different. # # Obviously, since this code is in the public domain, the above are not # requirements (there can be none), but merely suggestions. # /** * Portable PHP password hashing framework. * * @package phpass * @version 0.3 / WordPress * @link http://www.openwall.com/phpass/ * @since 2.5.0 */ class PasswordHash { var $itoa64; var $iteration_count_log2; var $portable_hashes; var $random_state; /** * PHP5 constructor. */ function __construct( $iteration_count_log2, $portable_hashes ) { $this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31) $iteration_count_log2 = 8; $this->iteration_count_log2 = $iteration_count_log2; $this->portable_hashes = $portable_hashes; $this->random_state = microtime() . uniqid(rand(), TRUE); // removed getmypid() for compatibility reasons } /** * PHP4 constructor. */ public function PasswordHash( $iteration_count_log2, $portable_hashes ) { self::__construct( $iteration_count_log2, $portable_hashes ); } function get_random_bytes($count) { $output = ''; if ( @is_readable('/dev/urandom') && ($fh = @fopen('/dev/urandom', 'rb'))) { $output = fread($fh, $count); fclose($fh); } if (strlen($output) < $count) { $output = ''; for ($i = ; $i < $count; $i += 16) { $this->random_state = md5(microtime() . $this->random_state); $output .= pack('H*', md5($this->random_state)); } $output = substr($output, , $count); } return $output; } function encode64($input, $count) { $output = ''; $i = ; do { $value = ord($input[$i++]); $output .= $this->itoa64[$value & 0x3f]; if ($i < $count) $value |= ord($input[$i]) << 8; $output .= $this->itoa64[($value >> 6) & 0x3f]; if ($i++ >= $count) break; if ($i < $count) $value |= ord($input[$i]) << 16; $output .= $this->itoa64[($value >> 12) & 0x3f]; if ($i++ >= $count) break; $output .= $this->itoa64[($value >> 18) & 0x3f]; } while ($i < $count); return $output; } function gensalt_private($input) { $output = '$P$'; $output .= $this->itoa64[min($this->iteration_count_log2 + ((PHP_VERSION >= '5') ? 5 : 3), 30)]; $output .= $this->encode64($input, 6); return $output; } function crypt_private($password, $setting) { $output = '*0'; if (substr($setting, , 2) == $output) $output = '*1'; $id = substr($setting, , 3); # We use "$P$", phpBB3 uses "$H$" for the same thing if ($id != '$P$' && $id != '$H$') return $output; $count_log2 = strpos($this->itoa64, $setting[3]); if ($count_log2 < 7 || $count_log2 > 30) return $output; $count = 1 << $count_log2; $salt = substr($setting, 4, 8); if (strlen($salt) != 8) return $output; # We're kind of forced to use MD5 here since it's the only # cryptographic primitive available in all versions of PHP # currently in use. To implement our own low-level crypto # in PHP would result in much worse performance and # consequently in lower iteration counts and hashes that are # quicker to crack (by non-PHP code). if (PHP_VERSION >= '5') { $hash = md5($salt . $password, TRUE); do { $hash = md5($hash . $password, TRUE); } while (--$count); } else { $hash = pack('H*', md5($salt . $password)); do { $hash = pack('H*', md5($hash . $password)); } while (--$count); } $output = substr($setting, , 12); $output .= $this->encode64($hash, 16); return $output; } function gensalt_extended($input) { $count_log2 = min($this->iteration_count_log2 + 8, 24); # This should be odd to not reveal weak DES keys, and the # maximum valid value is (2**24 - 1) which is odd anyway. $count = (1 << $count_log2) - 1; $output = '_'; $output .= $this->itoa64[$count & 0x3f]; $output .= $this->itoa64[($count >> 6) & 0x3f]; $output .= $this->itoa64[($count >> 12) & 0x3f]; $output .= $this->itoa64[($count >> 18) & 0x3f]; $output .= $this->encode64($input, 3); return $output; } function gensalt_blowfish($input) { # This one needs to use a different order of characters and a # different encoding scheme from the one in encode64() above. # We care because the last character in our encoded string will # only represent 2 bits. While two known implementations of # bcrypt will happily accept and correct a salt string which # has the 4 unused bits set to non-zero, we do not want to take # chances and we also do not want to waste an additional byte # of entropy. $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $output = '$2a$'; $output .= chr(ord('0') + $this->iteration_count_log2 / 10); $output .= chr(ord('0') + $this->iteration_count_log2 % 10); $output .= '$'; $i = ; do { $c1 = ord($input[$i++]); $output .= $itoa64[$c1 >> 2]; $c1 = ($c1 & 0x03) << 4; if ($i >= 16) { $output .= $itoa64[$c1]; break; } $c2 = ord($input[$i++]); $c1 |= $c2 >> 4; $output .= $itoa64[$c1]; $c1 = ($c2 & 0x0f) << 2; $c2 = ord($input[$i++]); $c1 |= $c2 >> 6; $output .= $itoa64[$c1]; $output .= $itoa64[$c2 & 0x3f]; } while (1); return $output; } function HashPassword($password) { if ( strlen( $password ) > 4096 ) { return '*'; } $random = ''; if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) { $random = $this->get_random_bytes(16); $hash = crypt($password, $this->gensalt_blowfish($random)); if (strlen($hash) == 60) return $hash; } if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) { if (strlen($random) < 3) $random = $this->get_random_bytes(3); $hash = crypt($password, $this->gensalt_extended($random)); if (strlen($hash) == 20) return $hash; } if (strlen($random) < 6) $random = $this->get_random_bytes(6); $hash = $this->crypt_private($password, $this->gensalt_private($random)); if (strlen($hash) == 34) return $hash; # Returning '*' on error is safe here, but would _not_ be safe # in a crypt(3)-like function used _both_ for generating new # hashes and for validating passwords against existing hashes. return '*'; } function CheckPassword($password, $stored_hash) { if ( strlen( $password ) > 4096 ) { return false; } $hash = $this->crypt_private($password, $stored_hash); if ($hash[] == '*') $hash = crypt($password, $stored_hash); return $hash === $stored_hash; } }
×
×
  • Create New...