Lendo um HTML com php utilizando a biblioteca cURL

É um artigo simples onde explico como pegar o conteudo HTML de uma url qualquer e salvar em uma variavel com php.

Eu utilizei o modelo para gerar um pdf mas existem outras milhares de utilizacoes.


<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, “http://www.gilix.com.br/”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER[‘HTTP_USER_AGENT’]);

$pagina =  curl_exec($ch);

?>

<textarea cols=”130″ rows=”60″><?php echo $pagina; ?></textarea>

Explicacoes:

CURLOPT_RETURNTRANSFER: TRUE para retornar a transferencia como uma string do valor de retorno de curl_exec () em vez de diretamente para a saída.

CURLOPT_HEADER: TRUE para incluir o cabeçalho na saída.

CURLOPT_USERAGENT: Envia o cabeçalho do seu browser para o site assim simulando que voce esta acessando a pagina do seu browser.

Abaixo um exemplo de uso do cURL para puxar os resultados de loteria da página da Folha de São Paulo.

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www1.folha.uol.com.br/folha/loterias/loteria_federal.shtml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
$core = split('<!--LOTERIA_FEDERAL-->', $result);
$main = split('<!--/LOTERIA_FEDERAL-->', $core[1]);
echo $main[0];
?>

 

Fontes:

http://hk2.php.net/curl_setopt
http://md.php.net/curl_init

Recortando imagens com jCrop e PHP

Quando desenvolvemos um sistema com upload de fotos envolvendo miniaturas, é muito comum um cliente não gostar dos thumbnails gerados automaticamente pelo PHP, já que todos devem possuir o corte nas mesmas coordenadas X e Y. Existem duas maneiras de resolver o problema: uma é criar um novo campo de upload para que o cliente já mande a miniatura no tamanho certinho. A outra é desenvolver uma interface em javascript para o cliente selecionar, após o upload, a área da foto que ele deseja utilizar na miniatura.

O plugin jCrop que apresento neste artigo facilita a implementação da segunda solução. Além de desenvolver o frontend, vou também mostrar a parte em PHP que redimensiona e recorta a imagem – tudo isso utilizando nossa classe m2brimagem.

Configurações iniciais

Como se trata de um plugin jQuery precisamos da chamada para a biblioteca em algum lugar de nosso HTML. Além disso, vamos precisar também incluir o arquivo fonte do jCrop com sua folha de estilo e imagens necessárias. Clique aqui para fazer o download dos arquivos.

<link href="css/jquery.Jcrop.css" rel="stylesheet" type="text/css" />
<script src="js/jquery.min.js"></script>
<script src="js/jquery.Jcrop.js"></script>

Desse jeito já dá pra utilizar o jCrop em sua forma mais básica:

<img src="imagem.jpg" width="634" height="340" id="jcrop" />
<script type="text/javascript">
$(function(){ 
	$('#jcrop').Jcrop(); 
});
</script>

No exemplo acima, ‘#jcrop’ é o atributo ID da imagem alvo do crop. Você pode utilizar qualquer tipo de seletor do jQuery (classes, sub-elementos etc.), aplicando o frontend do crop em vários elementos img.

Muito legal, mas e pra salvar a imagem? O plugin funciona apenas no cliente, na interface da aplicação. O crop mesmo tem que ser feito no servidor.

Processando o crop com PHP

Primeiramente vamos entender como funciona o jCrop. Seu método de marcação na imagem retorna um array com as dimensões e o posicionamento do crop. Ele possui alguns eventos, aqui vamos utilizar os dois principais: onChange e onSelect. O onChange executa uma função qualquer no momento que a marcação é alterada e o onSelect executa uma função qualquer no momento que a seleção está em andamento.

Sendo assim, vamos utilizar, por enquanto, a função exibePreview em ambos os casos. O que ela faz é atualizar uma pré-visualização do resultado final do crop, além de armazenar as variáveis para envio e processamento no servidor.

function exibePreview( c )
{
	// c.x, c.y, c.x2, c.y2, c.w, c.h
};

A função recebe o array c, aquele com as dimensões e coordenadas do crop. Os valores do array são:

w largura (width) do crop
h altura (height) do crop
x1 e x2 posições horizontais do crop na imagem
y1 e y2 posições verticais do crop na imagem

Note que é aí que termina o trabalho do jCrop. Os valores devem ser processados no PHP. No nosso exemplo, conforme mencionei anteriormente, a função exibePreview vai registrar as posições em inputs do tipo hidden no formulário de envio.

function exibePreview( c )
{
	// campos hidden que armazenam os valores
	$('#x').val(c.x);
	$('#y').val(c.y);
	$('#x2').val(c.x2);
	$('#y2').val(c.y2);
	$('#w').val(c.w);
	$('#h').val(c.h);
};

Além disso ela deve atualizar a pré-visualização da imagem recortada. Pra isso vamos precisar do tamanho original da imagem. Se você está usando o mesmo formato de imagem, basta utilizar os mesmos valores sempre. No nosso caso, como a imagem é enviada via formulário, utilizamos a função getimagesize do php para retornar a largura (índice 0 do array de retorno) e a altura (índice 1). Elas são necessárias para calcular o posicionamento do crop. A idéia é criar um div com as dimensões do crop, mascarando a imagem original.

function exibePreview(c)
{
	var rx = 100 / c.w;
	var ry = 100 / c.h;

	// atualiza CSS do preview para refletir o tamanho da imagem enviada 
	// e o posicionamento do crop
	$('#preview').css({
		width: Math.round(rx * <?php echo $imagesize[0]; ?>) + 'px',
		height: Math.round(ry * <?php echo $imagesize[1]; ?>) + 'px',
		marginLeft: '-' + Math.round(rx * c.x) + 'px',
		marginTop: '-' + Math.round(ry * c.y) + 'px'
	});

	// campos hidden que armazenam os valores
	$('#x').val(c.x);
	$('#y').val(c.y);
	$('#x2').val(c.x2);
	$('#y2').val(c.y2);
	$('#w').val(c.w);
	$('#h').val(c.h);
}

Com a função exibePreview completa, podemos agora atualizar nossa chamada do jCrop:

$('#jcrop').Jcrop({
	onChange: exibePreview,
	onSelect: exibePreview,
	aspectRatio: 1
});

Note a propriedade aspectRatio, utilizada para amarrar largura e altura do crop, mantendo a proporção.

Tudo OK no frontend. Abaixo você confere o código do formulário de envio e o script para processamento da imagem pós-envio (validação e redimensionamento para evitar arquivos gigantes no crop).

<form name="frm-jcrop" id="frm-jcrop" method="post" action="index.php" enctype="multipart/form-data">
	<p>
		<label>Envie uma imagem:</label>
		<input type="file" name="imagem" id="imagem" />
		<input type="submit" value="Enviar" />
	</p>
</form>
// processa arquivo
$imagem		= isset( $_FILES['imagem'] ) ? $_FILES['imagem'] : NULL;
$img		= '';
// verifica se arquivo foi enviado para o servidor
if( $imagem['tmp_name'] )
{
	// move arquivo para o servidor
	if( move_uploaded_file( $imagem['tmp_name'], $imagem['name'] ) )
	{
		include( 'm2brimagem.class.php' );
		$oImg = new m2brimagem( $imagem['name'] );
		if( $oImg->valida() == 'OK' )
		{
			// redimensiona imagem para evitar arquivos grandes
			$oImg->redimensiona( '400', '', '' );
			$oImg->grava( $imagem['name'] );
			// retorna dimensões da imagem e configura variáveis para o jCrop
			$imagesize 	= getimagesize( $imagem['name'] );
			$img		= '<img src="'.$imagem['name'].'" id="jcrop" '.$imagesize[3].' />';
			$preview	= '<img src="'.$imagem['name'].'" id="preview" '.$imagesize[3].' />';
		}
		else
		{
			// imagem inválida, exclui do servidor
			unlink( $imagem['name'] );
		}
	}
}

Está quase pronto. Temos um formulário para envio da imagem, e todo o javascript que vai processar o crop e atualizar o nosso preview. Falta o código PHP que vai de fato recortar a imagem enviada. Para isso utilizaremos a classe m2brimagem (leia mais sobre ela aqui).

O processamento será feito via AJAX/post, apenas para agilizar o retorno ao usuário, mas nada impede você de fazer o crop em um novo envio do formulário.

$('#btn-crop').click(function(){
	$.post( 'crop.php', {
		img:img, 
		x: $('#x').val(), 
		y: $('#y').val(), 
		w: $('#w').val(), 
		h: $('#h').val()
	}, function(){
		$('#div-jcrop').html( '<img src="'+img+'?'+Math.random()+'" width ="'+$('#w').val()+'" height ="'+$('#h').val()+'" />' );
	});
	return false;
});

Uma vez processado, nosso formulário exibirá uma nova tela, com a opção de recortar e salvar um pedaço da imagem enviada. No exemplo você pode observar que, além da imagem e da interface para crop, exibimos também duas janelas adicionais: o preview, já comentado anteriormente; e um pequeno debug, exibindo as informações e coordenadas em tempo real (tudo isso atualizado via exibePreview).

Ao clicar no botão salvar, o usuário executa, via AJAX, o script abaixo, mais uma vez utilizando a classe m2brimagem para o processamento. O script recebe como parâmetro o ponto inicial X e Y do crop, além da largura e altura do mesmo, e cria a versão recortada da imagem original. Após a execução, nosso elemento img é atualizado. Como nesse caso a imagem final possui o mesmo nome da imagem original, utilizamos o “?” com um número randômico (Math.random()) para evitar cache (essa dica é bem legal para sistemas com upload de imagens).

if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
	include( 'm2brimagem.class.php' );
	$oImg = new m2brimagem( $_POST['img'] );
	if( $oImg->valida() == 'OK' )
	{
		$oImg->posicaoCrop( $_POST['x'], $_POST['y'] );
		$oImg->redimensiona( $_POST['w'], $_POST['h'], 'crop' );
		$oImg->grava( $_POST['img'] );
	}
}
exit;

Outras opções

Talvez tudo pareça um pouco confuso olhando os códigos assim de forma separada. Baixe os exemplos que você vai entender melhor. No site do plugin você encontra a documentação completa, em inglês, além de outros exemplos. Uma opção que utilizo bastante é especificar largura e altura fixas. Quando o usuário faz o upload de um avatar, por exemplo, vale a pena limitar o tamanho no jCrop (ou então fazer alguma coisa proporcional). As propriedades minSize e maxSize delimitam a área mínima e máxima do crop.

$('#jcrop').Jcrop({
	onChange: exibePreview,
	onSelect: exibePreview,
	minSize		: [ 200, 200 ], 
	maxSize		: [ 200, 200 ],
	allowResize	: false,
	addClass	: 'custom'
});

No exemplo acima o crop vai ter sempre 200×200 pixels de dimensão. Além disso configuramos a propriedade allowResize com false, para evitar o redimensionamento da seleção. Outra propriedade legal é a addClass, para definir um estilo personalizado na seleção. No exemplo abaixo a linha fica com uma borda sólida ao invés do pontilhado.

.custom .jcrop-vline, .custom .jcrop-hline {
	background: #FF3366;
}

Esse foi o jCrop, um bônus e tanto para a interface dos seus sistemas. Espero que tenham gostado da leitura e qualquer dúvida utilizem a área de comentários abaixo. Até a próxima!

 

Fonte: www.daviferreira.com

Consultando LDAP com PHP

<?php
// Variaveis Globais
$ldap_server = "seudominio.com.br"; 
/*Usamos o nome do dominio ou o nome do Servidor do dominio Casa 
seja 1 servidor Apenas*/
$dominio = "seudominio\\"; /*Aqui usaremos o nome Netbios do dominio*/

// Usuario para autenticacao na Base LDAP
$auth_user = "seudominio\usuario_de_consulta"; 
/*nome Netbios\usuario*/

$auth_pass = "senha_do_usuario"; 
/*Senha do usuario do dominio*/

// Caminho LDAP do Dominio
$base_dn = "OU=DOMINIO,DC=seudominio,DC=com,DC=br"; 
/*Nome do Dominio completo + OU principal*/

// Caminho LDAP do Grupo para consulta
$filter = "(&(objectClass=user)(memberOf=CN=grupo,OU=ou_do_grupo,
OU=ou_principal,DC=seudominio,DC=com,DC=br))";

//Funcao para conectar na base LDAP listar os usuarios de um grupo.

if (($connect=@ldap_connect($ldap_server))) {
 if (($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
 if (($search=@ldap_search($connect, $base_dn, $filter))){
 $number_returned = ldap_count_entries($connect,$search);
 $info = ldap_get_entries($connect, $search);

   for ($i=0; $i < $info["count"]; $i++){

     $user_pure = $info[$i]["samaccountname"][0];
     $user_up = strtoupper($user_pure);
     echo "Ususario - $user_up<br>";
   }

 }

 }

}
// Fecha a conexao LDAP.
ldap_close($connect);
?>

Fonte: www.revistaphp.com.br

Mais informações sobre AD:
http://www.learnthat.com/Software/learn/1295/Introduction-to-Active-Directory/

Abaixo uma breve descrição das variáveis:
$ldap_server -> essa variavel deve apontar para o servidor Active Directory, que pode ser preenchida com um nome FQDN ou o IP do servidor, ou seja, será a base onde consultaremos o(s) usuário(s).

$dominio -> essa variável deve conter o nome NETBIOS do domínio que é o nome curto do domínio do seu Active Directory. Suponhamos que seu domínio fosse phpldap.com.br , o nome curto(NETBIOS) para esse domínio seria phpldap que atribuímos a variável ‘$dominio’.

$auth_user -> esse variável deve conter o nome de um usuário existente na base do Active Diretory. Suponhamos que você tenha na sua base o usuário ‘teste’, nesse caso usando o exemplo acima com o nome do domínio phpldap a variável seria preenchida assim ‘phpldap\teste’. Esse usuário serva para se conectar a base de dados.
$auth_pass -> essa variável deve ser preenchida com a senha do usuário teste do Active Directory, conforme exemplo acima.

$base_dn -> usando o exemplo do domínio phpldap.com.br essa variável ficaria da seguinte forma ‘OU=phpldap,DC=phpldap,DC=com,DC=br’.

$filter -> deve ser preenchida com o caminho LDAP completo do grupo no qual você deseja pesquisar os usuários.

Obs: o código acima consulta usuários na base de dados de um servidor Active Directory, e também pode ser adaptado para consultar usuários em uma base de dados OPENLDAP.

Upload de arquivos maiores que 30mb via PHP

Uma coisa que poucas pessoas sabem é que via PHP é possível fazer download de um arquivo maior que o padrão “30mb”. porém isso implica em uma série de coisas, como lentidão para enviar os arquivos e tal mas localmente fica ótimo…

Bem, em primeira mão vamos configurar o php.ini ajustando alguns valores para que o mesmo funcione e também no httpd.conf do apache.

Lembrando que estuu no Fedora Core 9, mas creio que não tem divergencia para outros.

Editando o php.ini “/etc/php.ini”

Voce tem que configurar o php p/ aceitar limites maiores de upload. Vc
tem q configurar:

upload_max_filesize – eh a diretiva no php.ini que diz o tamanho do
maior arquivo a ser enviado via post p/ o php.
post_max_size – eh a diretiva que diz o tamanho total do post. Um post
“multipart” pode ter varios arquivos nele, entao esse tamanho tem que
ser maior que o upload_max_filesize
memory_limit – se o seu php for configurado com –enable-memory-limit,
voce tem que configurar essa diretiva p/ ser maior que o tamanho do
post_max_size, afinal o php vai colocar esse arquivo na memoria
durante o upload.

max_input_time – eh o tempo que o seu script fica esperando por um
dado vindo do cliente. Esse valor deve ser razoavelmente alto, caso vc
mande arquivos de varios MB.
max_execution_time – eh o tempo de execucao do seu script. Ele deve
ser maior que o max_input_time, p/ que seu script funcione a contento.

No apache tbm existe a configuracao LimitRequestBody, que eh
equivalente ao post_max_size. Caso essa configuracao nao exista, entao
nao existe limite, caso exista, configure ela igual ao post_max_size.

Espero ter ajuado… Valeu…

Usando FTP com o PHP

Explicamos as funções para realizar transferência de arquivo, utilizando o protocolo FTP, através de páginas PHP. Exemplo de código para aprender a transferir arquivos ao servidor.
Constantemente nos encontramos baixando arquivos de Internet: Um programinha que alguém nos recomenda, a foto da modelo de moda ou os clásicos MP3’s . Sem nos dar conta de um modo ou outro fazemos uso do protocolo FTP (File Transfer Prococol) para baixar arquivos desde um Servidor. Baixamos mais do que transferimos… em outras palavras “Tomamos mais do que damos”. Este artigo pretende explicar como transferir ou permitir que seus usuários transfiram (colaborem) – arquivos ao Servidor usando as funções FTP incluídas no PHP. Lembrem do velho ditado que diz: “Mais vale dar que receber”.

O QUE É O FTP?

Siglas de File Transfer Protocol ou Protocolo de Transferência de Arquivos. Como seu próprio nome o indica, é um protocolo (que pertence a TCP/IP) que se encarrega da transferência de arquivos entre computadores conectados em rede. Ao se basear na arquitetura Cliente / Servidor, o FTP faz uso de dois componentes básicos:

  • Um cliente FTP. O qual se encarrega de se conectar a um servidor FTP para baixar ou transferir arquivos.
  • Um servidor FTP. Encarrega-se processar as petições dos clientes FTP, permitido-lhes baixar ou transferir arquivos através dele.

Para nos conectarmos a um servidor FTP, e assim, poder realizar consultas nele, necessitaremos dos seguintes dados:

  • Nome do Servidor. É a IP ou Nome do Servidor FTP ao qual temos que nos conectar, tal como: 65.134.10.5 ou ftp.billysite.net
  • Porto. Número do porto do servidor. Por padrão é 21.
  • Conta de Usuário. É o nome da conta de usuário que temos atribuído. Há que certificar-se que conta com as permissões necessárias para transferir ou baixar arquivos. Se não tiver uma conta de usuário se pode acessar como usuário anônimo utilizando o nome de usuário anonymous.
  • Chave de acesso. É nossa senha de conta de usuário. Se acessarmos como usuário anônimo colocaremos como chave nosso correio-e a maneira de cortesia.

Uma vez conectados ao servidor FTP poderemos fazer uso de seus comandos para realizar as tarefas que melhor acharmos conveniente. Este artigo não pretende esboçar em grande medida o tema de FTP, por não ser este o objetivo fundamental do mesmo. Para mais informações sobre sobre este aspecto lhe recomendo revisar o artigo de Michael Calore: “El ABC de la transferencia de archivos por Internet”, disponível no web site de WebMonkey.

FUNÇÕES FTP EM PHP.

PHP faz uso de funções FTP para acessar a um servidor web, a maneira de cliente. A seguir mostraremos as funções básicas a usar no script, assim como uma breve descrição das mesmas. Se quiser maior detalhe destas e outras funções FTP lhe aconselho consultar a documentação oficial do PHP, disponível em: http://www.php.net/docs.php.

Função
Sintaxe
Descrição
ftp_connect int ftp_connect ( string host [, int port])
host: Nome ou IP de Servidor FTP.
port: Porto, padrão 21.
Estabelece uma conexião FTP ao host especificado.
ftp_login int ftp_login( int ftp_stream, string username, string password)
ftp_stream: Manejador FTP obtido com ftp_connect.
username: Nome de usuário.
password: senha de usuário.
Começa a sessão em uma conexão FTP.
ftp_pasv int ftp_pasv ( int ftp_stream, int pasv)
ftp_stream: Manejador FTP obtido com ftp_connect.
pasv: Se for TRUE ativa o modo passivo, se for FALSE ou desativa.
Ativa ou desativa o modo passivo. Em modo passivo, as conexões de daos são iniciadas pelo cliente, ao invés de serem iniciadas pelo servidor.
ftp_pwd int ftp_pwd ( int ftp_stream)
ftp_stream
: Manejador FTP obtido com ftp_connect.
Devolve o nome do diretório atual.
ftp_put int ftp_put ( int ftp_stream, string remote_file, string local_file, int mode)
ftp_stream: Manejador FTP obtido com ftp_connect.
remote_file: Nome com o qual se salvará o arquivo no Servidor FTP.
local_file: Arquivo local que se encontra na máquina cliente.
mode: Modo de transferência, pode ser FTP_ASCII ou FTP_BINARY.
Transfere uma arquivo ao Servidor FTP.
ftp_nlist int ftp_nlist ( int ftp_stream, string directory)
ftp_stream: Manejador FTP obtido com ftp_connect.
directory: Rota do diretório a listar.
Devolve uma lista de arquivos do diretório dado.
ftp_size int ftp_size ( int ftp_stream, string remote_file)
ftp_stream: Manejador FTP obtido com ftp_connect.
remote_file: Nome do arquivo no Servidor FTP.
Devolve o tamanho do arquivo especificado. Nem todos os servidores suportam esta característica.
ftp_mdtm int ftp_mdtm ( int ftp_stream, string remote_file)
ftp_stream: Manejador FTP obtido com ftp_connect.
remote_file: Nome do arquivo no Servidor FTP.
Devolve a data da última modificação do arquivo especificado. Nem todos os servidores suportam esta característica
ftp_quit int ftp_quit ( int ftp_stream)
ftp_stream: Manejador FTP obtido com ftp_connect.
Fecha uma conexão FTP

Nota: Deve-se certificar que se encontrem habilitadas as funções ftp na configuração da versão de PHP que possui e de ter as permissões necessários em sua conta FTP para transferir e baixar arquivos.

CODIGO FONTE.

/inc/ftpfunc.php.
Script que conterá as constantes e funções a usar em index.php. Neste script deverá modificar os valores das constantes para ajusta-lo a suas necesidades. A função ConectarFTP lhe permitirá se conectar ao Servidor FTP; a função TransferirArquivo tem a tarefa de transferir um arquivo ao Servidor; e finalmente, a função ObterRota lhe outorgará a rota do diretório atual no qual está trabalhando o Servidor.

<?
# FUNÇÕES FTP # CONSTANTES
# Mude estes dados pelos de seu Servidor FTP

define(“SERVER”,”localhost”); //IP o Nome do Servidor
define(“PORT”,21); //Porto
define(“USER”,”willy”); //Nome de Usuário
define(“PASSWORD”,”12345″); //Senha de acesso
define(“PASV”,true); //Ativa modo passivo

# FUNÇÕES

function ConectarFTP(){
//Permite se conectar ao Servidor FTP
$id_ftp=ftp_connect(SERVER,PORT); //Obtem um manejador do Servidor FTP
ftp_login($id_ftp,USER,PASSWORD); //Loguea-se ao Servidor FTP
ftp_pasv($id_ftp,MODO); //Estabelece o modo de conexão
return $id_ftp; //Devolve o manejador à função
}

function TransferiArquivo($arquivo_local,$arquivo_remoto){
//Transfere arquivo da máquina Cliente ao Servidor (Comando PUT)
$id_ftp=ConectarFTP(); //Obtem um manejador e se conecta ao Servidor FTP
ftp_put($id_ftp,$arquivo_remoto,$arquivo_local,FTP_BINARY);
//Transfere um arquivo ao Servidor FTP em modo Binário
ftp_quit($id_ftp); //Fecha a conexão FTP
}

function ObterRota(){
//Obtén rota do diretório do Servidor FTP (Comando PWD)
$id_ftp=ConectarFTP(); //Obtém um manejador e se conecta ao Servidor FTP
$Diretorio=ftp_pwd($id_ftp); //Devolve rota atual p.e. “/home/willy”
ftp_quit($id_ftp); //Fecha a conexão FTP
return $Diretorio; //Devolve a rota à função
}
?>

index.php.
Script que contém um formulário (form_ftp) que nos permite buscar um arquivo e transferi-lo ao Servidor FTP, ademais nos mostra uma lista dos diretórios e arquivos do mesmo.

FTP OK

<?php echo “<?xml versao=”1.0″ encoding=”iso-8859-1″?”.”>”; ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>::..Funções FTP..::</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
</head>

<body>
<p align=”center”><font size=”5″ face=”Verdana, Tahoma, Arial”><strong><em>
Funcoes FTP
</em></strong></font></p>
<p><font face=”Verdana, Tahoma, Arial”>

<?
include(‘inc/ftpfunc.php’); //Inclui o arquivo de funções
if(!empty($_POST[“arquivo”])){ //Comprova se a variável “arquivo” foi definida
TransferirArquivo($_POST[“arquivo”],basename($_POST[“arquivo”]));
//basename obtén o nome de arquivo sem a rota
unset($_POST[“arquivo”]); //Destrói a variável “arquivo”
}
?>
<strong><font color=”#000000″ size=”3″>Subir Arquivo</font></strong></font></p>
<hr />

<!–Formulario para escolher o arquivo a transferir –>
<form action=”” method=”post” name=”form_ftp” id=”form_ftp“>
<p><font size=”2″ face=”Verdana, Tahoma, Arial”> Escolher arquivo:
<input name=”arquivo” type=”file” id=”arquivo” />
<input name=”Submit” type=”submit” value=”Transferir Arquivo” />
</font><font size=”2″ face=”Verdana, Tahoma, Arial”> </font> </p>
</form>

<hr />
<p><font face=”Verdana, Tahoma, Arial”><strong><font color=”#000000″ size=”3″>
Lista de Arquivos
</font></strong></font></p>
<table width=”69%” border=”1″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”48%”><div align=”center”><font size=”2″ face=”Verdana, Tahoma, Arial”><strong>Nombre</strong></font></div></td>
<td width=”22%”><div align=”center”><font size=”2″ face=”Verdana, Tahoma, Arial”><strong>Tama&ntilde;o</strong></font></div></td>
<td width=”30%”><div align=”center”><font size=”2″ face=”Verdana, Tahoma, Arial”><strong>Fec.
Modificação</strong></font></div></td>
</tr>
<?
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$ruta=ObterRota(); //Obtem a rota atual no Servidor FTP
echo “<b>O diretorio atual é: </b> “.$rota;
$lista=ftp_nlist($id_ftp,$rota); //Devolve um array com os nomes de arquivos
$lista=array_reverse($lista); //Inverte ordem do array (ordena array)
while ($item=array_pop($lista)) //Lê todos os arquivos e diretorios do diretorio
{
$tamanho=number_format(((ftp_size($id_ftp,$item))/1024),2).” Kb”;
//Obtem tamanho de arquivo e o passa a KB
if($tamanho==”-0.00 Kb”) // Se for -0.00 Kb se refere a um diretorio
{
$item=”<i>”.$item.”</i>”;
$tamanho=”&nbsp;”;
$data=”&nbsp;”;
}else{
$data=date(“d/m/y h:i:s”, ftp_mdtm($id_ftp,$item));
//Filemtime obtem a data de modificação do arquivo; e date lhe dá o formato de saída
}
?>

<tr>
<td><font size=”2″ face=”Verdana, Tahoma, Arial”><? echo $item ?></font></td>
<td align=”right”><font size=”2″ face=”Verdana, Tahoma, Arial”><? echo $tamanho ?></font></td>
<td align=”right”><font size=”2″ face=”Verdana, Tahoma, Arial”><? echo $data ?></font></td>
</tr>
<? } ?>
</table>
</body>
</html>

Bom, espero que esta colaboração tenha sido útil à Comunidade Web!