Ir para conteúdo

POWERED BY:

Arquivado

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

razs

[Resolvido] myme type e rename

Recommended Posts

Boas pessoal, estou a mexer em php pela primeira vez e to com umas duvidas, seguindo uns exemplos daqui do forum e do resto da web tenho um upload por ftp a funcionar mas estou a ter algumas dificuldades para alterar o nome e para fazer as verificacoes.

 

Segue em baixo um pequeno excerto dessa parte.

 

<?php

ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . 'error_log.txt');
error_reporting(E_ALL);

set_time_limit(0);


if( $_SERVER['REQUEST_METHOD']=='POST' )
{

$stud=(estudo);
$exam=(exame);
$center=(centro);
$pat=(pat);
$visit=(visit);
$data = date (“j/m/Y”);
$path1=(upload);
$path2=(xpto);



$arquivo = $_FILES[‘arquivo’];


if ($_FILES["arquivo"]=="") echo "<script>alert('File is empty');</script>";


if (substr($arquivo, -4) == ".zip" || $arquivo['type'] == "multipart/x-zip" || $arquivo['type']== "application/zip" || $arquivo['type'] == "application/x-zip-compressed" || $arquivo['type'] == "application/x-compressed")

{
        if ($arquivo['size']>500000000)
        {
          exit('Arquivo muito grande. Tamanho máximo permitido 500MB. O arquivo enviado contém '.round($arquivo['size']/1024).'kb');  
        }

        $novonome =  $stud.$exam.$center.$pat.$visit.$data.'.zip';

          $dir = "upload/$path2";
           /**
           * $_GET['stud']'/'$_GET['pat']
           */

          if (!file_exists($dir))

        {
            mkdir($dir, 0755);  
         }



       var_dump( $_FILES ); //apenas para debug retirar no fim

       $servidor = '72.29.75.95';
       $caminho = $dir.$novonome;
       $arquivo = $_FILES['arquivo'];

       $con_id = ftp_connect($servidor) or die( 'No conectou em: '.$servidor );
       ftp_login( $con_id, 'user', '1234' );


       ftp_put( $con_id, $caminho.$arquivo['name'], $arquivo['tmp_name'], FTP_BINARY );

}
else
{
echo "<script>alert('Only Zip files are allowed');</script>";
}

?>

 

Qualquer ajuda é muito bem vinda.

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa-me ver se eu entendi.

Você quer aprender aplicar a função rename() dentro do seu código?

 

Documentação -> Clique aqui

 

Com FTP eu nunca fiz não, não sei se é possível aplicar para FTP.

Porque se você movesse para um FOLDER, você poderia mover pra lá, alterar o arquivo e depois fazer o upload para o FTP com FTP_PUT.

Mas direto para lá não sei como se faz. :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aqui não deveriam ser strings???

 

$stud=(estudo);
$exam=(exame);
$center=(centro);
$pat=(pat);
$visit=(visit);
$data = date (“j/m/Y”);
$path1=(upload);
$path2=(xpto);

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aqui não deveriam ser strings???

 

$stud=(estudo);
$exam=(exame);
$center=(centro);
$pat=(pat);
$visit=(visit);
$data = date (“j/m/Y”);
$path1=(upload);
$path2=(xpto);

 

Eu acho que são constants...

Também não entendi o porquê dos parênteses. :ermm:

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aqui não deveriam ser strings???

 

$stud=(estudo);
$exam=(exame);
$center=(centro);
$pat=(pat);
$visit=(visit);
$data = date (“j/m/Y”);
$path1=(upload);
$path2=(xpto);

 

 

Sim mas nesta fase de testes o valor é fixo, depois tera os valores de um form.

 

Eu entretanto consegui dar um jeito a coisa e o meu unico problema é mesmo o a verificacao de caminho e ficheiro e a criacao da pasta

 

podes ver aqui:

 

$dir = "/upload/".$stud."/".$pat."/";	  

       var_dump( $_FILES );          //apenas para debug retirar no fim

       $servidor = '22.22.22.22';
       $caminho = $dir.$novonome;
       $arquivo = $_FILES['arquivo'];

       $con_id = ftp_connect($servidor) or die( 'No Connection at: '.$servidor );
ftp_login( $con_id, 'user', '1234' );


    if (file_exists($dir)) {
    } else {
           if (ftp_mkdir($con_id, $dir)) {
               echo "successfully created $dir\n";
           } else {
               echo "There was a problem while creating $dir\n";
           }
     }



          if (file_exists($caminho )) {
                  echo "<script>alert('That file already exist!');</script>";
          } else {
                 ftp_put( $con_id, $caminho, $arquivo['tmp_name'], FTP_BINARY );
                 ftp_close($con);
         }


 

podem testar aqui:

 

http://www.aquasplender.com/corc/ftp1.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu teste retornou

"There was a problem while creating Uploads/estudo/pat/"

 

Certifique-se de ter permissão de criação de diretórios no seu acesso FTP.

 

Verifique-também se não está tentando criar a estrutura completa de uma vez só.

 

Veja, se não houver um diretório "estudo" será impossível criar um diretório "pat" dentro de uma "estudo" inexistente.

 

Garanta que exista o caminho completo:

 

function fail($message) {
   throw new Exception($message);
}

try {
   $conn = ftp_connect($host) or fail('Cannot connect.');
   ftp_login($conn, $user, $pass) or fail('Cannot login.');
   if (!in_array('Uploads', ftp_nlist($conn, '.'))) {
       ftp_mkdir($conn, 'Uploads') or fail('Cannot create dir Uploads.');
   }
   if (!in_array('estudo', ftp_nlist($conn, 'Uploads'))) {
       ftp_mkdir($conn, 'Uploads/estudo') or fail('Cannot create dir estudo.');
   }
   if (!in_array('pat', ftp_nlist($conn, 'Uploads/estudo'))) {
       ftp_mkdir($conn, 'Uploads/estudo/pat') or fail('Cannot create dir pat.');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

 

Agora fica pra você refatorar :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

visto que o directorio upload ja existe e o caminho ftp ir directamente para essa pasta fiz assim

 

       $con_id = ftp_connect($servidor) or die( 'No Connection at: '.$servidor );
ftp_login( $con_id, $user, $pass );

   if (!in_array($estudo, ftp_nlist($conn, ''))) {
       ftp_mkdir($conn, $estudo) or fail('Cannot create dir estudo.');
   }
   if (!in_array($pat, ftp_nlist($conn, $estudo))) {
       ftp_mkdir($conn, $estudo.'/'.$pat) or fail('Cannot create dir pat.');
   }

 

mas da-me erro embora o log nao me disponibilize nenhum erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que não tem que usar: move_uploaded_file, antes de abrir o ftp e depois pegar o arquivo que foi movido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao faço ideia, é a primeira vez que mexo em php :s

tentei limpar o codigo de modo a ficar mais explicito.

 

<html>
<head></head>
<body>
<?php
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . 'error_log.txt');
error_reporting(E_ALL);

if( $_SERVER['REQUEST_METHOD']=='POST' )
{
set_time_limit(0); 

$stud=(estudo);
$exam=(exame);
$center=(centro);
$pat=(pat);
$visit=(visit);
$data = date("d/m/Y"); 
$path1=(upload);
$path2=(xpto);

$out = array('error'=>null);
$arquivo =$_FILES['arquivo'];
$novonome =$data.'_'.$stud.'_'.$exam.'_'.$center.'_'.$pat.'_'.$visit.'.zip';
$dir =$stud."/".$pat."/";
$servidor ='22.22.22.22';
$caminho =$dir.$novonome;
$user='user';
$pass='1234':
$conn_id = ftp_connect($servidor) or die( 'No Connection at Server');

if ($_FILES["arquivo"]==""){
 $out['error'][] = "Please specify a file";
}else{

if ($arquivo['type'] == "multipart/x-zip" || $arquivo['type']== "application/zip" || $arquivo['type'] == "application/x-zip-compressed" || $arquivo['type'] == "application/x-compressed")
{
	if ($arquivo['size']>500000000)
		{
		exit('File upload limit is 500MB. The file you are trying to send is '.round($arquivo['size']/1024).'kb!');  
		}

   var_dump( $_FILES );          //apenas para debug retirar no fim

ftp_login( $conn_id, $user, $pass );
   if (!in_array($estudo, ftp_nlist($conn_id, ''))) {
       ftp_mkdir($conn_id, $estudo) or fail('Cannot create dir estudo.');
   }

   if (!in_array($pat, ftp_nlist($conn_id, $estudo))) {
       ftp_mkdir($conn_id, $estudo.'/'.$pat) or fail('Cannot create dir pat.');
   }

if (file_exists($caminho)) {
       $out['error'][] = "That file already exist";
   } else {
       ftp_put( $conn_id, $caminho, $arquivo['tmp_name'], FTP_BINARY);
       ftp_close($conn_id);
   }
}
}
else
{
$out['error'][] = "Only Zip files are allowed!";
}
}
?>
       <form action="" method="post" enctype="multipart/form-data">
               <input type="file" name="arquivo" />
               <input type="submit" name="enviar" value="Enviar" />
       </form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja resolvi o problema era que eu defeni o novo nome do ficheiro a comecar por data e tinha d//m/Y logo ele ia procurar o directorio com o numero do dia :s

 

corrigi para d_m_Y e ja funciona. :)

 

 

a unica coisa que nao funciona é a funcao para verificar se o ficheiro ja existe, simplesmente nao faz nada :s

 

  if (file_exists($caminho)) {
              $out['error'][] = "That file already exist";
       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja resolvi o problema era que eu defeni o novo nome do ficheiro a comecar por data e tinha d//m/Y logo ele ia procurar o directorio com o numero do dia :s

 

corrigi para d_m_Y e ja funciona. :)

 

 

a unica coisa que nao funciona é a funcao para verificar se o ficheiro ja existe, simplesmente nao faz nada :s

 

  if (file_exists($caminho)) {
              $out['error'][] = "That file already exist";
       }

 

file_exists vai assumir a máquina local para procurar pelo arquivo. Ao invés disso, utilize ftp_rawlist

 

if (in_array(ftp_rawlist($conn_id, dirname($caminho)))) {
   $out['error'][] = 'That file already exist';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

pus assim

if (in_array(ftp_rawlist($conn_id, $dir($novonome)))) {
   $out['error'][] = "That file $novonome already exist!";
}

 

dame

 

 

Fatal error: Call to undefined function estudo/pat/() in C:\inetpub\vhost\aquasplender.com\httpdocs\corc\ftp1.php on line 54

Compartilhar este post


Link para o post
Compartilhar em outros sites

pus assim

if (in_array(ftp_rawlist($conn_id, $dir($novonome)))) {
   $out['error'][] = "That file $novonome already exist!";
}

 

dame

 

 

Fatal error: Call to undefined function estudo/pat/() in C:\inetpub\vhost\aquasplender.com\httpdocs\corc\ftp1.php on line 54

 

Você está chamando uma string como se fosse uma função

 

$dir($novonome)

 

troque por apenas $dir

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz a alteração mas agora diz sempre que o ficheiro ja existe mesmo quando nao existe

 


$caminho =$dir.$novonome;

if (!in_array(ftp_rawlist($conn_id, $caminho ))) {
   $out['error'][] = "That file $novonome already exist!";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz a alteração mas agora diz sempre que o ficheiro ja existe mesmo quando nao existe

 


$caminho =$dir.$novonome;

if (!in_array(ftp_rawlist($conn_id, $caminho ))) {
   $out['error'][] = "That file $novonome already exist!";
}

 

Perdão, teve uma falha minha ali também.

Veja, ftp_rawlist espera um diretório não um arquivo. Ele vai te listar os arquivos dentro do diretório, assim você verifica se o arquivo foi retornado. O meu erro foi que esqueci de especificar o nome do arquivo como argumento a ser buscado pelo in_array

 

Assim deve funcionar:

if (in_array($novonome, ftp_rawlist($conn_id, $dir))) {
   $out['error'][] = "That file $novonome already exist!".
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, setei um servidor ftp só pra te ajudar.

 

adicione o seguinte conteúdo:

 

$files      = ftp_nlist($conn, $dir);
$output     = "<p>Arquivos encontrados em {$dir}:</p>%s";
$fileList   = sprintf("<ul><li>%s</li></ul>", implode('</li><li>', $files));

if (!sizeof($files)) {
   $fileList = "<p>Nenhum arquivo encontrado.</p>";
}

die(sprintf($output, $fileList));

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito obrigado.

 

tentei o teu exemplo e devolveu

 

 

Warning: implode() [function.implode]: Invalid arguments passed in C:\inetpub\vhost\aquasplender.com\httpdocs\corc\ftp1.php on line 61

 

Arquivos encontrados em esdtugio/pdat/:

 

mas eu neste momento nao tenho nada na pasta

Compartilhar este post


Link para o post
Compartilhar em outros sites

A chamada de ftp_nlist retornou FALSE, o que significa que há algum erro.

 

Alguns possíveis erros são:

- Conexão expirada

- Não autenticado

- Acesso negado

- Caminho inválido

 

vamos tentar da seguinte forma:

var_dump(ftp_nlist($conn_id, '.'));

 

Conforme for tendo sucesso nas listagens, substitua o valor de '.' pelo caminho desejado até chegar ao diretório onde deveremos salvar os arquivos.

 

Repita o último teste no diretório com e sem arquivos para checar o comportamento.

 

Depois de se certificar que ftp_nlist está retornando corretamente o conteúdo do diretório, utilize in_array conforme sugerido para verificar se há ou não o arquivo procurado na listagem

 

var_dump(in_array('arquivo', ftp_nlist($conn_id, 'caminho'))); // Escreverá "TRUE" caso o arquivo exista ou "FALSE" caso não

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.