:::: MENU ::::

Apple Magic Mouse – Conexão perdida (Lost Connection)

Você é usuário mac e vira e mexe aparece aquela mensagem: “Conexão perdida”, “Connection Lost”, informando que a conexão entre o mac e seu Magic Mouse foi perdida?

Aqui esta uma solução “gambiarresca” que vai mudar isso de uma forma simples e indolor.

Eu percebo que isso acontece principalmente com aquelas pilhas de segunda linha que são muito leves.
No meu caso por exemplo estou usando pilhas recarregáveis “MOX” :D .

Solução

  1. Remova as pilhas do Magic Mouse.
  2. Pegue um pequeno pedaço de papel (pode ser sulfite).
  3. Dobre-o algumas vezes (4x por exemplo).
  4. Coloque-o no Magic Mouse de forma que pegue as duas partes onde vão as pilhas.
  5. Coloque as pilhas por cima do papel.
  6. Pronto.

Aqui funcionou que foi uma pipa.


Automatizando <pre> no netbeans

Para nós que trabalhamos com php, muitas vezes quando vamos depurar algum código precisamos utilizar os comandos:

1
2
3
echo "<pre>";
print_r($array);
echo "</ pre>";

Digitar estes comandos demanda algum tempo!!! Certo???
Pois éh!!!

Vamos deixar esta parada mais fácil, sem precisar ficar criando classes a toa.

No Netbeans:
Ferramentas > Opções > Editor > Modelos de Código > Novo
Abreviação: pre
Texto exmpandido:

1
2
3
echo "<pre>";
print_r(${cursor});
echo "</ pre>";

Expandir modelo em: Shift + Espaço


No código digite: pre shift + espaço

E seja Feliz.


Calcular dia útil com PHP

Como saber qual o 5º dia útil do mês por exemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Abstract class Date {
	/**
	 * Informa qual é o dia útil do mês
	 * Ex.: Caso deseja saber qual é o 15º útil do mês
	 * @param int $iDia = dia
	 * @param int $iMes = Mês, se não informado pega o mês atual
	 * @param int $iAno = Ano, se não informado pega o ano atual
	 * @return int
	 */
	public static function getDiaUtil($iDia, $iMes = null, $iAno = null, $aDiasIgnorar = array()) {
		$iMes = empty($iMes) ? date('m') : $iMes;
		$iAno = empty($iAno) ? date('Y') : $iAno;
		$iUltimoDiaMes = date("t", mktime(0, 0, 0, $iMes, '01', $iAno));
 
		for ($i = 1; $i <= $iUltimoDiaMes; $i++) {
			$iDiaSemana = date('N', mktime(0, 0, 0, $iMes, $i, $iAno));
			//inclui apenas os dias úteis
			if ($iDiaSemana < 6) {
				$aDias[] = date('j', mktime(0, 0, 0, $iMes, $i, $iAno));
			}
		}
		//ignorando os feriados	
		if (sizeof($aDiasIgnorar) > 0) {
			foreach ($aDiasIgnorar as $iDia) {
				$iKey = array_search($iDia, $aDias);
				unset($aDias[$iKey]);
			}
		}
 
		if (isset($aDias[$iDia - 1])) {
			return $aDias[$iDia - 1];
		} else {
			//retorna o último dia útil
			return $aDias[count($aDias) - 1];
		}
	}	
}

Como eu uso isso?

1
echo Date::getDiaUtil(5, 3, 2015); //9

Caracteres especiais – UTF8 / ISO-8859-1

Eu migrei todos os meus arquivos de iso-8859-1 para utf-8 (padrão), entretanto, acabei descobrindo que no banco de dados haviam entrado caracteres especiais: û ÃŒ Ã© e por aí vai.

Uma forma que encontrei pra resolver este problema foi criar um replace no banco de dados para que os caracteres então volte para o formato correto.

ATENÇÃO: Aqui funcionou, mas teste muito, mas muito mesmo antes de realizar este procedimento no banco de dados.

1
2
3
4
5
6
7
8
9
10
<?php
/**
* Cria string de update de caracteres estranhos
*/
$aCaracteres = explode(',', 'ñ,ç,á,é,í,ó,ú,ä,ë,ï,ö,ü,à,è,ì,ò,ù,ã,õ,â,ê,î,ô,û,Ñ,Ç,Á,É,Í,Ó,Ú,Ä,Ë,Ï,Ö,Ü,À,È,Ì,Ò,Ù,Ã,Õ,Â,Ê,Î,Ô,Û');
foreach($aCaracteres as $sCaractere) {
	$encode = utf8_encode($sCaractere);
	$sql = "UPDATE tabela SET campo = REPLACE( campo, '{$encode}', '$sCaractere' );";
	echo "{$sql}\n";
}

Resultado

UPDATE tabela SET campo = REPLACE( campo, 'ñ', 'ñ' );
UPDATE tabela SET campo = REPLACE( campo, 'ç', 'ç' );
UPDATE tabela SET campo = REPLACE( campo, 'á', 'á' );
UPDATE tabela SET campo = REPLACE( campo, 'é', 'é' );
UPDATE tabela SET campo = REPLACE( campo, 'í', 'í' );
UPDATE tabela SET campo = REPLACE( campo, 'ó', 'ó' );
UPDATE tabela SET campo = REPLACE( campo, 'ú', 'ú' );
UPDATE tabela SET campo = REPLACE( campo, 'ä', 'ä' );
UPDATE tabela SET campo = REPLACE( campo, 'ë', 'ë' );
UPDATE tabela SET campo = REPLACE( campo, 'ï', 'ï' );
UPDATE tabela SET campo = REPLACE( campo, 'ö', 'ö' );
UPDATE tabela SET campo = REPLACE( campo, 'ü', 'ü' );
UPDATE tabela SET campo = REPLACE( campo, 'Ã ', 'à' );
UPDATE tabela SET campo = REPLACE( campo, 'è', 'è' );
UPDATE tabela SET campo = REPLACE( campo, 'ì', 'ì' );
UPDATE tabela SET campo = REPLACE( campo, 'ò', 'ò' );
UPDATE tabela SET campo = REPLACE( campo, 'ù', 'ù' );
UPDATE tabela SET campo = REPLACE( campo, 'ã', 'ã' );
UPDATE tabela SET campo = REPLACE( campo, 'õ', 'õ' );
UPDATE tabela SET campo = REPLACE( campo, 'â', 'â' );
UPDATE tabela SET campo = REPLACE( campo, 'ê', 'ê' );
UPDATE tabela SET campo = REPLACE( campo, 'î', 'î' );
UPDATE tabela SET campo = REPLACE( campo, 'ô', 'ô' );
UPDATE tabela SET campo = REPLACE( campo, 'û', 'û' );
UPDATE tabela SET campo = REPLACE( campo, 'Ñ', 'Ñ' );
UPDATE tabela SET campo = REPLACE( campo, 'Ç', 'Ç' );
UPDATE tabela SET campo = REPLACE( campo, 'Á', 'Á' );
UPDATE tabela SET campo = REPLACE( campo, 'É', 'É' );
UPDATE tabela SET campo = REPLACE( campo, 'Í', 'Í' );
UPDATE tabela SET campo = REPLACE( campo, 'Ó', 'Ó' );
UPDATE tabela SET campo = REPLACE( campo, 'Ú', 'Ú' );
UPDATE tabela SET campo = REPLACE( campo, 'Ä', 'Ä' );
UPDATE tabela SET campo = REPLACE( campo, 'Ë', 'Ë' );
UPDATE tabela SET campo = REPLACE( campo, 'Ï', 'Ï' );
UPDATE tabela SET campo = REPLACE( campo, 'Ö', 'Ö' );
UPDATE tabela SET campo = REPLACE( campo, 'Ãœ', 'Ü' );
UPDATE tabela SET campo = REPLACE( campo, 'À', 'À' );
UPDATE tabela SET campo = REPLACE( campo, 'È', 'È' );
UPDATE tabela SET campo = REPLACE( campo, 'ÃŒ', 'Ì' );
UPDATE tabela SET campo = REPLACE( campo, 'Ã’', 'Ò' );
UPDATE tabela SET campo = REPLACE( campo, 'Ù', 'Ù' );
UPDATE tabela SET campo = REPLACE( campo, 'Ã', 'Ã' );
UPDATE tabela SET campo = REPLACE( campo, 'Õ', 'Õ' );
UPDATE tabela SET campo = REPLACE( campo, 'Â', 'Â' );
UPDATE tabela SET campo = REPLACE( campo, 'Ê', 'Ê' );
UPDATE tabela SET campo = REPLACE( campo, 'ÃŽ', 'Î' );
UPDATE tabela SET campo = REPLACE( campo, 'Ô', 'Ô' );
UPDATE tabela SET campo = REPLACE( campo, 'Û', 'Û' );

Windows 8 não entra na BIOS

Acabei de ter um problema pra formatar ou restaurar a configuração da BIOS no ultrabook da minha irmã.
Fiquei muito tempo pesquisando até quase desistir quando cheguei a uma solução.
Cara é uma coisa muita tosca, mas quando muda-se os padrões, tudo fica difícil.

Não sei se este é um problema só com a samsung ou com todos os computadores que vem com windows 8.

SOLUÇÃO: Quando for clicar em reiniciar, seguro a tecla shift pressionada, até aparecer uma tela de opções do windows.

Neste site do tecmundo encontrei um artigo que descreve bem o que você deve fazer.

http://www.tecmundo.com.br/tutorial/31356-windows-8-como-acessar-a-bios-em-computadores-novos.htm


Faxina no windows – Para leigos

Neste post vou mostrar como fazer uma faxina no windows.
O que você ganha com isso:

  1. O Windows irá ficar mais rápido
  2. Aquelas propagandas indesejadas irão parar de aparecer
  3. Você terá mais espaço livre no seu HD
  4. Você ganhará mais conhecimento :D

1º Passo  - Iniciar o windows com mais velocidade

Clique em iniciar e digite: msconfig
Irá aparecer a imagem abaixo, então clique em “Ocultar todos os serviços Microsoft”, depois clique em “Desativar tudo”.
Atenção: Lembre de deixar o serviço do seu anti-vírus habilitado, caso contrário, ele não irá iniciar junto com o sistema.
Clique em “OK”

1

 

2º Passo – Retirar as propagandas indesejadas

Para isso será necessário instalar um programa chamado AdwCleaner, segue o link para download: http://www.baixaki.com.br/site/dwnld85537.htm 

AdwCleaner é um aplicativo que possui como função principal remover itens que foram instalados no computador, mas que nem sempre são bem-vindos, como barras de pesquisa.
Além desse tipo de aplicação, o programa também é capaz de identificar e eliminar uma série de outros hijackers e adwares.

Basicamente: Clique em Examinar e depois clique em Limpar.
Seu computador será reiniciado após tais procedimentos.

8553718113433

18113611139

18113637004

18113658921

3º Passo – Limpar dados inúteis no HD

Para isso você irá precisar instalar o aplicativo de nome CCleaner, link para downloadhttp://www.superdownloads.com.br/download/53/ccleaner/redir.html

CCleaner é uma das soluções mais poderosas e eficazes para efetuar a limpeza completa no PC, apagando arquivos desnecessários do disco de armazenamento.

Este programa possui o menu bem intuitivo, basicamente:
Clique em Lixeira,  depois clique em Analisar e Depois em Executar limpeza.

330612616512

330612616519

 

Clique em Registros, depois clique em Analisar e Depois em Corrigir selecionados.

330612616524

Clique em Ferramentas, depois clique em Limpeza de dispositivo, selecione os dispositivos que deseja efetuar a limpeza e clique em Limpeza.
Atenção: 
Este procedimento pode levar mais de 1 hora.

33061261661

 

 


php + grid + jquery easy ui

Neste post vou mostrar como padronizar uma um grid utilizando: PHP e Jquery Easy UI.
Veja a página em ação aqui.
Baixe os arquivos.

Documento HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="en" />                                
<link href="css/style.css" rel="stylesheet" type="text/css" />
<!-- incluindo o css da biblioteca jquery easy ui -->
<link href="js/jquery-easyui-1.3.4/themes/default/easyui.css" rel="stylesheet" type="text/css" />
<!-- incluindo o css dos ícones da biblioteca easy ui -->
<link href="js/jquery-easyui-1.3.4/themes/icon.css" rel="stylesheet" type="text/css" />
<!-- incluindo o jquery -->
<script type="text/javascript" src="js/jquery-easyui-1.3.4/jquery.min.js"></script>
<!-- incluindo a biblioteca jquery easy ui -->
<script type="text/javascript" src="js/jquery-easyui-1.3.4/jquery.easyui.min.js"></script>
<!-- incluindo a customização do grid (onde toda a mágica acontece) -->
<script type="text/javascript" src="js/custom/grid.js"></script>

Estrutura do Json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{"rows":
	[
	   {
		"nome":"Amanda",
		"sobrenome":"Clark",
		"telefone":"(11) 1111-1111"
           },
	   {
		"nome":"Steve",
		"sobrenome":"Jobs",
		"telefone":"(11) 2222-2222"
	},
	{
		"nome":"Bill",
		"sobrenome":"Gates",
		"telefone":"(11) 3333-3333"
	},
	{
		"nome":"Albert",
		"sobrenome":"Einstein",
		"telefone":"(11) 4444-4444"
	}
   ],
   "total":4
}

Documento JS:
Aqui é onde toda brincadeira acontece.
Se você usar sempre a estrutura acima e incluir este arquivo, tudo irá funcionar sempre igual

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Grid = {
    init: function() {
        Grid.simple();
        Grid.search();
    },
	/**
	* cria um grid simples
	* lembrando que o grid é carregado via ajax 
	* de acordo com a url da página fornecida em search.php
	*/
    simple: function() {
        $('#dg').datagrid({
            url: 'search.php',
            toolbar: '#tb',
            autoRowHeight: true,
            fitColumns: true,
            iconCls: 'icon-save',
            pageSize: 10,
            pagination: true,
            remoteSort: true,
            rownumbers: true,
            striped: true,
            width: 1000,
            rowStyler: function(index, row) {
                if (index % 2 == 0) {
                    return 'background-color:#CCC;';
                }
            }
        });
        //alterando os labels da paginação
        var pager = $('#dg').datagrid('getPager');
        pager.pagination({
            beforePageText: 'Página',
            displayMsg: 'Exibindo {from} de {to} de {total} registros',
            showPageList: true
        });
    },
	/**
	* varre os inputs do toolbar
	* e inclui num objeto como: atributo1=valor1 atributo2=valor2
	*/
    search: function() {
        $('#bt-submit-search').click(function(e) {
            e.preventDefault();
            var obj = new Object();
            $('#tb input').each(function(index, element) {
                obj[$(element).attr('name')] = $(element).val();
            });
            $('#dg').datagrid('load', obj);
        })
    }
}
 
$('document').ready(function() {
    Grid.init();
})

Documento search.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!--?php  $aJson = array( 	'rows' =--> array(
		array(
			'nome' =&gt; 'Amanda',
			'sobrenome' =&gt; 'Clark',
			'telefone' =&gt; '(11) 1111-1111'
		),
		array(
			'nome' =&gt; 'Steve',
			'sobrenome' =&gt; 'Jobs',
			'telefone' =&gt; '(11) 2222-2222'		
		),
		array(
			'nome' =&gt; 'Bill',
			'sobrenome' =&gt; 'Gates',
			'telefone' =&gt; '(11) 3333-3333'		
		),
		array(
			'nome' =&gt; 'Albert',
			'sobrenome' =&gt; 'Einstein',
			'telefone' =&gt; '(11) 4444-4444'		
		),		
	),
);
//simulando uma busca
if(isset($_POST['search_nome']) &amp;&amp; !empty($_POST['search_nome'])) {
	foreach($aJson['rows'] as $k =&gt; $aData) {
		//echo $k. '
';
		if(in_array($_POST['search_nome'], $aData)) {
			$aJson = null;
			$aJson['rows'][] = $aData;
		}
	}
}
$aJson['total'] = count($aJson['rows']);
echo json_encode($aJson);
?&gt;

Documento css

1
2
3
4
5
6
body {
    background-color: #ccc;
    color:#222;
    font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;
    font-size:75%;
}

php_curl – automatização de procedimentos

Neste artigo vou mostrar uma classe que eu mesmo criei, para automatizar um processo aqui da empresa.

A necessidade aqui era basicamente criar um script que fizesse o download de arquivos e os descompactasse automaticamente, evitando assim os procedimento abaixo:

  1. Efetuar login
  2. Clicar na página de download
  3. Selecionar as opções
  4. Aguardar script que gera os arquivos
  5. Clicar no link para download
  6. Descompactar os arquivos

É isso mesmo, com esta automatização, economizamos quase uns 30 minutos de mão de obra do usuário, e ainda colocamos todos estes procedimentos na cron.

É constituído de 3 arquivos:
Robo.class.php – Classe mãe que provê todos os métodos necessários para rodar o robo
RoboImplemetacao.class.php – Classe que efetua os procedimento necessários para o download do arquivo
index.php – Arquivo que instancia a classe, e chama o método

Download dos Arquivos: robo.zip

Robo.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?php
/**
 * Robo
 * Provê os métodos necessário para automatização de processos repetitivos
 * utilizando-se da classe php_curl do php
 * @author Dinaerte Neto <dinaerteneto@gmail.com>
 * @version 1.0
 * @date 09/09/2013
 */
class Robo {
 
    private $_cookie = null;
    private $_oCurl = null;
    private $_html = null;
 
    public function __construct() {
 
    }
 
    /**
     * acessa a página que gera o cookie
     * grava o cookie em arquivo
     * registra o cookie no atributo _cookie
     * @param String $sUrl = url da página a ser aberta pelo curl
	 * @return void
     */
    public function setCookie($sUrl) {
        $this->_oCurl = curl_init();
        curl_setopt($this->_oCurl, CURLOPT_URL, $sUrl);
        curl_setopt($this->_oCurl, CURLOPT_COOKIEJAR, $this->getDir() . 'cookie.txt');
        curl_exec($this->_oCurl);
        curl_close($this->_oCurl);
        $cookieFile = fopen($this->getDir() . 'cookie.txt', 'r');
        while (!feof($cookieFile)) {
            $linha = fgets($cookieFile, 4096);
            if (preg_match("(JSESSIONID(.*))", $linha, $aCookie)) {
                $this->_cookie = str_replace('	', '=', $aCookie[0]);
            }
        }
        fclose($cookieFile);
    }
 
    /**
     * retorna o cookie
     * @return string
     */
    public function getCookie() {
        return $this->_cookie;
    }
 
    /**
     * retorna o diretório da aplicação
     * @return string
     */
    public function getDir() {
        return $this->_dir;
    }
 
    /**
     * define o diretório da aplicação
     * @param String $sDir
     */
    public function setDir($sDir) {
        $this->_dir = $sDir;
    }
 
	/**
	 * define o atributo _html com o html retorna pelo curl
	 * mas para que isso seja possível é necessário que CURLOPT_RETURNTRANSFER esteja definido como true
	 * @param String $sHtml = html retornado pelo curl
	 * @return void
	 */
    public function setHtml($sHtml) {
        $this->_html = $sHtml;
    }
 
	/**
	 * retorna o conteúdo do atributo _html
	 * @return String
	 */
    public function getHtml() {
        return $this->_html;
    }
 
    /**
     * abre a pagina
     * @param String $sUrl = url a ser aberta
     * @param array $aPost = array a ser enviado como post/get
     */
    protected function openPage($sUrl, $aPost = null, $sMethod = 'post') {
        $this->_oCurl = curl_init();
        curl_setopt($this->_oCurl, CURLOPT_URL, $sUrl); //CURLOPT_URL: - abre a página
        curl_setopt($this->_oCurl, CURLOPT_COOKIE, $this->getCookie()); //CURLOPT_COOKIE: - pega o cookie da página
        curl_setopt($this->_oCurl, CURLOPT_SSL_VERIFYPEER, true); //CURLOPT_SSL_VERIFYPEER: - para os casos de https://
 
        curl_setopt($this->_oCurl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'); //CURLOPT_USERAGENT: - informações do navegador utilizado
        curl_setopt($this->_oCurl, CURLOPT_HTTPHEADER, array('pt-br')); //CURLOPT_HTTPHEADER: - Idioma utitlizado pelo navegados
        curl_setopt($this->_oCurl, CURLOPT_AUTOREFERER, true); //CURLOPT_AUTOREFERER: - Informa o cabeçalho da aplicação a página anterior, ou seja, de onde veio, antes de chegar a página atual.
 
        curl_setopt($this->_oCurl, CURLOPT_HEADER, false); //CURLOPT_HEADER: - para incluir o header na saída
        curl_setopt($this->_oCurl, CURLOPT_RETURNTRANSFER , true); //CURLOPT_RETURNTRANSFER - retorna o html em formato String
 
        if ($aPost) {
            curl_setopt($this->_oCurl, CURLOPT_POST, true); //CURLOPT_POST: - Necessário para enviar $_POST ao servidor
            curl_setopt($this->_oCurl, CURLOPT_POSTFIELDS, $this->_encodeURL($aPost)); //CURLOPT_POST: - Também necessário para enviar $_POST ao servidor
        }
        $sHtml = curl_exec($this->_oCurl); //aqui acontece a mágina, é onde o curl é executado
        curl_close($this->_oCurl); //encerra o curl
        $this->setHtml($sHtml); //seta o atributo _html com o retorno
    }
 
    /**
     * lê todos os options do html
     * e retorna seus valores em formato de array
     * @return array
     */
    public function readComboBox() {
        $doc = new DOMDocument();
        $doc->loadHTML($this->getHtml());
        $aOptions = array();
        $aElement = $doc->getElementsByTagName('option');
        foreach ($aElement as $oElement) {
            $aNodes = $oElement->childNodes;
            foreach ($aNodes as $oNode) {
                $aOptions[] = $oNode->nodeValue;
            }
        }
        return $aOptions;
    }
 
    /**
     * recebe um array e retorna em formato de url
     * field1=value1&field2=value2
     * @param array $aPost
     * @return string
     */
    private function _encodeURL($aPost) {
        $sPost = null;
        if (isset($aPost)) {
            $i = 1;
            foreach ($aPost as $sField => $sValue) {
                $sPost.= $sField . '=' . urlencode($sValue);
                if (count($aPost) > $i) {
                    $sPost.='&';
                }
                $i++;
            }
        }
        return $sPost;
    }
 
    /**
     * faz download do arquivo
     * @param String $sUrl = url requisitada
     * @param String $sRequest = post ou get
     * @param String $sFilename = caminho/nome do arquivo para gravar
     * @return void
     */
    protected function downloadFile($sUrl, $sFilename) {
        $this->_oCurl = curl_init();
        curl_setopt($this->_oCurl, CURLOPT_COOKIE, $this->getCookie());
        curl_setopt($this->_oCurl, CURLOPT_URL, $sUrl);
        curl_setopt($this->_oCurl, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($this->_oCurl);
        curl_close($this->_oCurl);
        file_put_contents($this->getDir() . $sFilename, $data);
    }
}
?>

RoboImplementacao.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
/**
 * RoboImplementacao
 * criado para fazer download dos arquivos
 * sem a necessidade de que o usuário tenha que entrar no site
 * @author Dinaerte Neto <dinaerteneto@gmail.com>
 * @version 1.0
 * @date 09/09/2013
 */
class RoboImplementacao extends Robo {
    /**
     * executa os procedimentos necessários
     * para executação do robo
     */
    public function init() {
        $this->setDir(getcwd().'/robo'); //diretorio onde será mantido os arquivos
        if(!is_dir($this->getDir().'/unzip/'.date('m-Y'))) {
            mkdir($this->getDir().'/unzip/'.date('m-Y'));
        }
        $this->setCookie('https://enderecodosite.com.br/subdiretorio/acao.extensao'); //este é o endereço da página que cria o cookie
 
        //array com nomedocampo => valor as ser enviado via post
        $aPost = array(
            'login' => 'usuario',
            'password' => 'senha'
        );
        $this->openPage('https://enderecodosite.com.br/subdiretorio/pagina-login.extensao', $aPost, 'post'); //abre a página enviado o post
 
		//abre a página que deve-se abrir quando o usuários estiver logado
        $this->openPage('https://enderecodosite.com.br/subdiretorio/pagina-logado.extensao');
        $aSelecionarCombo = $this->readComboBox(); //lê o combobox da página e armazena todos os seus valores em array
		//criando os dados que serão enviados via post
        $aPost = array(
           'field1' => 'valor1',
           'field2' => 'valor2'
        );
		//percorrendo cada item do combo da página e enviando cada um destes itens via post
        foreach ($aSelecionarCombo as $sValue) {
            $aPost['fieldSelecionado'] = $sValue; //envia item a item, dos que foram selecionados no combobox
            $this->openPage('https://enderecodosite.com.br/subdiretorio/pagina-escolhas.extensao', $aPost, 'post'); //envia o post para a página
            $this->downloadFile('https://enderecodosite.com.br/subdiretorio/downloadTXT.zip', '/download/' . $sValue . '.zip'); //faz download do arquivo
 
			//após download do arquivo é solicitado o unzip deste
            $sFile = $this->getDir() . 'download/' . $sValue . '.zip';
            $sDir = $this->getDir() . 'unzip/' . date('m-Y') . '/' . $sValue . '/';
            if ($this->unzip($sFile, $sDir)) {
                echo $sValue . ' UNZIP OK ';
            } else {
                echo $sValue . ' ERRO NO UNZIP ';
            }
            echo "<br /> \n";
        }
    }
 
    /**
     * descompacta o arquivo
	 * Nesta caso em especifico, temos um zip, e dentro deste zip outros arquivos zipados
	 * por isso o unzip é realizado 2 vezes, sendo uma delas dentro do for.
     * @param string $sFile nome do arquivo a ser descompactado
     * @param string $sDir url para a qual o arquivo será enviado após descompactado
     * @return boolean
     */
    public function unzip($sFile, $sDir) {
		//se não existir o diretório de destino, então tenta cria-lo
        if (!is_dir($sDir)) {
            $old = umask(0);
            mkdir($sDir, 0777);
            umask($old);
        }
        $aZip = array();
        $oZip = new ZipArchive;
        if ($oZip->open($sFile) === true) {
			//percorre todos os zips existentes dentro do zip original e adiciona no array $aZip
			for ($i = 0; $i < $oZip->numFiles; $i++) {
                $aZip[] = $oZip->getNameIndex($i);
            }
			//extrai o arquivo original para o diretório de destino
            $oZip->extractTo($sDir);
            $oZip->close();
            unlink($sFile);
 
			//percorre o array $aZip e descompacta um por um
            foreach ($aZip as $sZipname) {
                $oZip = new ZipArchive;
                if ($oZip->open($sDir . '/' . $sZipname) === true) {
                    $oZip->extractTo($this->getDir() . '/unzip/'.date('m-Y').'/');
                    $oZip->close();
                    unlink($sDir . '/' . $sZipname); //remove o arquivo zip
                    rmdir($sDir); //remove o diretório como o nome do arquivo
                } else {
                    return false;
                }
            }
        } else {
            return false;
        }
        return true;
    }
}
?>

index.php

1
2
3
4
<?php
   $oRobo = new RoboImplementacao();
   $oRobo->init();
?>

Fontes tremidas ou embaçada no windows

Se você tem um notebook ou um computador com monitor de lcd em algum momento já pode ter se deparado com as letras embaçadas enquanto usava algum aplicativo ou lia algum texto na internet.
Pois bem tente a solução abaixo:

  1. Passo
    Clique com o botão direito do mouse na área de trabalho e em seguida em “Personalizar
    passo1
  2. Passo
    Clique em Vídeo
    passo2
  3. Passo
    Clique em Ajustar texto ClearType
    passo3
  4. Passo
    Habilite a opção Ativar ClearType e clique em Avançar
    passo4
  5. Passo
    Após os passos acima basicamente você terá de selecionar os textos que são melhor visualizados em seu monitor e ir clicando em avançar.
    passo5

Espero ter ajudado.
Grande abraço.


facebook – certificado inválido

Ontém fui a casa do meu tio dar um jeito na lentidão e travamento do computador, e me deparei com a mensagem de certificado inválido na tentativa de acessar o “facebook”, mesmo depois de ter formatado.
O que você logo pensa quando vê uma mensagem desta é: “vírus”, mas eu tinha acabado de formatar o computador.
Pesquisando pela NET, descobri que o erro era o fato de o computador esta com a data e hora incorreta.

 


Páginas:123