CategoryPHP

Entendendo o cURL

Existe uma extensão do php chamada cURL, talvez seja a extensão mais útil e menos entendida do php. Diretamente do manual do php temos que o curl suporta diversos protocolos: http, https, ftp, gopher, telnet, dict, file, e ldap.

Eu mesmo já fiz alguns posts utilizando o cURL aqui no blog. Como o meu contexto é a web, e trabalho frequentemente com o protocolo http, irei me ater a ele.
Pense no cURL como uma forma de realizar requisições. Sabe quando você faz download de uma imagem, clica num link para abrir uma página web, ou envia um formulário ? Todas essas coisas são requisições http. Com essa lib nós conseguimos fazer com que a nossa aplicação, nosso programa php server-side, faça requisições por nós.
Continue reading

Como trabalhar com array de checkboxes opcionais 2

Dando continuidade ao artigo anterior:

http://wbruno.com.br/sql/como-trabalhar-com-array-de-checkboxes-opcionais/

Screen Shot 2015-04-18 at 20.10.45

Iremos escrever enfim, os códigos para fazer esse CRUD com checkboxes.
Continue reading

Desmistificando URLs amigáveis com php e htaccess (apache)

Boas!!
A quantidade de pessoas que perguntam como fazer URLs amigáveis no forum.imasters é enorme. Seja em WebStandars, SEO ou php, a dúvida é sempre a mesma.
Continue reading

Algoritmo para exibir número de 1 a 100 aleatoriamente, sem repetir

Acabei de ver um cara perguntando isso no fórum.imasters.

Ele queria saber como exibir aleatoriamente números de 1 a 100, sem repeti-los.
Bom, primeiro precisamos dos tais números de 1 a 100

$arr = range(1,100);

Ok, então preciso exibir cada um desses números aleatoriamente, sem repeti-los.
O primeiro código que me veio na cabeça, foi o seguinte:

<?php

$arr = range(1,100);

while( sizeof( $arr )>0 )
{
	shuffle( $arr );
	echo $arr[0], '<br />';
	unset( $arr[0] );
}

Não é o “melhor” código, nem o mais performático. Mas não é isso que me fez escrevê-lo.
Fiz apenas para “ver se resolvia”. Worse is better.

Ok, vamos lá. O loop ali, anda no array até ele “acabar”, pois conforme vou exibindo a primeira posição do array, eu removo este item dele.

Funciona. Mas note o shuffle ali dentro do loop. A cada volta ele é feito desnecessariamente.
Se desordenei o array uma vez, não preciso ficar fazendo isso a cada elemento que for exibir. Os próximos elementos já estarão “em ordem aleatória”.

Então, esse “incomodo” que estava atrapalhando a performance, e tornava o algoritmo mais complicado do que preciso, podemos jogar para fora do loop, e apenas exibir o array:

<?php

$arr = range(1,100);

shuffle( $arr );
foreach( $arr AS $each )
{
	echo $each, '<br />';
}

Bem melhor.
Mas o importante foi a iniciativa de começar. Precisei de cerca de 4 minutos para ler o problema, formular o código ruim, e depois chegar a solução final.

O importante é não travar, não ficar só pensando, só especulando.. sem rascunhar, sem tentar.
Tente, comece fazendo um código ruim, desde que depois vc o melhore.

Verificar com php se o site está online (no ar)

Vi dois caras no fórum perguntando sobre isso, então resolvi fazer um post.

Um simples código com a lib cURL do php, para verificar se um site está ou não no ar.

<?php

	function curl_info($url){
		$ch = curl_init();
		curl_setopt( $ch, CURLOPT_URL, $url );
		curl_setopt( $ch, CURLOPT_HEADER, 1);
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
		curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
		curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
        
		$content = curl_exec( $ch );
		$info = curl_getinfo( $ch );

		return $info;
	}

	$site = 'http://www.locaweb.com.br';
	$info = curl_info( $site );
	if( $info['http_code']==200 ) {
		echo '<u>'.$site . '</u> - <strong>está no ar!!</strong><br />';
	} else {
		echo '<u>'.$site . '</u> - está fora do ar<br />';
	}


	$site = 'http://www.locaweba.com.br';
	$info = curl_info( $site );
	if( $info['http_code']==200 ) {
		echo '<u>'.$site . '</u> - <strong>está no ar!!</strong><br />';
	} else {
		echo '<u>'.$site . '</u> - está fora do ar<br />';
	}

Capturo os cabeçalhos da requisição e verifico se o http_status é igual a 200.
Caso seja, significa que o site está sim no ar.

Note que deixei a entrada:
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
para caso o site possua algum redirecionamento, como é o caso da locaweb, que redireciona a home para o /default.html

É isso galera, comentem caso usem. =)