<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Plinio Pavin &#187; Programação</title>
	<atom:link href="http://www.pliniopavin.com.br/wp/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pliniopavin.com.br/wp</link>
	<description>&#34;Porque o conhecimento é a única coisa que aumenta quando dividimos.&#34;</description>
	<lastBuildDate>Mon, 04 Oct 2010 00:32:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Configurando VirtualHosts no Xampp</title>
		<link>http://www.pliniopavin.com.br/wp/2010/09/configurando-virtualhosts-no-xampp/</link>
		<comments>http://www.pliniopavin.com.br/wp/2010/09/configurando-virtualhosts-no-xampp/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 13:19:03 +0000</pubDate>
		<dc:creator>Plinio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.pliniopavin.com.br/wp/?p=126</guid>
		<description><![CDATA[TweetParticipei do último WorkShop PHP Extreme: PHP 5 – POO da SchoolOfNet, e após ouvir o Wesley elogiar tanto os famosos VirtualHosts resolvi também configurar meu ambiente de desenvolvimento com os VirtualHosts no apache. Como programo em Delphi também, acabo usando o mesmo ambiente para desenvolver em PHP, ou seja, desenvolvo em Windows. Acabei acostumando [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton126" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fwww.pliniopavin.com.br%2Fwp%2F2010%2F09%2Fconfigurando-virtualhosts-no-xampp%2F&amp;text=Configurando%20VirtualHosts%20no%20Xampp&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pliniopavin.com.br%2Fwp%2F2010%2F09%2Fconfigurando-virtualhosts-no-xampp%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.pliniopavin.com.br/wp/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p><a href="http://www.pliniopavin.com.br/wp/wp-content/uploads/2010/09/apache_display.png"><img class="alignleft size-thumbnail wp-image-145" title="apache_display" src="http://www.pliniopavin.com.br/wp/wp-content/uploads/2010/09/apache_display-150x150.png" alt="" width="150" height="150" /></a>Participei do último WorkShop <a href="http://www.schoolofnet.com/phpextreme" target="_blank">PHP Extreme: PHP 5 – POO</a> da <a href="http://www.schoolofnet.com/phpextreme" target="_blank">SchoolOfNet</a>, e após ouvir o Wesley elogiar tanto os famosos VirtualHosts resolvi também configurar meu ambiente de desenvolvimento com os VirtualHosts no apache. Como programo em Delphi também, acabo usando o mesmo ambiente para desenvolver em PHP, ou seja, desenvolvo em Windows.</p>
<p>Acabei acostumando a usar o <a href="http://www.apachefriends.org/pt_br/xampp-windows.html" target="_blank">XAMPP Lite</a>, que é uma versão mais &#8220;leve&#8221; do XAMPP, mas instala tudo que eu preciso e até um pouco mais:  Apache 2.2.14 (IPv6 enabled),  MySQL 5.1.41 + PBXT engine, PHP 5.3.1, OpenSSL 0.9.8l, phpMyAdmin 3.2.4, XAMPP Control Panel 2.5.8, XAMPP CLI Bundle 1.6, Webalizer 2.21-02, msmtp 1.4.19, SQLite 2.8.17, SQLite 3.6.20, Ming 0.4.3Apache + PHP + mySQL, de forma rápida e descomplicada.</p>
<p>Você encontra diversos tutorias de instalação do XAMPP pela internet então não vou me preocupar com a instalação dele. Caso queira um passo a passo, indico o tutorial do <a href="http://www.forumweb.com.br/artigo/221/php/instalando-o-xampp-no-windows" target="_blank"><strong>Carlos Mesquita Aguiar</strong></a><strong> </strong> em <strong><a href="http://www.forumweb.com.br" target="_blank">www.forumweb.com.br</a></strong>.</p>
<p>Só deixo aqui uma dica: no windows 7 não instale o XAMPP na pasta &#8220;Program Files&#8221; ou &#8220;Arquivos de Programas&#8221; devido a problemas de permissão de arquivos. Eu instalei o meu em &#8220;C:\XAMPP&#8221;, e vou assumir essa localização de agora em diante.</p>
<p>A primeira coisa a se fazer é criar os redirecionamentos internos para que o windows aponte os domínios para seu ambiente local.<br />
O Windows possui um arquivo chamado hosts, que funciona como um DNS interno. Esse arquivo fica no diretório %windir%\System32\drivers\etc\ .</p>
<p>Vamos incluir no final desse arquivo os domínios que queremos apontar para nossa máquina local:<br />
<code><br />
127.0.0.1         site1.meudominio.com<br />
127.0.0.1         site2.meudominio.com<br />
</code><br />
A maioria dos tutoriais que encontrei mandavam editar o de configuração do apache httpd.conf, mas no caso do XAMPP o arquivo a ser editado é o C:\XAMPP\apache\conf\extra\httpd-vhosts.conf</p>
<p>Nesse arquivo vamos incluir as informações abaixo:<br />
<code><br />
NameVirtualHost 127.0.0.1:80<br />
&lt;VirtualHost *:80&gt;<br />
ServerName site1.meudominio.com<br />
DocumentRoot "C:/XAMPP/htdocs/site1"<br />
&lt;/VirtualHost&gt;</code></p>
<p><code><br />
&lt;VirtualHost *:80&gt;<br />
ServerName site2.meudominio.com<br />
DocumentRoot "C:/XAMPP/htdocs/site2"<br />
&lt;/VirtualHost&gt;<br />
</code></p>
<p>Onde:</p>
<p>* ServerName – É o nome do VirtualHost criado. Lembre-se que o nome escolhido precisa estar configurado no arquivos hosts do windows.</p>
<p>* DocumentRoot – Diretório raiz de seu servidor, onde estará localizado seu arquivo index.</p>
<p>Após fazer as alterações, reinicie o apache e abra no navegador os sites configurados, que agora estão rodando no seu servidor local.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pliniopavin.com.br/wp/2010/09/configurando-virtualhosts-no-xampp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Redirecionamento de sites com php e .htaccess</title>
		<link>http://www.pliniopavin.com.br/wp/2009/11/redirecionamento-de-sites-com-php-e-htaccess/</link>
		<comments>http://www.pliniopavin.com.br/wp/2009/11/redirecionamento-de-sites-com-php-e-htaccess/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 23:17:40 +0000</pubDate>
		<dc:creator>Plinio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://www.pliniopavin.com.br/blog/?p=20</guid>
		<description><![CDATA[TweetSe você usa PHP para redirecionar seu site, saiba que é muito provável que seu site não esteja sendo corretamente indexado pelo Google. Por default o PHP envia o código 302 que significa &#8220;recurso temporariamente movido&#8221; e isso faz com que o Googlebot não indexe o destino de seu redirecionamento. Por exemplo, o código abaixo [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton20" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fwww.pliniopavin.com.br%2Fwp%2F2009%2F11%2Fredirecionamento-de-sites-com-php-e-htaccess%2F&amp;text=Redirecionamento%20de%20sites%20com%20php%20e%20.htaccess&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pliniopavin.com.br%2Fwp%2F2009%2F11%2Fredirecionamento-de-sites-com-php-e-htaccess%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.pliniopavin.com.br/wp/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Se você usa PHP para redirecionar seu site, saiba que é muito provável que seu site não esteja sendo corretamente indexado pelo Google.</p>
<p>Por default o PHP envia o código 302 que significa &#8220;recurso temporariamente movido&#8221; e isso faz com que o Googlebot não indexe o destino de seu redirecionamento.</p>
<p>Por exemplo, o código abaixo somente será útil se seu site está realmente em manutenção no momento:</p>
<p class="code"><code><span style="color: #000000"><span style="color: #0000bb">&lt;?php<br />
header</span><span style="color: #007700">(</span><span style="color: #dd0000">'Location: http://www.foo.com/bar/'</span><span style="color: #007700">);<br />
</span><span style="color: #0000bb">?&gt;</span></span></code></p>
<p>Já os comandos abaixo farão com que o Google siga o redirecionamento e indexe seu site:</p>
<p class="code"><code><span style="color: #000000"> <span style="color: #0000bb">&lt;?php<br />
header</span><span style="color: #007700">(</span><span style="color: #dd0000">'HTTP/1.1 301 Moved Permanently'</span><span style="color: #007700">);<br />
</span><span style="color: #0000bb">header</span><span style="color: #007700">(</span><span style="color: #dd0000">'Location: http://www.foo.com/bar/'</span><span style="color: #007700">);<br />
</span><span style="color: #0000bb">?&gt;</span></span></code></p>
<p>Porém, a melhor maneira, caso seja possível, é fazer o redirecionamento através do arquivo .htaccess do Apache.</p>
<p>No exemplo abaixo, cada requisição para foo.com/ é redirecionada para foo.com/bar/:</p>
<p class="code"><code><span style="color: #000000"> #Redirect (this will result in a 301 permanently moved status code)<br />
RedirectMatch permanent ^/$ http://www.foo.com/bar/</span></code></p>
<p>O uso do arquivo .htaccess é mais rápido e consome menos recursos do servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pliniopavin.com.br/wp/2009/11/redirecionamento-de-sites-com-php-e-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O usuário atual é o administrador ?</title>
		<link>http://www.pliniopavin.com.br/wp/2007/09/o-usuario-atual-e-o-administrador/</link>
		<comments>http://www.pliniopavin.com.br/wp/2007/09/o-usuario-atual-e-o-administrador/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 14:05:00 +0000</pubDate>
		<dc:creator>Plinio</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.pliniopavin.com.br/blog/2007/09/20/o-usuario-atual-e-o-administrador/</guid>
		<description><![CDATA[TweetNavegando pela internet, encontrei a função abaixo, e achei interessante. Se você precisar verificar, de dentro do seu aplicativo Delphi, se o usuário corrente é o administrador do computador, ou membro do grupo administradores, use a função &#8220;IsWindowsAdmin&#8221;. unit WindowsUser; interface uses Windows; //retorna True se o usuário atual tem privilégios administrativos function IsWindowsAdmin: Boolean; [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton12" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fwww.pliniopavin.com.br%2Fwp%2F2007%2F09%2Fo-usuario-atual-e-o-administrador%2F&amp;text=O%20usu%C3%A1rio%20atual%20%C3%A9%20o%20administrador%20%3F&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.pliniopavin.com.br%2Fwp%2F2007%2F09%2Fo-usuario-atual-e-o-administrador%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.pliniopavin.com.br/wp/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Navegando pela internet, encontrei a função abaixo, e achei interessante.</p>
<p>Se você precisar verificar, de dentro do seu aplicativo Delphi, se o usuário corrente é o administrador do computador, ou membro do grupo administradores,  use a função &#8220;IsWindowsAdmin&#8221;.</p>
<p>unit WindowsUser;</p>
<p>interface<br />
uses Windows;</p>
<p>//retorna True se o usuário atual tem privilégios administrativos<br />
function IsWindowsAdmin: Boolean;</p>
<p>implementation</p>
<p>const<br />
SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)) ;</p>
<p>const<br />
SECURITY_BUILTIN_DOMAIN_RID = $00000020;<br />
DOMAIN_ALIAS_RID_ADMINS = $00000220;</p>
<p>function IsWindowsAdmin: Boolean;<br />
var<br />
hAccessToken: THandle;<br />
ptgGroups: PTokenGroups;<br />
dwInfoBufferSize: DWORD;<br />
psidAdministrators: PSID;<br />
g: Integer;<br />
bSuccess: BOOL;<br />
begin<br />
Result := False;</p>
<p>bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken) ;<br />
if not bSuccess then<br />
begin<br />
if GetLastError = ERROR_NO_TOKEN then<br />
bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken) ;<br />
end;</p>
<p>if bSuccess then<br />
begin<br />
GetMem(ptgGroups, 1024) ;</p>
<p>bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize) ;</p>
<p>CloseHandle(hAccessToken) ;</p>
<p>if bSuccess then<br />
begin<br />
AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators) ;</p>
<p>for g := 0 to ptgGroups.GroupCount &#8211; 1 do<br />
if EqualSid(psidAdministrators, ptgGroups.Groups[g].Sid) then<br />
begin<br />
Result := True;<br />
Break;<br />
end;</p>
<p>FreeSid(psidAdministrators) ;<br />
end;</p>
<p>FreeMem(ptgGroups) ;<br />
end;<br />
end;</p>
<p>end.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pliniopavin.com.br/wp/2007/09/o-usuario-atual-e-o-administrador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

