TrOliveira

Programação PHP/Delphi, Banco de dados, VoIP e tudo mais relacionado a tecnologia.

Laravel – executando método do controller via php artisan tinker — setembro 10, 2018

Laravel – executando método do controller via php artisan tinker

Se voce precisa executar um método pertencente a um controller, via linha de comando (php artisan tinker), utilize os seguintes comandos:


php artisan tinker

$controller = app()->make('App\Http\Controllers\MeuController');

app()->call([$controller, 'meuMetodo'], [array de argumentos]);

No array de argumentos, passe um conjunto de parâmetros que seu método recebe.

PostgreSQL – Retirando milisegundos (microsegundos) de campo do tipo time — agosto 18, 2018
PHP – Convertendo um objeto em JSON — julho 21, 2018

PHP – Convertendo um objeto em JSON

A partir do PHP 5.4, existe uma interface chamada JsonSerializable que facilita na hora de exportarmos nossos objetos para JSON.
Para isto, devemos declarar nossa classe implementando a interface JsonSerializable, e depois definir um método público jsonSerialize().

Tomando como exemplo um objeto do tipo casa, como no exemplo abaixo:

Class Casa implements JsonSerializable {
    
    private $qtdeQuartos;
    pritave $qtdeBanheiros;

    public class __constructor($qtdeQuartos, $qtdeBanheiros) {
			$this->qtdeQuartos = $qtdeQuartos;
			$this->qtdeBanheiros = $qtdeBanheiros;
	}
	
	public function getQtdeQuartos()
	{
		return $this->qtdeQuartos;
	}
	
	public function getQtdeQuartos()
	{
	return $this->qtdeBanheiros;
	}	
	
	/**
	  Aqui você dirá como o seu objeto exportará as informações em JSON
	*/
	public function jsonSerialize()
    {
        return
            [
                'quartos'   => $this->qtdeQuartos(),
                'banheiros' => $this->qtdeBanheiros()
            ]; 
    }
}

Algo que facilita a exportaçao das propriedades sem precisar ficar setando uma a uma, é alterar o método jsonSerialize para o código abaixo:

	public function jsonSerialize()
    {
        $arrReturn = array();
        # varre todas as propriedades do objeto
        foreach($this as $key => $value) {
            $arrReturn[$key] = $value;
        }
        return $arrReturn;
    }

Assim, todas as propriedades serão exportadas.

Agora é só usar


$minhaCasa = new Casa(1, 3);

$saida_json = json_encode($minhaCasa);

print($saida_json);

Caso você esteja utilizando algum tipo específico, que não possui forma de conversão, como o ArrayCollection do Doctrine, você poderá utilizar o método próprio de convesão de arrays, alterando o método jsonSerialize como no exemplo abaixo:

	public function jsonSerialize()
    {
        $arrReturn = array();
        # varre todas as propriedades do objeto
        foreach($this as $key =>; $value) {
            $arrReturn[$key] = $value;
			# se for ArrayColletion, chama método próprio de conversão de array
			 if($value instanceof \Doctrine\Common\Collections\ArrayCollection) {
                $arrReturn[$key] = $value->toArray();
            }
        }
        return $arrReturn;
    }

Espero que este post seja útil à alguém.

Executando blocos de código anônimos — julho 15, 2018

Executando blocos de código anônimos

Muitas vezes se faz necessário a execução manual de um bloco de código dentro do postgres, referenciando outros registros ou condição, para alguma manutenção de dados ou mesmo extração dos mesmos.

Abaixo um exemplo de execução de bloco anônimo.


-- inicio do codigo
DO $$DECLARE r record;
BEGIN
-- executa um laço de repetição, a cada registro retornado pelo select abaixo. Armazena o registro no ponteiro r
FOR r IN SELECT codigo FROM tabela b
-- WHERE condicao = 'X'
LOOP
-- executa uma instrução qualquer, e usa os dados armazenados no ponteiro
insert into tabela_b (codigo, registro_tabela_a) values (1, r.codigo)

END LOOP;
END$$;

 

Setando variáveis no Apache (Ubuntu Server) — março 27, 2017

Setando variáveis no Apache (Ubuntu Server)

As boas práticas da programação web definem que uma medida segura para armazenar o usuário e senha de conexão com banco de dados seria nas variáveis de ambiente, ou environment variables, pois caso seu servidor web for comprometido, e seus arquivos fonte servidos como texto puro, o atacante não teria acesso a senha de conexão.
No ubuntu server uma forma prática e rápida de setar estas configurações para todos os usuários é inseri-las dentro do arquivo /etc/apache/envvars, no formato:

export nome_da_variavel=Conteudo_da_variável

Após alterar o arquivo realize um restart no apache, com o comando /etc/inid.d/apache2 restart

E se você utiliza PHP, e necessita recuperar o valor desta variável de ambiente, utiliza o comando

getenv(‘nome_da_variavel’);

Espero que este post rápido seja útil.

PostgreSQL – Conceder GRANT (privilégios) em todas as tabelas para um novo usuário — setembro 15, 2016

PostgreSQL – Conceder GRANT (privilégios) em todas as tabelas para um novo usuário

Algumas vezes temos a necessidade de conceder privilégios para todas as tabelas para um novo usuário na base Postgres, e para facilitar nossa vida existe um comando muito simples:

GRANT SELECT,INSERT, UPDATE, DELETE  ON ALL TABLES IN SCHEMA public TO NomeDoUsuario;

 

Em servidores Postgres mais antigos, você pode gerar a instrução SQL a partir de um select, utilizando o comando:

select ‘GRANT SELECT, INSERT, UPDATE, DELETE ON ‘ || tablename || ‘ TO NomeDoSeuUsuario;’  from pg_tables where schemaname = ‘public’;

Não esqueça de substituir NomeDoSeuUsuario pelo usuário que você criou e deseja conceder o privilégio.

Permissão para Sequences:

GRANT SELECT ON ALL SEQUENCES IN SCHEMA schema_name TO role_name

 

Se estiver utilizando o PGAdmin, copie o resultado retornado e cole em nova tela  query execute. Rode o comando e as permissões serão concedidas imediatamente.

 

Caso queira remover os provilégios para as tabelas, execute a seguinte instrução:

select ‘REVOKE ALL ON ‘ || schemaname || ‘.’ || tablename || ‘ FROM NomeDoSeuUsuario;’   from pg_tables where schemaname = ‘public’;

Remover privilégios nas sequences:

REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM NomeDoSeuUsuario;

 

Descobrir o nr. do NIT/PIS pela Internet — maio 19, 2010

Descobrir o nr. do NIT/PIS pela Internet

Seguindo a dica do site que citarei abaixo, consegui descobrir o NIT de uma pessoa seguindo os passos abaixo:

1) Entrei neste site: http://www1.dataprev.gov.br/cadint/sp2cgi.exe?sp2application=cadint

2) Preenchi os seguintes dados como se fosse cadastrar a pessoa:

  • Nome
  • Data de nascimento
  • Nome damãe completo
  • CPF
  • Dígito (do CPF)

3) Cliquei em Cadastrar e já apareceu que a pessoa já tinha inscrição e me forneceu o nr. do NIT. Simples assim

Fonte:http://www.leonardomarques.net/site/como-descobrir-seu-pis-pasep-nit.html

Extraindo imagens de documentos do Word — maio 13, 2010

Extraindo imagens de documentos do Word

Algumas vezes precisamos extrair alguma figura ou logomarca de um documento do Microsoft Word para utilizá-los em outro local. A solução para isso é muito simples.

1) Faça uma cópia do seu arquivo .doc ou docx.
2) Renomeie a cópia para extensão .zip (exemplo: arquivo.zip)
3) Clique com o botão direito encima do arquivo e peça para o Winzip (ou Winrar) extrair para…
4) Entre na pasta extraida pelo winzip. Dentro desta pasta existirá uma outra pasta com nome “word”. Entre nela e aparecerá a pasta “media”. Dentro desta pasta estará todas as imagens constantes no arquivo.

Simples assim.

OBS: [em 13/07/2010] Se o seu arquivo estiver em formato .DOC, então deve-se abrir o documento no word, mandá-lo salvar como DOCX e daí sim renomear o arquivo.docx para arquivo.zip. Caso você esteja utilizando uma versão anterior ao Word 2007 existe um pacote de compatibilidade da própria Microsoft, que possibilita a gravação de um arquivo no formato DOCX. Maiores detalhes: http://office.microsoft.com/pt-br/word-help/abrir-um-documento-do-word-2007-em-uma-versao-mais-antiga-do-word-HA010044473.aspx

Espero que este post seja útil.

Arrumar problema MySQL / Ubuntu – Access denied for user ‘debian-sys-maint’@’localhost’ — janeiro 26, 2010

Arrumar problema MySQL / Ubuntu – Access denied for user ‘debian-sys-maint’@’localhost’

Atualizei um server de Debian para versão 8.04 do Ubuntu. Depois que restaurei o backup no Ubuntu, comecei a notar que direto dava erro de corrupção de tabelas no sistema. Achei muito estranho pois nunca tive este tipo de problema.

Vi também que quando restartava a máquna aparecia a seguinte mensagem de erro:
/usr/bin/mysqlcheck: Got error: 1045: Access denied for user 'debian-sys-maint'@'localhost' (using password: YES) when trying to connect

Conversando com meu amigo Marrrrcelo (www.qos.net.br) descobri que tinha algo com o usuário do Ubuntu que faz a “manutenção” no server MySQL, chamado debian-sys-maint.

Procurando na internet achei a solução para este problema. Simples e direta:

1) Verificar o conteúdo do arquivo /etc/mysql/debian.cnf

sudo cat /etc/mysql/debian.cnf

[client]
host = localhost
user = debian-sys-maint
password = wpouSFhcW8XcpUXw
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = wpouSFhcW8XcpUXw
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Note que a senha para o usuário debian-sys-maint é wpouSFhcW8XcpUXw.

2) Conecte ao seu servidor MySQL:
mysql -u root -pSENHA

3) Execute o seguinte comando no console do MySQL:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'wpouSFhcW8XcpUXw';

4) Execute um mysql restart:
sudo /etc/init.d/mysql restart

E pronto, problema resolvido. Espero que este artigo ajude alguém.

Fonte: http://tiagoafg.blogspot.com/2009/01/mysql-access-denied-for-user-debian-sys.html

Excluindo arquivos antigos no Linux — outubro 15, 2009