:::: MENU ::::
Browsing posts in: php

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

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();
?>

wamp + php_curl

Eu utilizo win7/win8 com SO, e WAMP como servidor para rodar minhas aplicações php, entretanto, como meu SO é 64 bits o WAMP que tenho instalado aqui, mesmo após habilitar a extensão php_curl no php.ini, a extensão continuava não funcionando.

Solução:

Baixar o php_curl.dll e substituir o atual em: C:\wamp\bin\php\phpx.x.xx\ext

Links para downloads das versões do php_curl.dll:

Não esqueça de reiniciar todos os serviçõs do WAMP


Conversão para MP4 h264 com ffmpeg – MOOV ATOM

Hoje precisei alterar um sistema que pegava um vídeo com qualquer formato e o convertia para flv.
Entretanto, hoje vivemos em tempo de tablets e smartphones, e graças a Deus o adobe flash player está morrendo, e junto com ele o formato flv.

Bom agora eu preciso então converter os vídeos para o formato mp4, e como fazer isso de forma que os vídeos continuem ficando leves?

Assim:

1
#ffmpeg -i 'input.mpg' -acodec libfaac -ab 96k -vcodec libx264 -vpre hq -crf 22 -threads 0 output.mp4

ou

1
#ffmpeg -i 'input.mpg' -vcodec libx264 -vpre hq -b 1M -bt 1M -threads 0 outfile.mp4

ou

1
#ffmpeg -i test.avi -acodec libfaac -ab 128k -ar 44100 -s 704x400 -r 20 -vcodec libx264 -b 256000 -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -me_method umh -subq 5 -trellis 1 -refs 2 -bf 1 -coder 1 -me_range 16 -g 300 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 256000 -maxrate 4M -bufsize 4M -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 21 test.mp4

ou

1
#ffmpeg -y -i source.avi -vcodec libx264 -b BITRATE -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -flags2 +mixed_refs -me umh -subq 5 -trellis 1 -refs 5 -bf 3 -b_strategy 1 -coder 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt "$vbitrate" -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 41 -acodec libfaac -ac 2 -ar 48000 -ab "$abitrate" -f mov out.mov

Dois detalhes:

1. provavelmente você terá que instalar a biblioteca “libx264″ para conseguir que seus vídeos sejam H264:

1
#apt-get install libavcodec-extra-52

2. os vídeos não serão buferizados, ou seja, o navegador irá fazer o download do vídeo inteiro para depois o usuário começar a assitir o vídeo.
Isso acontece porque o ffmpeg joga um tal de “Moov Atom” para o final do arquivo, e para que tudo funcione bem, este cara precisa estar no ínicio do arquivo.
Ainda estou procurando uma solução com o ffmpeg, mas a solução que consegui, testei e funcionou foi com um programinha desenvolvido em php.
Segue o link: http://code.google.com/p/moovrelocator/

Fontes:
http://webhostingneeds.com/Convert_video_to_mp4_h264_format_using_ffmpeg
http://flash.flowplayer.org/documentation/installation/formats.html


PHP + Apache + UploadProgress + Linux Ubuntu

Existe na internet vários código e ferramentas prontas para upload com progress bar.
A maior parte delas utiliza flash. Eu odéio flash.
Para isso funcionar eu tive que instalar no apache a extensão “progressbar”, mas antes de instalar no apache eu tive que instalar no linux.

Segue:

1
2
#apt-get install php5-dev
#pecl install uploadprogress

adicione a linha “extension=uploadprogress.so” no fim do php.ini – normalmente localizado em /etc/php5/apache2/php.ini

1
#/etc/init.d/apache2 restart

No php basta utilizar:

1
uploadprogress_get_info($_GET['uid']);


Criando diretório virtual no apache2 (virtualhost)

Estes dias eu estava precisando criar um diretório virtual no apache.
Minha intenção era basicamente, escrever na url www.enderecodosite.dev e ser redirecionado para o diretório do site como se este fosse o “root” do servidor.
Calma que eu explico:
Meu documentRoot: C:\Apache2\htdocs
Diretório que eu gostaria que fosse entendido como “root” C:\Apache2\htdocs\enderecodosite

Sem mais delongas vamos logo configurar a bagaça.

Passo 1:

Habilitamos no apache o módulo virtualhost

  1. Abrir o httpd.conf do apache :)
  2. descomentar a linha – Include conf/extra/httpd-vhosts.conf
  3. descomentar a linha – LoadModule vhost_alias_module modules/mod_vhost_alias.so

Passo 2:

No arquivo httpd-vhost.conf é onde vamos inserir todos os nossos virtualhost.
Quando você terminar este passo, já poderá digitar http://localhost/enderecodosite que ele será entendido como se fosse o seu documentRoot.

  1. Abra o arquivo httpd-vhost.conf, localizado dentro do diretório “extra” do apache
  2. Inclua as linhas abaixo:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    <virtualhost *:80>
       DocumentRoot "c:/Apache2/htdocs/<strong>enderecodosite</strong>/"
       ServerName enderecodosite.dev
       ServerAlias www.enderecodosite.dev
        <directory "C:/Apache2/htdocs/enderecodosite/">
            AllowOverride All
            Options Indexes FollowSymLinks
            Order allow,deny
            Allow from all
        </directory>
    </virtualhost>

Passo 3:

Com isso, ao invés de digitar http://localhost/enderecodosite, você poderá digitar http://enderecodosite.dev

    1. Abra o arquivo c:\windows\System32\drivers\etc\hosts
    2. Inclua as linhas abaixo:
      1
      2
      
      127.0.0.1    enderecodosite.dev
      127.0.0.1    www.enderecodosite.dev

 

Estas configurações foram feitas em uma máquina rodando windows7 e apache2, foram feitas para atender minha necessidade de desenvolver PHP, no meu servidor local.
Creio que a configuração para lixux seja igual no passo 2.

Colaborador principal: Henrique Dergado