Jump to content

Diogo Camargo

Members
  • Content count

    89
  • Joined

  • Last visited

  • Days Won

    3

Diogo Camargo last won the day on October 31 2014

Diogo Camargo had the most liked content!

Community Reputation

18 Levemente Bom

2 Followers

About Diogo Camargo

  1. Diogo Camargo

    Extends OOP

    Uma classe para conexão não deve conhecer qual é o banco e nem mesmo suas configurações Você precisa de uma interface. Podem existir muitas classes de conexão, mas para serem responsaveis por bancos diferentes e apenas uma interface para ser utilizada por estas classes. Exemplo: Interface AbstractConnectorConfig __construct($host, $user, $password [,...] Abstração de bancos de dados: MySqlConnector extends AbstractConnectorConfig PostgreSQLConnector extends AbstractConnectorConfig
  2. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    Vou olhar, obrigado Dedas.
  3. Diogo Camargo

    Limpar parte da URL

    <?php $parse = parse_url('http://www.site.com.br/novo/includes/valorCalculo.php? imovel=1176&dataEntrada=19-01-2015&dataSaida=02-02-2015&..........', PHP_URL_QUERY); $parse_str = parse_str($parse, $result); $url = 'http://www.site.com.br/novo/includes/valorCalculo.php?imovel=' . $parse_str['imovel'];
  4. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    Ir para VPS apenas no caso de crescimento a longo prazo, do contrário será dor de cabeça. No meu caso prefiro esperar e ir direto para um dedicado. A HG tem um plano dedicado de R$ 450 Intel Xeon Dual Core, 2.3GHz (4 threads) 500 GB RAID-1 Disco Rígido 4 GB de Memória DDR3 100 Mbps Uplink 10 TB de Tráfego Mensal 2 IPs Dedicados cPanel Gratuito Eu compraria este.
  5. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    Uso apenas cache de arquivo, eu pensei na classe mais objetiva e rápida que eu poderia desenvolver para tratar o cache de arquivo, por que isso? Por que não tenho dinheiro para pagar 500 paus por mês em um dedicado. Um sistema de cache pode ser feito com Factory Method ou com Abstract Factory, fiz esta classe abaixo para tratar exclusivamente de cache de arquivo. <?php namespace [NameSpace ocutado]; use SplFileInfo; use RuntimeException; use UnexpectedValueException; use [NameSpace ocutado]\[Vendor ocutado]; class Cacher { private $path; private $filename; private $content = ''; private $ttl = 10; private $file = ''; private $ext = 'php'; private $defaultTimezone = false; private $fileinfo = false; private $silentErrors = false; const STRING_DATA = 1; const ARRAY_DATA = 2; const OBJECT_DATA = 3; const SERIALIZED_DATA = 4; const UNDEFINED_DATA = 5; const INVALID_DATA = -1; public function __construct($path = '', $filename = '', $content = '') { $this->setPath($path); $this->filename($filename); $this->addContent($content); $this->ttl($this->ttl); $this->defaultTimezone = date_default_timezone_get(); // Setar o timezone para UTC if ($this->defaultTimezone != 'UTC') { date_default_timezone_set('UTC'); } } public function addContent($content) { $this->content = $content; } public function setFileInfo() { $this->file = rtrim($this->path, '/') . '/' . $this->filename . '.' . $this->ext; $this->fileinfo = new SplFileInfo($this->file); // O arquivo ainda não existe, será criado um novo if (!$this->fileinfo->isFile()) { return false; } $this->file = $this->fileinfo->getRealPath(); // impede que o conteúdo seja exibido e força o update do cache sem remover o arquivo if ($this->expired()) { return false; } return $this->fileinfo; } public function exists() { return $this->fileinfo->isFile(); } public function ready() { return $this->setFileInfo(); } public function filename($filename = null) { if ($filename === null) { return $this->filename; } $this->filename = $filename; } public function ext($ext) { $this->ext = $ext; } public function setPath($path) { $this->path = $path; } public function ttl($ttl) { if ($this->ttl === 0) { $this->ttl = 0; return; } $this->ttl = ($ttl*60); } public function start() { ob_start(); } public function isSerialized() { if (!is_string($this->content)) { return false; } $this->content = trim($this->content); $lastchr = substr($this->content, -1); if ($this->content === 'b:0;') { return true; } elseif (strlen($this->content) < 4) { return false; } elseif (':' !== $this->content[1]) { return false; } elseif (';' !== $lastchr && '}' !== $lastchr) { return false; } return true; } public function end() { $this->addContent(ob_get_contents()); } public function flush() { ob_end_flush(); flush(); } public function expired() { if (!$this->ttl) { return false; } return (($this->fileinfo->getMTime() + $this->ttl) < time()); } public function checkFileInfo() { return ($this->fileinfo instanceof SplFileInfo); } public function remove() { if (!$this->ready()) { throw new RuntimeException('<strong>Cache error:</strong> O arquivo não está pronto!'); } return $this->delete(); } public function delete() { return @unlink($this->file); } public static function minify($content) { $search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/\s{2,}/s'); $replace = array('>', '<', ' '); return preg_replace($search, $replace, $content); } public function compress() { $this->content = static::minify($this->content); } public function prepare($datatype) { if ($datatype) { if ($datatype === self::UNDEFINED_DATA) { $datatype = $this->getDataType(); } switch ($datatype) { case self::ARRAY_DATA: case self::OBJECT_DATA: $this->content = serialize($this->content); break; case self::SERIALIZED_DATA: $this->content = unserialize($this->content); break; } } } public function getDataType() { if (is_array($this->content)) { return Cacher::ARRAY_DATA; } elseif ($this->isSerialized()) { return Cacher::SERIALIZED_DATA; } elseif (is_string($this->content)) { return Cacher::STRING_DATA; } else { return 0; } } public function store($datatype = self::STRING_DATA) { $this->prepare($datatype); [Vendor ocutado]::fileput($this->content, $this->file); return $this->content; } public function get($datatype = 0) { if (!$content = [Vendor ocutado]::fileget($this->file)) { return false; } $this->addContent($content); $this->prepare($datatype); return $this->content; } public function import($stop = true) { include $this->file; if ($stop) { exit; } } public function __destruct() { if ($this->defaultTimezone !== false) { if ($this->defaultTimezone != 'UTC') { date_default_timezone_set($this->defaultTimezone); } } } }
  6. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    @Williams Tudo bem, nem esquenta, sobre a Amazon, eu gosto muito, mas não sei porque, sempre fico com medo de ir para empresas que não trabalham com o "The Planet". Eles estão nessa brincadeira de servidores dedicados a muitos anos, me sinto mais confortável para contratar um plano dedicado juntamente com empresas que trabalham com o the planet.
  7. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    Fiquei decepcionado com sua forma de colocar. Eu iria perguntar quem é vc, mas, para ser mais educado, prefiro editar o post e dizer que um fórum vazio não serve pra nada.
  8. Diogo Camargo

    SET click em DIV

    O que faz um vídeo do YouTube carregar automaticamente é o parâmetro autoplay=1 Ao clicar na imagem do vídeo, você pode usar jQuery para substituir. <a href="#" class="replaceVideoImage" data-video-id="{VIDEO_ID}"> <!-- default, hqdefault, mqdefault --> <img src="http://img.youtube.com/vi/{VIDEO_ID}/hqdefault.jpg" class="videoImage videoImage{VIDEO_ID}" /> </a> <script> // Exemplo $('body').on('click', '.replaceVideoImage', function(e) { var id = $(this).data('video-id'); $('.videoImage' + id).replaceWith('<iframe src="//www.youtube.com/embed/'+ id +'?autoplay=1"></iframe>'); e.preventDefault(); }); </script>
  9. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    @ExtremsX Na verdade minha preocupação não é o banco de dados, ela tende para próprio PHP em si. O grande problema real é quando você tem iterar muitos resultados e no PHP 5.3 isso ainda é um problema que pode ser agora contornado com generators, mas ficar reiterando resultados o tempo todo ninguém quer, por isso um cache de página. No meu caso, meu sistema está tendo que atualizar o cache muitas vezes que faz com que teremos agora dois problemas, o cache atualizando e salvando e os iterators.
  10. Diogo Camargo

    Quando a atualização do cache se torna o problema?

    No caso do WordPress, o post dificilmente é modificado, com isso, é vantajoso, no meu caso estou com muitas atualizações, updates/deletes/inserts em intervalos curtos, tornando o uso do cache por si só um problema. Quanto a outras opções de cache, como disse anteriormente, não é possível em servidores compartilhados. Uma boa solução seria Cassandra (DB), mesmo sendo mais rápido para consultas do que para outros, mas novamente é complicado por conta dos hosts.
  11. Como vai pessoal. Sempre uso cache do tipo file por conta de host compartilhado que não da suporte para outros, eu uso cache em dois níveis, um para DB, esse oferece uma interface para substituir completamente o banco no caso de consulta e as vezes update, o outro nível é o cache de página para cache do nível da view para baixo, mas deixei rodar um controller global e models no topo da chamada do servidor sem cache, o cache de página afeta apenas as ações das views. Chegou uma hora que as ações ler/atualizar do cache de página estava consumindo mais do que se eu deixasse rodar o PHP puro e apenas com o cache do banco. O que vocês acham de remover e deixar apenas o do banco?
  12. Diogo Camargo

    menu fixed na esquerda e conteudo float left?

    Uma dica é evitar esses nomes de classes/id como left, right, top, bottom imagine se em algum momento você quiser que o está na esquerda fique a direita Adicione "position relative" left 305px e quando fechar adicione um atributo style com left:0
  13. Diogo Camargo

    Como proteger $variável contra "require" externo?

    Ainda é cedo para usar password_hash quase todos os hosts compartilhados ainda estão no PHP 5.3, o exemplo acima é compatível, ou seja, password_hash da suporte para crypt, deixando-nos aliviados em continuar usando crypt até que estejamos seguros de que o PHP 5.5 está em uso geral.
  14. Diogo Camargo

    Como proteger $variável contra "require" externo?

    MD5 não foi criado para criptografia $password = '123'; $salt_length = 16; $salt_prefix = '2a'; /** * Proteção contra milhões de tentativas */ $cost = '08'; $salt = strtr( base64_encode( mcrypt_create_iv($salt_length, MCRYPT_DEV_URANDOM) ), '+', '.'); $salt = str_replace('=', null, $salt); $hash = crypt($password, '$'. $salt_prefix .'$' . $cost . '$' . $salt . '$'); Salve $hash em um banco de dados ou como vc não sabe trabalhar com bancos, faça um teste salvando até mesmo neste seu arquivo senha.php Para testar é muito simples if (crypt($password, $hash) == $hash) { // Senha correta }
  15. Diogo Camargo

    Como proteger $variável contra "require" externo?

    É também uma questão de "inteligência" saber que o PHP é executado no servidor, por isso, é impossível ver variáveis no navegador. Não é o armazenamento o problema e sim a criptografia php.net/crypt
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.