razs 0 Denunciar post Postado Março 15, 2012 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
Dii 15 Denunciar post Postado Março 15, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 15, 2012 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
Dii 15 Denunciar post Postado Março 15, 2012 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
razs 0 Denunciar post Postado Março 15, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 16, 2012 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
razs 0 Denunciar post Postado Março 20, 2012 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
JCMPJ 0 Denunciar post Postado Março 20, 2012 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
razs 0 Denunciar post Postado Março 20, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 20, 2012 Curioso que você não definiu uma função fail e o script não apresenta erro. Compartilhar este post Link para o post Compartilhar em outros sites
razs 0 Denunciar post Postado Março 21, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 21, 2012 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
razs 0 Denunciar post Postado Março 21, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 21, 2012 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
razs 0 Denunciar post Postado Março 21, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 21, 2012 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
razs 0 Denunciar post Postado Março 21, 2012 agora nao faz nada :s Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 21, 2012 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
razs 0 Denunciar post Postado Março 22, 2012 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
Evandro Oliveira 331 Denunciar post Postado Março 22, 2012 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