<?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>Thiago Valentim &#124; Programador Web</title>
	<atom:link href="http://www.thiagovalentim.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thiagovalentim.com.br</link>
	<description>Desenvolvimento Back-end e Front-end</description>
	<lastBuildDate>Thu, 23 Sep 2010 15:36:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Trabalhando com DOM e PHP (DOMDocument class)</title>
		<link>http://www.thiagovalentim.com.br/php/trabalhando-com-dom-e-php-domdocument-class/</link>
		<comments>http://www.thiagovalentim.com.br/php/trabalhando-com-dom-e-php-domdocument-class/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 16:21:38 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.thiagovalentim.com.br/?p=149</guid>
		<description><![CDATA[DOM (Document Object Model) A extensão do DOM permite trabalhar com documentos XML através do API DOM do PHP 5. DOMDocument class Representa um html inteiro ou documento xml, seu construtor recebe 2 parametros que são: versão do documento e codificação do documento, exemplo: &#60;?php $dom = new DOMDocument('1.0', 'iso-8859-1'); Método LOAD: Tem função de carregar o arquivo XML, [...]]]></description>
			<content:encoded><![CDATA[<h3>DOM (Document Object Model)</h3>
<p>A extensão do <strong>DOM</strong> permite trabalhar com documentos <strong>XML</strong> através do API <strong>DOM</strong> do PHP 5.</p>
<h4>DOMDocument class</h4>
<p>Representa um html inteiro ou documento xml, seu construtor recebe 2 parametros que são: versão do documento e codificação do documento, exemplo:<span id="more-149"></span></p>
<pre class="brush: php">&lt;?php
$dom = new DOMDocument('1.0', 'iso-8859-1');
</pre>
<h4>Método LOAD:</h4>
<p>Tem função de carregar o arquivo XML, exemplo:</p>
<pre class="brush: php">&lt;?php
$dom = new DOMDOcument();
$dom-&gt;load("library.xml");
$dom-&gt;loadXML($xml);</pre>
<h4>DomDocument::loadHtmlFile() and DomDocument::loadHTML()</h4>
<p>O método loadHTML carrega o html de uma string e o método loadHtmlFile carrega o html de um arquivo.</p>
<h4>DomDocument::save() (para um arquivo).</h4>
<p>Salva a arvore do documento XML interna de volta no arquivo.</p>
<h4>DomDocument::saveHTML() (para uma string).</h4>
<p>Retorna o documento interno em uma string de html formatada, exemplo:</p>
<pre class="brush: php">&lt;?php
$doc = new DOMDocument('1.0');

$root = $doc-&gt;createElement('html');
$root = $doc-&gt;appendChild($root);

$head = $doc-&gt;createElement('head');
$head = $root-&gt;appendChild($head);

$title = $doc-&gt;createElement('title');
$title = $head-&gt;appendChild($title);

$text = $doc-&gt;createTextNode('This is the title');
$text = $title-&gt;appendChild($text);

echo $doc-&gt;saveHTML();
</pre>
<h4>DomDocument::saveXML().</h4>
<p>Retorna uma string XML em vez de um arquivo HTML ou string HTML.</p>
<h4>DomDocument::saveHTMLFile().</h4>
<p>Salva o documento ja em formato html.</p>
<h4>XPath Queries</h4>
<p>Uma das partes mais poderosas da extensão do DOM, é sua integração com XPath de fato, DOM XPath é muito mais poderoso do que o equivalente SimpleXML.</p>
<pre class="brush: php">&lt;?php
$dom = new DomDocument();
$dom-&gt;load("library.xml");
$xpath = new DomXPath($dom);
$xpath-&gt;registerNamespace("lib", "http://exemple.org/library");
$results = $xpath-&gt;query("//lib:title/text()");
foreach ($results as $book){
      echo $book-&gt;data;
}</pre>
<p>Uma chamada para DomXpath::query() retornará um objecto DomNodeList;  você pode descobrir quantos itens ele contém usando o comprimento da propriedade, e então acessar qualquer um deles com o metodo item(). você também pode iterar através da coleção inteira usando um laço foreach();</p>
<h4>DOMNODE:</h4>
<p>O elemento dom possui elementos(nós), os chamados nodes, esses nodes são de certa forma &#8220;as tags&#8221;. No html temos tags definidas e não criamos essas tags, pois ja existem documentadas, porem em XML definimos nossas proprias tags e essas são os nós.</p>
<h4>DOMDocument::createElement().</h4>
<p>Cria um novo elemento</p>
<h4>DOMDocument::createElementNS()</h4>
<p>Cria um novo elemento com um namespace associado</p>
<h4>DOMDocument::createTextNode().</h4>
<p>Adiciona texto dentro de um node, porem o texto somente será exibido caso o node seja criado.</p>
<pre class="brush: php">&lt;?php
$dom = new DOMDocument();
$dom-&gt;load("library.xml");
$book = $dom-&gt;createElement("book");
$book-&gt;setAttribute("meta:isbn", "0973589825");
$title = $dom-&gt;createElement("title");
$text = $dom-&gt;createTextNode("php|architect's Guide to PHP Design Patterns");
$title-&gt;appendChild($text);
$book-&gt;appendChild($text);
$author = $dom-&gt;createElement("pub:publisher", "Marco Tabini &amp; Associates, Inc.");
$book-&gt;appendChild($publisher);
$dom-&gt;documentElement-&gt;appendChild($book);</pre>
<h4>DomNode::appendChild()</h4>
<p>Cria um elemento filho. O elemento filho é aquele que ficará dentro de outro elemento, exemplo:</p>
<pre class="brush: php">&lt;?php
$doc = new DOMDocument();

$foo = $doc-&gt;createElement("foo");
$doc-&gt;appendChild($foo);

$bar = $doc-&gt;createElement("bar");
$foo-&gt;appendChild($bar);

$bazz = $doc-&gt;createElement("bazz");
$foo-&gt;appendChild($bazz);

echo $doc-&gt;saveXML();
</pre>
<p>é o mesmo que</p>
<pre>&lt;foo&gt;
&lt;bar&gt;&lt;/bar&gt;
&lt;bazz&gt;&lt;/bazz&gt;
&lt;/foo&gt;</pre>
<h4>DomNode::insertBefore()</h4>
<p>Insere um elemento antes de um outro elemento.</p>
<p>DomNode::appendChild() end DomNode::insertBefore() moverá o nó para a nova localização.</p>
<p>Se você desejar duplicar um nó, utilize &#8220;DomNode::cloneNode()&#8221;.</p>
<h4>Modificando Dados</h4>
<pre class="brush: php">&lt;?php
$xml = &lt;&lt;
algum texto aqui

XML;
$dom = new DOMDocument();
$dom-&gt;loadXML($xml);
$xpath = new DomXpath($dom);
$node-&gt;data = ucwords($node-&gt;data);
echo $dom-&gt;saveXML();</pre>
<h4>Removendo Dados</h4>
<p>Existe três tipos de dados que você pode querer remover de um documento XML: atributos, elementos e CDATA. O DOM fornece diferentes métodos para cada uma dessas tarefas:</p>
<h4>DomNode::removeAttribute().</h4>
<p>Remove o atributo do elemento (node).</p>
<h4>DomNode::removeChild().</h4>
<p>Remove o elemento filho do node especificado.</p>
<h4>DomCharacterData::deleteData().</h4>
<p>Remove um intervalo de caracteres de um node, esse método recebe 2 parametros:</p>
<p>Offset &#8211; o primeiro caractere a ser removido.</p>
<p>Count &#8211; o numero de caracteres que serão removidos.</p>
<h4>Trabalhando com Namespaces:</h4>
<p><strong>DOM</strong> é mais do que capaz de lidar com namespaces próprios e, tipicamente, você pode, pela maior parte, ignorai-lo e passar atributos e nome de elementos com o prefix apropriado diretamente para a maioria das funções DOM.</p>
<pre class="brush: php">&lt;?php
$dom = new DOMDocument();
$node = $dom-&gt;createElement(’ns1:somenode’);
$node-&gt;setAttribute(’ns2:someattribute’, ’somevalue’);
$node2 = $dom-&gt;createElement(’ns3:anothernode’);
$node-&gt;appendChild($node2);
// Set xmlns:* attributes
$node-&gt;setAttribute(’xmlns:ns1’, ’http://example.org/ns1’);
$node-&gt;setAttribute(’xmlns:ns2’, ’http://example.org/ns2’);
$node-&gt;setAttribute(’xmlns:ns3’, ’http://example.org/ns3’);
$dom-&gt;appendChild($node);
echo $dom-&gt;saveXML();</pre>
<p>Nos podemos tentar simplificar o uso de namespaces um pouco usando o os métodos DomDocument::createElementNS() e DomNode::setAttributeNS()</p>
<pre class="brush: php">&lt;?php
$dom = new DOMDocument();
$node = $dom-&gt;createElementNS(’http://example.org/ns1’, ’ns1:somenode’);
$node-&gt;setAttributeNS(’http://example.org/ns2’, ’ns2:someattribute’, ’somevalue’);
$node2 = $dom-&gt;createElementNS(’http://example.org/ns3’, ’ns3:anothernode’);
$node3 = $dom-&gt;createElementNS(’http://example.org/ns1’, ’ns1:someothernode’);
$node-&gt;appendChild($node2);
$node-&gt;appendChild($node3);
$dom-&gt;appendChild($node);
echo $dom-&gt;saveXML();</pre>
<h4>Interagindo com SimpleXml</h4>
<p>Você pode importar objetos SimpleXML para usar com o DOM usando o dom_import_simplexml();</p>
<pre class="brush: php">&lt;?php
$sxml = simplexml_load_file(’library.xml’);
$node = dom_import_simplexml($sxml);
$dom = new DomDocument();
$dom-&gt;importNode($node, true);
$dom-&gt;appendChild($node);</pre>
<p>O oposto também é possível, usando a função propriamente chamada simplexml_import_dom();</p>
<pre class="brush: php">&lt;?php
$dom = new DOMDocument();
$dom-&gt;load(’library.xml’);
$sxe = simplexml_import_dom($dom);
echo $sxe-&gt;book[0]-&gt;title;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/php/trabalhando-com-dom-e-php-domdocument-class/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Aplicando o Decorator em PHP (design pattern)</title>
		<link>http://www.thiagovalentim.com.br/design-patterns/aplicando-o-decorator-em-php-design-pattern/</link>
		<comments>http://www.thiagovalentim.com.br/design-patterns/aplicando-o-decorator-em-php-design-pattern/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 09:02:42 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.thiagovalentim.com.br/?p=71</guid>
		<description><![CDATA[O que é Decorator? O padrão Decorator é um padrão de projeto estrutural, que nos permite adicionar um novo comportamento ou adicionais a um objeto durante a execução, dependendo da situação. Objetivo do Decorator Tem como objetivo tornar flexivel aplicações mais complexas onde é necessario acrescentar comportamentos e funcionalidades nos objetos e entre outras. A [...]]]></description>
			<content:encoded><![CDATA[<h2>O que é <strong>Decorator</strong>?</h2>
<p>O padrão <strong>Decorator</strong> é um padrão de projeto estrutural, que nos permite adicionar um novo comportamento ou adicionais a um objeto durante a execução, dependendo da situação.<br />
<span id="more-71"></span></p>
<h3>Objetivo do <strong>Decorator</strong></h3>
<p>Tem como objetivo tornar flexivel aplicações mais complexas onde é necessario acrescentar comportamentos e funcionalidades nos objetos  e entre outras.</p>
<p>A ideia é substituir herença por composição.</p>
<p><a rel="attachment wp-att-74" href="http://www.thiagovalentim.com.br/design-patterns/aplicando-o-decorator-em-php-design-pattern/attachment/decorator/"><img class="size-thumbnail wp-image-74 alignleft" title="decorator" src="http://www.thiagovalentim.com.br/wp-content/uploads/2010/07/decorator-150x150.jpg" alt="" width="150" height="150" /></a> Exemplo:</p>
<p>Imagina que você foi a uma lanchonete, comprou um x-burger e adiciou mostarda, ja seu amigo pediu um x-burger com catchup extra.</p>
<p>O objeto é o x-burger e recebeu adicionais,  então:</p>
<p>Usando Herança teriamos &#8220;xBurger&#8221; (classe pai), &#8220;xBurgerMostarda&#8221; (classe filha) e &#8220;xBurgerCatchup&#8221; (classe filha).  // Desculpa os exemplos, mas são apenas para compreensão</p>
<p>Agora imagina se necessitassemos de criar outros adicionais (cebola, alface e etc)&#8230;vamos piorar a situação, imagina que podemos adicionar 2, 3, 4 complementos ao mesmo tempo.</p>
<p>Como fariamos com a herança?<br />
Criariamos a horrivel sub-classe &#8220;xBurgerMostardaCatchupCebola&#8221; ?</p>
<p>Seu sistema ficaria enorme, com varias classes, duplicação de códigos, acoplado e assim vai&#8230;</p>
<p>Por isso o <strong>Decorator</strong> propoem usar, para casos mais complexos, composição ao invés de herança.<br />
Exemplo:</p>
<pre class="brush: php">
&lt;?php
abstract class behavior {
	abstract function preparo();
}

class hanburger extends behavior
{
	private $burger ='carne';
	private $pao = 'frances';
	public function preparo() {
		return "Pão {$this->pao} com {$this->burger}";
	}

}

abstract class decorator extends behavior {
	protected $add;
	public function __construct(behavior $add){
		$this->add = $add;
	}
}

class mostarda extends decorator {
	public function preparo(){
		$add = $this->add->preparo();
		return "{$add} mais mostarda";
	}
}

class catchup extends decorator {
	public function preparo(){
		$add = $this->add->preparo();
		return "{$add} mais catchup";
	}
}
</pre>
<p>Vou criar um Pão com carne mais catchup:</p>
<pre class="brush: php">
&lt;?php
$hanburger = new catchup(new hanburger());
echo $hanburger->preparo();
</pre>
<p>Imprimirá:<br />
Pão frances com carne mais catchup</p>
<p>Vou criar um Pão com carne mais mostarda mais catchup:</p>
<pre class="brush: php">
&lt;?php
$hanburger = new catchup(new mostarda(new hanburger()));
echo $hanburger->preparo();
</pre>
<p>Imprimirá:<br />
Pão frances com carne mais mostarda mais catchup.</p>
<p>Outro exemplo é o editor de texto html (WYSIWYG), através dele podemos &#8216;decorar&#8217; um texto, adicionar cor, tamanho e borda ao texto e entre outras.</p>
<p>Seguindo essa ideia, criei um simples <strong>Decorator</strong> apenas para compreensão, porem deixo claro que é apenas um exemplo simples e, neste caso, o uso do <strong>Decorator</strong> é desnecessário em produção.</p>
<pre class="brush: php">&lt;?php
abstract class Node
{
abstract function tag();
}

class Paragrafo extends Node {
private $txt;
public function __construct($txt){
$this-&gt;txt = $txt;
}
public function tag(){
return "&lt;p&gt;". $this-&gt;txt ."&lt;/p&gt;";
}

}

abstract class UnionNode extends Node {
protected $node;
public function __construct(Node $node){
$this-&gt;node = $node;
}
}

class Header extends UnionNode {

public function tag(){
echo "&lt;h1&gt;". $this-&gt;node-&gt;tag() ."&lt;/h1&gt;";
}

}

$html = new Header(new Paragrafo(abc));
print_r($html-&gt;tag());</pre>
<h4>Pros:</h4>
<ul>
<li>Promove flexibilidade</li>
<li>Evita a duplicação de código</li>
<li>facilita a manutenção (eliminação, adição e alteração de funcionalidade)</li>
</ul>
<h4>Contras:</h4>
<ul>
<li>Conforme a complexibilidade pode se tornar confuso</li>
<li>Código extenso</li>
</ul>
<p>OBS:<br />
Os exemplos mostrados, são apenas para compreensão do conceito <strong>Decorator</strong>, assim como, os códigos criados servem apenas para entender como funciona na prática. Aconselho o uso do <strong>Decorator</strong> quando sua aplicação necessitar de combinação, adição de coisas ou funcionabilidades em tempo de execução e o nivel de complexibilidade e flexibilidade exigidos sejam tão altos que torna-se penoso fazer através da herança.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/design-patterns/aplicando-o-decorator-em-php-design-pattern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Garbage Collection PHP</title>
		<link>http://www.thiagovalentim.com.br/php/garbage-collection-php/</link>
		<comments>http://www.thiagovalentim.com.br/php/garbage-collection-php/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 21:49:38 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performace]]></category>

		<guid isPermaLink="false">http://www.thiagovalentim.com.br/?p=101</guid>
		<description><![CDATA[O Garbage Collection é um contender onde ficam alocadas variáveis com seus respectivos tipos e valores, também armazenam bits condicionais, esses bits condicionais com valores default de 0 e 1 chamados de &#8216;is_ref&#8217; e &#8216;refcount&#8217; respectivamente. Is_ref: É a quantidade de referências na memória, possue o número default representado por 0, a cada referência na [...]]]></description>
			<content:encoded><![CDATA[<p>O Garbage Collection é um contender onde ficam alocadas variáveis com seus respectivos tipos e valores, também armazenam bits condicionais, esses bits condicionais com  valores default de 0 e 1 chamados de &#8216;is_ref&#8217; e &#8216;refcount&#8217; respectivamente.<span id="more-101"></span></p>
<h2>Is_ref:</h2>
<p>É a quantidade de referências na memória, possue o número default representado por 0, a cada referência na  memória é acrescentado +1 a esse valor, ou seja, se referenciarmos uma variavel o valor de is_ref torna-se 1, se referenciarmos outra variavel o valor de is_ref torna-se 2.</p>
<h2>refcount:</h2>
<p>É a quantidade de variáveis no programa, possue o número default representado por 1, a cada variável criada é somado +1 na contagem de &#8216;refcount&#8217;, assim, se criarmos 2 variáveis teremos refcount igual a 2, e assim por diante.</p>
<p>Na Prática:</p>
<pre class="brush: php"> &lt;?php
$a = 'string';
xdebug_debug_zval('a');
?&gt;
</pre>
<p>irá imprimir:</p>
<pre>a: (refcount=1, is_ref=0)='string'</pre>
<pre class="brush: php"> &lt;?php
$a = "new string";
$b = $a;
xdebug_debug_zval( 'a' );
?&gt;
</pre>
<p>Irá imprimir:</p>
<pre>a: (refcount=2, is_ref=0)='string'</pre>
<pre class="brush: php">&lt;?php
$a = "string";
$c = $b = $a;
xdebug_debug_zval( 'a' );
unset( $b, $c );
xdebug_debug_zval( 'a' );
?&gt; </pre>
<p>irá imprimir:</p>
<pre>a: (refcount=3, is_ref=0)='string'
a: (refcount=1, is_ref=0)='string'</pre>
<pre class="brush: php"> &lt;?php
$a = array( 'meaning' =&gt; 'life', 'number' =&gt; 42 );
xdebug_debug_zval( 'a' );
?&gt; </pre>
<p>irá imprimir:</p>
<pre>a: (refcount=1, is_ref=0)=array (
   'meaning' =&gt; (refcount=1, is_ref=0)='life',
   'number' =&gt; (refcount=1, is_ref=0)=42
)
</pre>
<pre class="brush: php">&lt;?php
$a = array( 'meaning' =&gt; 'life', 'number' =&gt; 42 );
$a['life'] = $a['meaning'];
xdebug_debug_zval( 'a' );
?&gt; </pre>
<p>irá imprimir:</p>
<pre>a: (refcount=1, is_ref=0)=array (
   'meaning' =&gt; (refcount=2, is_ref=0)='life',
   'number' =&gt; (refcount=1, is_ref=0)=42,
   'life' =&gt; (refcount=2, is_ref=0)='life'
)
</pre>
<pre class="brush: php">&lt;?php
$a = 'string';
$b =&amp;$a;
xdebug_debug_zval( 'a' );
?&gt; </pre>
<p>irá imprimir:</p>
<pre>a: (refcount=2, is_ref=1)='string'</pre>
<p>OBS: estou usando o xdebug para debugar, caso utilize o comando xdebug_debug_zval( ); e não funcione, certifique-se de instalar o xdebug, ou verifique se sua IDE possui xdebug.<br />
Para instalar visite o site oficial: <a href="http://www.xdebug.org/">site oficial xdebug</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/php/garbage-collection-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Segurança PHP funções desabilitadas pelo modo seguro</title>
		<link>http://www.thiagovalentim.com.br/php/seguranca-php-funcoes-desabilitadas-pelo-modo-seguro/</link>
		<comments>http://www.thiagovalentim.com.br/php/seguranca-php-funcoes-desabilitadas-pelo-modo-seguro/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 20:35:50 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Segurança]]></category>

		<guid isPermaLink="false">http://www.thiagovalentim.com.br/?p=98</guid>
		<description><![CDATA[O modo seguro em PHP também conhecido como SAFE MODE, serve, como o próprio nome sugere, para tornar o php mais seguro. O safe mode é um parametro que está no php.ini sua função é checar em tempo de execução quem é o proprietário do arquivo que está sendo executado, ele verifica se os diretórios [...]]]></description>
			<content:encoded><![CDATA[<p>O modo seguro em PHP também conhecido como SAFE MODE, serve, como o próprio nome sugere, para tornar o php mais seguro.</p>
<p>O safe mode é um parametro que está no php.ini sua função é checar em tempo de execução quem é o proprietário do arquivo que está sendo executado, ele verifica se os diretórios ou arquivos que estão trabalhando pertencem ao mesmo proprietário, reconhecido pelo sistema como UID.<span id="more-98"></span></p>
<p>Essa opção é muito utilizada em servidores compartilhados, para evitar que outros usuarios interfiram em arquivos ou diretórios de outro proporietário.</p>
<p>Funcões Desabilitadas:</p>
<p><strong>dbase_open()</strong> abre um banco de dados dBase com    o modo de acesso dado.<br />
<strong>exec()</strong> executa um comando dado, um programa externo.<br />
<strong>fopen()</strong> abre um arquivo ou uma url<br />
<strong>mkdir()</strong> cria um diretório.<br />
<strong>chdir()</strong> muda de diretório.<br />
<strong>rmdir()</strong> remove um diretório.<br />
<strong>rename()</strong> renomeia um arquivo ou diretório.<br />
<strong>copy()</strong> copia um arquivo.<br />
<strong>chgrp()</strong> modifica o grupo de arquivo.<br />
<strong>chown()</strong> modifica o dono do arquivo.<br />
<strong>chmod()</strong> modifica a permissão do arquivo.<br />
<strong>set_time_limit()</strong> limita o tempo de execução do script</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/php/seguranca-php-funcoes-desabilitadas-pelo-modo-seguro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Segurança PHP Modulo Apache</title>
		<link>http://www.thiagovalentim.com.br/php/seguranca-php-modulo-apache/</link>
		<comments>http://www.thiagovalentim.com.br/php/seguranca-php-modulo-apache/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 19:50:43 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Segurança]]></category>

		<guid isPermaLink="false">http://www.thiagovalentim.com.br/?p=95</guid>
		<description><![CDATA[O php instalado em modulo apache herda permissões de usuario, muitas vezes chamado &#8216;nobody&#8217;, combinado ao uso de acesso ao banco de dados com o php causa uma falha de segurança, pois um script malicioso pode acessar e modificar os dados sem precisar de senha. Outro erro é usar o apache com permissão administrador (root), [...]]]></description>
			<content:encoded><![CDATA[<p>O php instalado em modulo apache herda permissões de usuario, muitas vezes chamado &#8216;nobody&#8217;, combinado ao uso de acesso ao banco de dados com o php causa uma falha de segurança, pois um script malicioso pode acessar e modificar os dados sem precisar de senha.</p>
<p>Outro erro é usar o apache com permissão administrador (root), isso deixa o sistema inteiro funerável.<span id="more-95"></span></p>
<h2><strong>Solução:</strong></h2>
<p>Existe uma solução simples que consiste em usar a diretiva <strong>open_basedir</strong> e especificar um diretório, assim,  somente tentativas de acesso vindas desse diretório será permitida, a diretiva open_basedir está no httpd.conf.</p>
<p>Esta diretiva vai limitar os arquivos que podem ser acessados e somente aceitará tentativas de acesso de arquivos que estão dentro dos diretórios especificados em <strong>open_basedir</strong>.</p>
<p>Imagine que algum script malicioso que usa <a href="http://www.php.net/manual/pt_BR/function.fopen.php">fopen()</a> ou <a href="http://www.php.net/manual/pt_BR/function.gzopen.php">gzopen()</a> que vem de outro host, tenta acessar o arquivo, caso tenha configurado a diretiva <strong>open_basedir</strong>, essa tentativa de acesso será verificada e barrada.</p>
<h3><strong>Para configurar a diretiva open_basedir:</strong></h3>
<p>Vá em httpd.conf, localize a diretiva open_basedir, logo depois, atribua os diretorios que serão aceitos.</p>
<p>Para restringir acesso a apenas um diretório comece com barra e termine com barra, exemplo:</p>
<p>&#8220;open_basedir = /dir/incl/&#8221;</p>
<p>Terá acesso apenas ao diretório &#8220;incl&#8221;</p>
<p>caso queira restringir acesso ao diretório e subdiretórios comece com barra, espeficique o diretorio,  mas não termine com barra, exemplo:</p>
<p>&#8220;open_basedir = /dir&#8221;</p>
<p>Assim, será reconhecidos todos os subdiretorios que estão em &#8216;dir&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/php/seguranca-php-modulo-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Namespace em PHP</title>
		<link>http://www.thiagovalentim.com.br/php/namespace-em-php/</link>
		<comments>http://www.thiagovalentim.com.br/php/namespace-em-php/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 20:22:47 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.thiagovalentim.com.br/?p=47</guid>
		<description><![CDATA[Conceito de NameSpace: É um recurso que possibilita agrupar suas classes e até referenciar outros namespaces, formando uma especie de lib , quando incluimos um namespace podemos chamar as classes, métodos, variáveis e até outros namespaces que estão agrupados no namespace que incluimos, é um local dentro do programa onde são localizadas as classes, métodos [...]]]></description>
			<content:encoded><![CDATA[<h2>Conceito de NameSpace:</h2>
<p>É  um recurso que possibilita agrupar suas classes e até referenciar outros namespaces, formando uma especie de lib , quando incluimos um namespace podemos chamar as classes, métodos, variáveis e até outros namespaces que estão agrupados no namespace que incluimos, é um local dentro do programa onde são localizadas as classes, métodos e etc.<br />
<span id="more-47"></span><br />
A grande vantagem disso é que evitaremos conflitos entre nomes de classes, variáveis e métodos, além de deixar o código mais limpo.</p>
<h3>Como o Namespace Atua</h3>
<p>Todas as classes e métodos recebem automaticamente o nome do namespace como prefixo, sendo que dentro do namespace as classes locais terão procedencia sobre as globais.</p>
<h3>Como usa-lo:</h3>
<p>Após algumas discuções foi adotado a barra &#8216;\&#8217; como operador desse recurso do php. Deve-se sempre incluir o namespace como primeira instrução no código, somente a instrução &#8216;declare&#8217; pode ser feita antes.</p>
<p>Exemplo de inlcusão:</p>
<pre class="brush: php">&lt;?php
/* Declarando o Namespace */
namespace teste;

Class teste
{
public function teste ()
{
echo "teste";
}
}

/* Chamei a função teste dentro do namespace teste */
teste\teste();
?&gt;
</pre>
<p>Observe como é o comportamento com 2 namespace delcarados:</p>
<pre class="brush: php">&lt;?php
/* Declarando o Namespace */
namespace teste;

Class teste
{
public function teste ()
{
echo "teste";
}
}

/* Chamei a função teste dentro do namespace teste */
teste\teste();

/* Declarando o Namespace */
namespace teste\outro;

Class teste
{
public function teste ()
{
echo "teste";
}
}

/* Chamei a função teste dentro do namespace teste/outro */
teste\outro\teste();
?&gt;
</pre>
<p>Como podemos notar, o namespace criou um especie de hierarquia é isso que diferencia e evita conflitos, alem de facilitar nossa organização.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/php/namespace-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entenda o Encapsulamento (oop)</title>
		<link>http://www.thiagovalentim.com.br/design-patterns/entenda-o-encapsulamento-oop/</link>
		<comments>http://www.thiagovalentim.com.br/design-patterns/entenda-o-encapsulamento-oop/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 21:53:44 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.criawebs.com.br/blog/wordpress/?p=8</guid>
		<description><![CDATA[Encapsulamento: Consiste em separar o código em partes lógicas criando códigos isólados com o intuíto de proteger os dados trabalhados, exemplo: Para dirigir um carro, o motorista não precisa conhecer o funcionamento do motor, apenas saber a técnica de dirigir, seguindo essa lógica, o programador esconde tudo o que o usuário não necessita saber. Isso [...]]]></description>
			<content:encoded><![CDATA[<h2><em>Encapsulamento:</em></h2>
<p>Consiste em separar o código em partes lógicas criando códigos isólados com o intuíto de proteger os dados trabalhados, exemplo:<br />
<span id="more-8"></span><br />
Para dirigir um carro, o motorista não precisa conhecer o funcionamento do motor, apenas saber a técnica de dirigir, seguindo essa lógica, o programador esconde tudo o que o usuário não necessita saber. Isso protege a lógica empregada no sistema dificultando tentativas de burlar seu código.</p>
<p>Além de proteger seu sistema, o <em>encapsulamento</em> torna-o mais flexível e apto para adicionar, alterar e excluir funcionalidades em seu código.</p>
<h3>Formas de <strong>Encapsulamento</strong>:</h3>
<ul>
<li>Modificadores de Acesso</li>
<li>Herança</li>
<li>Interface</li>
<li>Polimorfismo</li>
</ul>
<h4>Modificadores de Acesso:</h4>
<p>São estados de variáveis ou de métodos que modificam as permissões de acesso a visualização de variáveis ou métodos. São atribuidas pelas palavras reservadas: public, protected, private.  Exemplo:</p>
<p><code>private $varivavel = '';</code><br />
<code>protected $variavel ='';</code><br />
<code>public $variavel ='';</code></p>
<h4>Herança:</h4>
<p>É uma forma de criar uma nova classe através de outra que ja existe, com isso, a classe que foi criada herdará métodos e atributos da classe pai. Em resumo, a classe pai é uma classe generalizada, com métodos genericos, já a classe filha é mais especifica, com métodos especificos.</p>
<h4>Interface:</h4>
<p>É uma classe, porém não possui implementações ela apenas indica o que deve ser implementado, é basicamente um espellho com apenas as interfaces do programa, sendo que as classses que implementam-a assumem uma especie de contrato e são obrigadas a implementarem as interfaces especificadas.</p>
<h4>Polimorfismo:</h4>
<p>É a capacidade de mudar de forma, uma instancia pode assumar outros formas:<br />
Comparando com a lingua portuguesa temos o seguinte exemplo:<br />
Ontem sai para <strong>dançar</strong> com uns amigos, mas acabamos <strong>dançando</strong><br />
porque não conseguimos encontrar um lugar que nos agradasse.</p>
<p>Observe que o verbo dançar teve uma variação.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/design-patterns/entenda-o-encapsulamento-oop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Pattern Introdução</title>
		<link>http://www.thiagovalentim.com.br/design-patterns/design-pattern-introducao/</link>
		<comments>http://www.thiagovalentim.com.br/design-patterns/design-pattern-introducao/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 20:52:08 +0000</pubDate>
		<dc:creator>Thiago dos Santos Valentim</dc:creator>
				<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.criawebs.com.br/blog/wordpress/?p=4</guid>
		<description><![CDATA[Para muitos programadores encontrar a solução de um problema é um prazer, porém quando o tempo é curto torna-se um pesadelo. Programadores experiêntes viveram em épocas em que não havia um padrão documentado para resolver problemas frequentes no desenvolvimento de software, era necessário criar do &#8216;zero&#8217; uma solução. Christopher Alexander, Arquiteto da Informação, criou o [...]]]></description>
			<content:encoded><![CDATA[<p>Para muitos programadores encontrar a solução de um problema é um prazer, porém quando o tempo é curto torna-se um pesadelo.</p>
<p>Programadores experiêntes viveram em épocas em que não havia um padrão documentado para resolver problemas frequentes no desenvolvimento de software, era necessário criar do &#8216;zero&#8217; uma solução.<br />
<span id="more-4"></span></p>
<p>Christopher Alexander, Arquiteto da Informação, criou o primeiro conceito de <strong>padrões de projetos</strong> na dêcada de 70.</p>
<h2>Primeiros Conceitos de <strong>Padrões de Projetos:</strong></h2>
<ul>
<li><em>Encapsulamento:</em></li>
<li><em>Generalidade:</em></li>
<li><em>Equilíbrio</em></li>
<li><em>Abstração</em></li>
<li><em>Abertura</em></li>
<li><em>Combinatoriedade</em></li>
</ul>
<h2>O que é <strong>Design Patterns</strong></h2>
<p>São soluções para problemas frequentes de desenvolvimento de software. Em geral, pode ser adaptado e utilizado em qualquer linguagem de programação que tenha suporte a orientação a objetos.</p>
<p>Para simplificar, imagine que você precisa instanciar uma classe apenas uma vez e essa instancia precisa ter acesso global&#8230;logo, pensamos em &#8216;variaveis globais&#8217;, porém não é uma boa ideia, pois poderá causar problemas maiores no futuro, então, foi estabelecido um padrão chamado &#8216;singleton&#8217;. Com o padrão <strong>singleton</strong> teremos uma unica instancia e garantiremos um ponto global de acesso.</p>
<p><strong>Design Patterns</strong> são soluções testadas e flexíveis com o intuíto de reutilização de códigos, porém não se trata de uma receita com formulas prontas, pois cada aplicação possui suas particularidades e dependendo necessitará de adaptações na estrutura do padrão. Também não é aconselhável seu uso em excesso ou para coisas simples.</p>
<p>Melhor do que decorar todos os padrões é conhecer os principios dos padrões. Todos os padrões visam a &#8216;flexibilidade&#8217; e &#8216;reutilizaçao&#8217;, principios como: <cite>&#8220;encapsule o conceito que varia&#8221;</cite> ou <cite>&#8220;programe para uma interface e nao para uma implementação&#8221;</cite> podem fazer a diferença.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thiagovalentim.com.br/design-patterns/design-pattern-introducao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

