Beraldo 864 Denunciar post Postado Novembro 12, 2014 qual o valor de $server_file? Esse é o problema. Você está passando um caminho que não existe Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 12, 2014 qual o valor de $server_file? Esse é o problema. Você está passando um caminho que não existe Ele ta recebendo o GET $server_file = isset($_GET["arquivo"])?$_GET["arquivo"]:NULL; Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 12, 2014 Então, esse é o problema. Você passa por GET só o nome do arquivo. Na hora de passar o valor pre ftp_get, tem que concatenar o caminho até a pasta e o nome do arquivo, caso contrário o FTP vai procurar o arquivo na pasta atual Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 12, 2014 Então, esse é o problema. Você passa por GET só o nome do arquivo. Na hora de passar o valor pre ftp_get, tem que concatenar o caminho até a pasta e o nome do arquivo, caso contrário o FTP vai procurar o arquivo na pasta atual Então mas na dowloand.php tem o caminho da pasta, só que não esta concatenado. Igual voce me falou quando eu passo o caminho da pasta inteiro via GET ele da aquele primeiro erro de FTP_BINARY vou posta o download.php inteiro pra vc da uma olhada. <?php // define some variables $local_file = 'php://stdout'; $server_file = isset($_GET["arquivo"])?$_GET["arquivo"]:NULL; if($server_file!=NULL) { $remote_dir= "./web/13/"; // Caminho para o diretório remoto $ftp_server = 'ftp.caminho.com.br'; // FTP do destino $ftp_user_name = 'xxxxxxx'; $ftp_user_pass = 'xxxxxxx'; // conectando $conn_id = ftp_connect($ftp_server); // login $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // efetuando o download if (!ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Ocorreu um erro\n"; } // fecha a conexão ftp_close($conn_id); exit; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 12, 2014 Você cria $remote_dir, mas nunca a usa. Faça assim: $remote_dir= "./web/13/"; // Caminho para o diretório remoto $server_file = $remote_dir . $server_file; // restante do codigo Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 Você cria $remote_dir, mas nunca a usa. Faça assim: Então desse modo da o erro de FTP_BINARY PHP Warning: ftp_get() [<a href='function.ftp-get'>function.ftp-get</a>]: Opening BINARY mode data connection for ./web/13/Admin-icon.png(19432 bytes). Criei uma função para identifica o tipo de arquivo para ver se era binário ou outro tipo: <?php // define some variables $local_file = 'php://stdout'; $server_file = isset($_GET["arquivo"])?$_GET["arquivo"]:NULL; if($server_file!=NULL) { $remote_dir= "./web/13/"; // Caminho para o diretório remoto $ftp_server = 'ftp.caminho.com.br'; // FTP do destino $ftp_user_name = 'xxxxx'; $ftp_user_pass = 'xxxxxxxx'; $server_file = $remote_dir . $server_file; // conectando $conn_id = ftp_connect($ftp_server); // login $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); function get_ftp_mode($file) { $path_parts = pathinfo($file); if (!isset($path_parts['extension'])) return FTP_BINARY; switch (strtolower($path_parts['extension'])) { case 'am':case 'asp':case 'bat':case 'c':case 'cfm':case 'cgi':case 'conf': case 'cpp':case 'css':case 'dhtml':case 'diz':case 'h':case 'hpp':case 'htm': case 'html':case 'in':case 'inc':case 'js':case 'm4':case 'mak':case 'nfs': case 'nsi':case 'pas':case 'patch':case 'php':case 'php3':case 'php4':case 'php5': case 'phtml':case 'pl':case 'po':case 'py':case 'qmail':case 'sh':case 'shtml': case 'sql':case 'tcl':case 'tpl':case 'txt':case 'vbs':case 'xml':case 'xrc': return FTP_ASCII; } return FTP_BINARY; } // efetuando o download if (!ftp_get($conn_id, $local_file, $server_file, get_ftp_mode($server_file))){ //if (!ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Ocorreu um erro\n"; } // fecha a conexão ftp_close($conn_id); exit; } ?> Ai ele não dar nenhum erro mais não baixa o arquivo Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 Usar php://stdout realmente funciona? Talvez esteja aí o problema. Tente usar readfile() e header, como já sugerido Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 Usar php://stdout realmente funciona? Talvez esteja aí o problema. Tente usar readfile() e header, como já sugerido Uai era para funciona neh !!rsrs Vou refazer usando header para ver o que da, daqui a pouco te dou feedback. Usar php://stdout realmente funciona? Talvez esteja aí o problema. Tente usar readfile() e header, como já sugerido Usando o header deu o mesmo problema, ele não da erro mas também não baixa. $pasta = './web/13'; //nome da pasta no seu FTP, onde os arquivos foram guardados if(isset($_GET['arquivo']) && file_exists("{$pasta}/".$_GET['arquivo'])) { $file = $_GET['arquivo']; // variável que pega o nome do arquivo que deseja fazer o download $type = filetype("{$pasta}/{$file}"); //pega o tipo do arquivo que deseja fazer o download $size = filesize("{$pasta}/{$file}"); // pega o tamanho do arquivo header("Content-Description:File Transfer"); //descriptografando para fazer o download header("Content-Type:($type)"); // pegando o tipo header("Content-lenght:($size)"); // pegando o tamanho header("Content-Disposition: attachment; filename=$file"); //verificando e inicializando o downlaod readfile("{$pasta}/{$file}"); //fazendo o download exit; // saindo } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 Verifique se todas as mensagens de erro estão ativas, como mostra este tópico: http://forum.imasters.com.br/topic/375800-orientaes-para-uma-boa-participao/ Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 Verifique se todas as mensagens de erro estão ativas, como mostra este tópico: http://forum.imasters.com.br/topic/375800-orientaes-para-uma-boa-participao/ Ativei a mensagem de erro e nada: <?php ini_set( 'display_errors', true ); error_reporting( E_ALL ); $pasta = './web/13/'; //nome da pasta no seu FTP, onde os arquivos foram guardados if(isset($_GET['arquivo']) && file_exists("{$pasta}/".$_GET['arquivo'])) { $file = $_GET['arquivo']; // variável que pega o nome do arquivo que deseja fazer o download $type = filetype("{$pasta}/{$file}"); //pega o tipo do arquivo que deseja fazer o download $size = filesize("{$pasta}/{$file}"); // pega o tamanho do arquivo header("Content-Description:File Transfer"); //descriptografando para fazer o download header("Content-Type:($type)"); // pegando o tipo header("Content-lenght:($size)"); // pegando o tamanho header("Content-Disposition: attachment; filename=$file"); //verificando e inicializando o downlaod readfile("{$pasta}/{$file}"); //fazendo o download exit; // saindo } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 adicione um else. pode ser que nem esteja entrando no if. também dê um echo no caminho completo do arquivo, para ver se está sendo acessado o local correto Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 adicione um else. pode ser que nem esteja entrando no if. também dê um echo no caminho completo do arquivo, para ver se está sendo acessado o local correto Realmente não esta entrando no if. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 separe as coisas: if ( isset($_GET['arquivo']) ) { $path = pasta . "/" . $_GET['arquivo']; if ( file_exists( $path ) ) { // ler o arquivo } else { echo "path nao existe: " . $path; } } else { echo 'get arquivo nao existe'; } Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 separe as coisas: if ( isset($_GET['arquivo']) ) { $path = pasta . "/" . $_GET['arquivo']; if ( file_exists( $path ) ) { // ler o arquivo } else { echo "path nao existe: " . $path; } } else { echo 'get arquivo nao existe'; } Ele não esta encontrando a pasta o GET esta recebendo o arquivo. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 então você passou o caminho errado. ou o ftp_get não copiou o arquivo pro servidor local Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 então você passou o caminho errado. ou o ftp_get não copiou o arquivo pro servidor local esse caminho é o mesmo que estava na outra função e outra função estava achando normalmente acho que o ftp_get que não esta copiando para o servidor local. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 acho que o ftp_get que não esta copiando para o servidor local. é só abrir a pasta e ver se o arquivo está lá. Se não estiver, é porque ftp_get realmente falhou Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 é só abrir a pasta e ver se o arquivo está lá. Se não estiver, é porque ftp_get realmente falhou tem que passo o local aonde vai baixo? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 13, 2014 tem que passo o local aonde vai baixo? Você não está testando na sua máquina? Eu falei pra você abrir a pasta e ver se o arquivo do FTP está lá. Esqueça o PHP nisso Compartilhar este post Link para o post Compartilhar em outros sites
Damon 20 Denunciar post Postado Novembro 13, 2014 Você não está testando na sua máquina? Eu falei pra você abrir a pasta e ver se o arquivo do FTP está lá. Esqueça o PHP nisso Cara acho que já estou ficando meio doido aqui, estou até escrevendo errado !!kkkk Respondendo sua pergunta, sim eu olhei na pasta local e realmente nenhum arquivos esta lá. Cara vamos voltar naquele código do php://stdout aqui eu sei ta passando pelo ftp_get. <?php // define some variables $local_file = 'php://stdout'; $server_file = isset($_GET["arquivo"])?$_GET["arquivo"]:NULL; if($server_file!=NULL) { $remote_dir= "./web/13/"; // Caminho para o diretório remoto $ftp_server = 'ftp.caminho.com.br'; // FTP do destino $ftp_user_name = 'xxxxx'; $ftp_user_pass = 'xxxxx'; $server_file = $remote_dir . $server_file; // conectando $conn_id = ftp_connect($ftp_server); // login $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); function get_ftp_mode($file) { $path_parts = pathinfo($file); if (!isset($path_parts['extension'])) return FTP_BINARY; switch (strtolower($path_parts['extension'])) { case 'am':case 'asp':case 'bat':case 'c':case 'cfm':case 'cgi':case 'conf': case 'cpp':case 'css':case 'dhtml':case 'diz':case 'h':case 'hpp':case 'htm': case 'html':case 'in':case 'inc':case 'js':case 'm4':case 'mak':case 'nfs': case 'nsi':case 'pas':case 'patch':case 'php':case 'php3':case 'php4':case 'php5': case 'phtml':case 'pl':case 'po':case 'py':case 'qmail':case 'sh':case 'shtml': case 'sql':case 'tcl':case 'tpl':case 'txt':case 'vbs':case 'xml':case 'xrc': case 'png': case'jpg': case 'pdf': case 'cdr': return FTP_ASCII; } return FTP_BINARY; } // efetuando o download if (!ftp_get($conn_id, $local_file, $server_file, get_ftp_mode($server_file))); //if (!ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Ocorreu um erro\n"; } else{ echo "Arquivo baixado com sucesso."; } // fecha a conexão ftp_close($conn_id); exit; } ?> Este pedaço aqui não seria o caminho do pc local $remote_dir= "./web/13/"; // Caminho para o diretório remoto Compartilhar este post Link para o post Compartilhar em outros sites