Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafa440

gera html e cria link

Recommended Posts

Estou precisando de uma ajuda, eu preciso de um formulario de cadastro em php...

Ele faz o seguinte,

1º Cria um novo usuario com um nivel de permissão e insere no banco de dados para o mesmo logar na area restrita...

2º Cria uma pasta no ftp com o nome do usuario

3º Cria algumas paginas dentro desta pasta, sendo que, as paginas vão ser todos iguais, a unica coisa que vai mudar nas paginas é para onde enviar os arquivos (é um upload de imagens para o ftp) que é uma pasta dentro dessa pasta que criou acima, chamada ftp (vai ser o mesmo nome para todas).

4º Cria um Link na pagina index.php com o nome do usuario para o administrador.

 

é mais ou menos isso

ou seja:

O nome da pasta que vai criar no ftp vai ser o que for colocado no campo "nome" do formulario>

Dentro desta pasta, vão ser criadas 3 paginas e mais uma pasta (chamada ftp)>

Essas paginas são: 1 para upload de arquivos para a pasta ftp, 1 para download desses arquivos e outra para pode navegar entre essas duas>

A unica coisa que muda nessas paginas vai ser o diretorio, por exemplo, o cliente1 vai ter o diretorio para upload: Webroot/cliente1/ftp o cliente2 vai ter Webroot/cliente2/ftp>

Dentro da pasta ftp vai ter um arquivo chamado download.php, esse arquivo não vai mudar nada, ele serve só para forçar o download...

e, por ultimo, ele cria um Link na pagina index.php para a pagina que serve para o cliente navegar entre o download e o upload, essa pasta só é vista pelo adm do site...

 

é isso, eu tenho todas as paginas e pastas criadas, o que eu preciso é do formulario para que, quando um usuario se cadastrar,ele crie uma pasta com o nome do usuario,copie as paginas e pastas, altere o que tem que alterar e cole nessa nova pasta...

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quais as funções para ele fazer isso, pegar os dados, criar a pasta, copiar as paginas, mudar o destino do upload no codigo de uma das paginas e colocar o link no index.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o upload por ftp foi o melhor jeito que eu consegui fazer, pois, cada um tem sua pasta e ninguém ve os arquivos dos outros, entendeu?

Pq, não é só o adm que vai fazer download dos arquivos, alguns usuarios também farão, mas, eles não podem ver todos os arquivos, só os que o adm quiser que eles vejam, por isso, uma pasta para cada e via ftp...

Ai, eu pesquisei e achei esses que são bons para isso, mas, empaquei na hora de gerar essas paginas sabe...

Pq, eu não faço nem ideia por onde começar hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá:

1º Cria um novo usuario com um nivel de permissão e insere no banco de dados para o mesmo logar na area restrita...

 

Como você disse que já tem o formulário que cadastra o cara no BD, imagino que essa parte já esteja ok.

 

2º Cria uma pasta no ftp com o nome do usuario

 

Não precisa de FTP para isso, basta no momento do cadastro você usar a função mkdir, como eu imagino que exista apenas um usuário com cada nome escolhido, e você verifique isso no momento do cadastro, então não será necessário verificar se a pasta já existe ou não.

 

3º Cria algumas paginas dentro desta pasta, sendo que, as paginas vão ser todos iguais, a unica coisa que vai mudar nas paginas é para onde enviar os arquivos (é um upload de imagens para o ftp) que é uma pasta dentro dessa pasta que criou acima, chamada ftp (vai ser o mesmo nome para todas).

 

Nesse caso basta você deixar essas páginas prontas e no momento que criar o usuário usar a função copy.

 

4º Cria um Link na pagina index.php com o nome do usuario para o administrador.

 

Na página no admin basta fazer um select com todos os usuários cadastrados, mais ou menos assim:

<?php
/*
Faz a conexão com o banco e etc.. essa parte você já tem
*/
$sql = mysql_query("SELECT * FROM tabela");
while($monta = mysql_fetch_assoc($sql){
echo '<a href="pastas/'.$monta['nome_de_usuario'].'">'.$monta['nome'].'</a><br>';
}
?>
No caso assumi que o nome de usuário fica na coluna nome_de_usuario e o nome do cara fica na coluna nome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, vamos lah

do meio para cima esta tudo certo...

eu ainda num testei o mkdir, mas, eu entendi o que você quis dizer e vou ver se consigo aki

agora, do meio para baixo

a função copy eu entendi, mas, o problema tah na hora de mudar o diretorio no codigo

por ex:

para conectar ao ftp esta assim

$ftp_dump_dir="/webroot/usuario1/ftp";
eu queria que ele pegasse o nome do cadastro e mudasse isso no codigo, entedeu?

pq, se simplesmente copiar, todos os usuarios criados vão mandar arquivos para a pasta do usuario 1

entendeu?

Eu jah até tenho uma pasta que tem certinho os arquivos para modelo, mas, eu queria mudar isso no codigo PHP

 

e, sobre o link, quando eu coloco isso que você passo, a pagina fica em branco, num da nenhum erro, simplesmente abre uma tela branca, se eu tiro esse codigo, aparece a pagina normal...

eu coloquei assim:

 

<?php
require_once('exce89.php');
$sql = mysql_query("SELECT * FROM usuarios");
while($monta = mysql_fetch_assoc($sql){
echo '<a href="webroot/'.$monta['usu_nome'].'">'.$monta['nome'].'</a><br>';
}
?>

o codigo da pagina index.php

 

<?php
//initialize the session
if (!isset($_SESSION)) {
  session_start();
}

// ** Logout the current user. **
$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true";
if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){
  $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){
  //to fully log out a visitor we need to clear the session varialbles
  $_SESSION['MM_Username'] = NULL;
  $_SESSION['MM_UserGroup'] = NULL;
  $_SESSION['PrevUrl'] = NULL;
  unset($_SESSION['MM_Username']);
  unset($_SESSION['MM_UserGroup']);
  unset($_SESSION['PrevUrl']);
	
  $logoutGoTo = "login.php";
  if ($logoutGoTo) {
    header("Location: $logoutGoTo");
    exit;
  }
}
?>
<?php
if (!isset($_SESSION)) {
  session_start();
}
$MM_authorizedUsers = "1";
$MM_donotCheckaccess = "false";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
  // For security, start by assuming the visitor is NOT authorized. 
  $isValid = False; 

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  if (!empty($UserName)) { 
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
      $isValid = true; 
    } 
    // Or, you may restrict access to only certain users based on their username. 
    if (in_array($UserGroup, $arrGroups)) { 
      $isValid = true; 
    } 
    if (($strUsers == "") && false) { 
      $isValid = true; 
    } 
  } 
  return $isValid; 
}

$MM_restrictGoTo = "ef.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
  $MM_referrer .= "?" . $QUERY_STRING;
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo); 
  exit;
}
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index - FTP</title>
</head>

<body><br />
<a href="<?php echo $logoutAction ?>">Log out</a>
<p><a href="cadastro.php"><br />
  <br />
Cadastro de clientes</a></p>
<p> </p>
<p><a href="usu1.php">usuario1</a></p><br />
<p><a href="usu2.php">usuario2</a></p>
<br />
<br />
<?php
require_once('exce89.php');
$sql = mysql_query("SELECT * FROM usuarios");
while($monta = mysql_fetch_assoc($sql){
echo '<a href="webroot/'.$monta['usu_nome'].'">'.$monta['nome'].'</a><br>';
}
?>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

a função copy eu entendi, mas, o problema tah na hora de mudar o diretorio no codigo

por ex:

para conectar ao ftp esta assim

$ftp_dump_dir="/webroot/usuario1/ftp";
eu queria que ele pegasse o nome do cadastro e mudasse isso no codigo, entedeu?

pq, se simplesmente copiar, todos os usuarios criados vão mandar arquivos para a pasta do usuario 1

entendeu?

Eu jah até tenho uma pasta que tem certinho os arquivos para modelo, mas, eu queria mudar isso no codigo PHP

 

E exatamente porque ele só enviaria para a pasta do usuário 1? Se você está copiando o arquivo do upload para dentro da pasta de cada usuário, você nem precisa informar o destino do arquivo, bastad deixar apenas com uma / para o upload ser feito dentro da pasta onde o arquivo que faz o upload está.

 

e, sobre o link, quando eu coloco isso que você passo, a pagina fica em branco, num da nenhum erro, simplesmente abre uma tela branca, se eu tiro esse codigo, aparece a pagina normal...

eu coloquei assim:

 

<?php
require_once('exce89.php');
$sql = mysql_query("SELECT * FROM usuarios");
while($monta = mysql_fetch_assoc($sql){
echo '<a href="webroot/'.$monta['usu_nome'].'">'.$monta['nome'].'</a><br>';
}
?>
Troca isso dai por isso:

<?php
require_once('exce89.php');
$sql = mysql_query("SELECT * FROM usuarios")OR DIE(mysql_error();
echo 'Total de usuários cadastrados: '.mysql_num_rows($sql).'<br>';
while($monta = mysql_fetch_assoc($sql)){
echo '<a href="webroot/'.$monta['usu_nome'].'">'.$monta['nome'].'</a><br>';
}
?>
Faltou fechar um ), o seu servidor está com display_errors desabilitado, por isso a página em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então tipo, ao invez de:

$ftp_dump_dir="/webroot/usuario1/ftp";

ficaria:

$ftp_dump_dir="/";

foi isso que eu entendi, desculpe se estou sendo ignorante...

 

num adiantou, ele ainda inda aparece a tela em branco quando eu troco por isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca aqui o script que você está usando para fazer o upload;

 

Sobre mostrar em branco, coloca isso no topo da página:

ini_set("display_errors", 1 );

error_reporting(-1);

Isso deve forçar a ser exibido o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok

 

<?
//uses $_FILES[] global array
//see manual for older PHP version info

//This function will be used to get the extension from the filename
Function get_extension($file,$length=-1){
$p = strrpos($file,".");
$p++;
If($length!=-1){
$ext = substr($file,$p,$length);
}
If($length==-1){
$ext = substr($file,$p);
}
$ext = strtolower($ext);
Return $ext;
}

//Not good practice, but here anyway
//change to suit your needs
//also some have to be set in the ini
//for this to correctly work

//2meg max
Ini_set("upload_max_filesize","50000M");

//turn on file uploads
Ini_set("file_uploads","1");

//set your temp dir
Ini_set("upload_tmp_dir","/tmp");

//set post size large enough to accomidate
//3 100meg files and some overhead
Ini_set("post_max_size","18000M");

?>

</p>
<?
//check to see if we have submited yet
If($_POST["submit"]!="submit"){
//not yet so lets make the form
?>

<?
}
//see if we have submited and that the files array has been set
If(($_POST["submit"]=="submit")&&(is_array($_FILES['userfiles']))){

$ftp_user_name="usuario"; //change to ftp username
$ftp_user_pass="senha"; //change to ftp password
$ftp_server="ftp.meudominio.net.br"; //change to ftp url
$ftp_dump_dir="/webroot/EF/ftp"; //change to destination directory

//go through all the files
For($x=0;$x<count($_FILES['userfiles']['name']);$x++){

//now we do some file checking

//check to see if file is there
If($_FILES['userfiles']['name'][$x]!="none"){
//file has a name
//check filesize
If($_FILES['userfiles']['size'][$x]!=0){
//file is larger than 0 bytes
//Check to see if it is uploaded
If(is_uploaded_file($_FILES['userfiles']['tmp_name'][$x])){
//file has been uploaded!
//let the user know their file has be uploaded
Echo "Arquivo ".$_FILES['userfiles']['name'][$x]."<br>";
//conect to ftp server
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
If ((!$conn_id) || (!$login_result)) {
Echo "FTP connection has failed!<br>";
Echo "Attempted to connect to $ftp_server for user $ftp_user_name";
Exit;
} else {
Echo "Conectado a $ftp_server! <br>";
//set PASV mode
If(!ftp_pasv($conn_id,TRUE)){
Echo "Could not enter PASV mode!";
}
//rename to file#_date.Ext
$filename = $_FILES['userfiles']['name'][$x];
//$filename.= ".".Get_extension($_FILES['userfiles']['name'][$x],3);

//change directory
If (@ftp_chdir($conn_id, $ftp_dump_dir)) {
//maybe you want to make sure we are in the correct directory
Echo "O diretório atual é : ", ftp_pwd($conn_id), "/ <br>";
} else {
//you want to know if it didn't work
Echo "Couldn't change directory\and";
}

//upload the file and let the user know what happened
If(ftp_put($conn_id,$filename,$_FILES['userfiles']['tmp_name'][$x],FTP_BINARY)){
Echo "Arquivo ".$_FILES['userfiles']['name'][$x]." foi enviado com sucesso<br>";
Echo "O arquivo se chama ".$filename."<br>";
}else{
Echo "There was a problem sending file ".$_FILES['userfiles']['name'][$x]."<br>";;
}
}
// close the FTP stream
Ftp_close($conn_id);
}
Else echo"File was not uploaded!<br>";
}
}
Echo "<br>";

}//end for loop

}
//That's all folks!
?>

e, sobre isso, eu coloquei esse codigo e, tah a mesma coisa, é pra colocar antes da pagina num é?

não no <body>?

pq, eu coloquei antes de tudo, logo que abri o <?php eu coloquei isso, antes de tudo

e, continua branco Oo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, você realmente quer usar FTP né? Não entendo qual a razão (e imagino que nem você saiba exatamente porque quer, mas deixa pra lá), nesse caso esquece o que eu disse sobre usar só o /, como você quer dessa maneira, como você está copiando isso para dentro das pastas, basta usar o $_SERVER['REQUEST_URI'] para pegar o endereço da requisição, dar um explode nas barras e usar o penúltimo ítem do array (estou assumindo que o endereço acessado seria http://www.site.com/nome_de_usuario/arquivo.php), para saber quantos itens tem o array basta usar count, pronto, isso dai vai te retornar a pasta de destino e ai você usa isso para configurar o script de forma dinamica.

 

Quanto aos erros, como não foi exibido, procure no servidor onde está sendo gravado o log, e abra ele, se não souber/encontrar, fale com o suporte técnico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, é o seguinte, preciso que grave no ftp porque nenhum outro usuario pode ver os arquivos que os outros usuarios enviaram, entendeu?

tem outro modo de fazer isso que eu quero, tipo, ele fazer o upload para a pasta do usuario no servidor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, é o seguinte, preciso que grave no ftp porque nenhum outro usuario pode ver os arquivos que os outros usuarios enviaram, entendeu?

tem outro modo de fazer isso que eu quero, tipo, ele fazer o upload para a pasta do usuario no servidor?

 

Você está gravando fora da área pública? Porque se você estiver gravando na área pública, ou seja, se esses arquivos forem acessíveis pelo navegador, usar o FTP ou enviar por HTTP não vai fazer a menor diferença...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, foi mal, não estava conseguindo ver a pagina do imasters

então, se eu digitar no navegador www.dominio.com.br/usuario1/ftp/nomedaimagem.jpg ela aparece no navegador

mas, só se fizer assim, se digitar o nome da pasta num da

e, pelo ftp.dominio.com.br eu tbm consigo acessar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao nao faz muita diferença. O que se pode fazer é um upload simples, com uma pasta como banco de arquivo e uma tabela do banco de dados que "virtualizará" os arquivos, você pode associar o arquivo com o id do usuário e no visualizar listar apenas os arquivos daquele usuario. Uma boa pratica é renomear ao fazer o upload, criando um nome automatico. Esse nome com o link fica salvo no bd

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.