lpc 0 Denunciar post Postado Janeiro 12, 2009 Amigos, já pesquisei nos tópicos e artigos e até copiei o código de vários deles, mas acho que estou bobeando em algo, pois não estou conseguindo copiar arquivos de uma pasta do site e gravar em uma pasta de meu computador, usando o PHP. O que preciso é copiar vários arquivos com extensão xml (ou mesmo txt, não tem problema) e gravar no computador. Antes de copiar, quero pegar estes arquivos e copiar em uma pasta chamada backup no mesmo site, mas isso depois eu vejo. Bom, com a ajuda dos fóruns, tenho o seguinte código: $servidor = "ftp.meusite.com.br"; $usuario = "meusite"; $senha = "minhasenha"; $local = "www/remessa"; $arquivo = " *.xml "; $retorno = "home/site/retorno/" . $arquivo; $conn_id = ftp_connect("$servidor"); if ( !$conn_id ) { echo "<font color='red'>Não foi possível conectar ao servidor <b>$servidor</b>.</font><br>"; } else { echo "Conectado ao servidor <b>$servidor</b>.<br>"; $login_result = ftp_login($conn_id, "$usuario", "$senha"); // login if ( !$login_result ) { echo "<font color='red'>Usuário: <b>$usuario</b> ou senha inválidos.</font><br>"; } else { echo "Autenticação do usuário <b>$usuario</b> realizada com sucesso.<br><br><br>"; $download = ftp_get($conn_id, "$retorno", "$local", FTP_ASCII); if (!$download) { echo "<font color='red'>O download do arquivo <b>$local</b> falhou!</font><br>"; } else { echo "Download do arquivo <b>$local</b> realizado com sucesso.<br>"; } } ftp_quit($conn_id); // fecha conexão com servidor de FTP } Infelizmente, quando tento fazer o download, aparece a seguinte mensagem: (troquei no código "*.xml" para "arquivoteste.xml", para teste!) Conectado ao servidor ftp.meusite.com.br. Autenticação do usuário " meusite " realizada com sucesso. Warning: ftp_get(home/site/retorno/arquivoteste.xml) [function.ftp-get]: failed to open stream: No such file or directory in /home/meusite/www/download_arq.php on line 71 Warning: ftp_get() [function.ftp-get]: Error opening home/site/retorno/arquivoteste.xml in /home/meusite/www/download_arq.php on line 71 O download do arquivo falhou! Se puderem me ajudar agradeço muito! Paulo Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 13, 2009 Acho que você não está sabendo navegar na estrutura de diretórios. Quando você usa caminhos relativos, será pesquisado a partir do diretório atual em que você se encontra. Supondo que você se encontre em '/home/ususario/', e chamar 'www/remessa', entende-se que você está se referindo à: /home/ususario/www/remessa/ Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 13, 2009 Realmente você tinha razão, Marcio Leandro: o caminho estava errado. Mas veja que continua dando erro, o que significa que não estou conseguindo dizer onde ele deve gravar o arquivo em meu computador. Como estou usando ubuntu, estou dizendo para gravar em /home/site/retorno. Até alterei,tirando este caminho, mas não tá dando certo. Preciso fazer outros testes. Agradeço sua ajuda! Paulo O erro que está aparecendo: Warning: ftp_get(arquivoteste.xml) [function.ftp-get]: failed to open stream: Permission denied in /home/meusite/www/download_arq.php on line 71 Warning: ftp_get() [function.ftp-get]: Error opening arquivoteste.xml in /home/meusite/www/download_arq.php on line 71 O download do arquivo falhou! Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 14, 2009 DÊ um ls -l na pasta onde está o arquivo que você está tentando baixar o arquivo e posta aqui Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 14, 2009 Marcio Leandro, obrigado mais uma vez! Olhei, usando o gFTP, os arquivos da pasta remessa, e são: arquivoteste.xml, que está como rwxrwxrwx e, arquivoteste.txt, que está como rw-r--r--. Me perdoe, mas estou usando o linux à pouco tempo (php também) e, sinceramente, não sei como dar esse comando lá na pasta (ftp). (Se eu não conseguir, vou tentar usar um outro código que baixei aqui no imasters e até testei, mas..) Abraços! Paulo Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 14, 2009 não falei que sou ruim demais... a pasta remessa aparece como drwxrwxrwx Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 14, 2009 Bom, caso o sistema que você está fazendo esteja em uma sistema Linux, o arquivo está com permissão de leitura para todos. Os comandos você dá pelo console. Vou te explicar como funciona essas permissões: Observe que está separado por pipes, sendo 3 partes: dono, grupo e outros. Neste caso, o arquivo está com rw (read/write) para o dono, e r (read) para o grupo e outros. Logo, todos podem ler o arquivo. rw- | r-- | r--Coloque um script nesta pasta com o código: <?php echo realpath(getcwd());Isto vai te mostrar o caminho absoluto para a pasta, que você vai usar no seu script de ftp. Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 14, 2009 Fiz como me orientou. Realmente, mostra o caminho completo, como você havia me orientado no início. Só faltava o "/" no início do caminho, que eu não estava usando. Vou tentar de novo... Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 16, 2009 Olá! Como não está funcionando, resolvi procurar mais alguma coisa (putz, aprender dá um trabalho!!) e inclui uma rotina para listar os arquivos da pasta. Esta parte está funcionando legal, tanto que aparece o nome do arquivo certinho na resposta de erro. Menos mal. O problema, então, esta na hora de fazer o download propriamente dito. Se puderem dar uma olha no código abaixo e na mensagem de erro, agradeço muito! Creio que é um erro comum a outros também... Abraços! // ===== download arquivo ============================ $servidor = "ftp.meusite.com.br"; $usuario = "meusite"; $senha = "minhasenha"; $local = "/remessa"; $tipos = array("xml","txt"); //"jpe", "jpeg", "gif", "png" // endereço do diretório $diretorio = 'remessa/'; // abre o diretório $ponteiro = opendir($diretorio); // monta os vetores com os itens encontrados na pasta while ($nome_itens = readdir($ponteiro)) { $itens[] = $nome_itens; } sort($itens); foreach ($itens as $listar) { if ($listar!="." && $listar!="..") { if (is_dir($listar)) { $pastas[]=$listar; } else { if (in_array(strtolower(end(explode(".",$listar))), $tipos)) { $arquivos[]=$listar; }; } } } // lista as pastas se houverem echo "Lista de arquivos da pasta ".$local; echo "<br />"; if ($pastas != "" ) { foreach($pastas as $listar) { print "Pasta: <a href='$listar'>$listar</a><br>"; } } // lista os arquivos se houverem if ($arquivos != "") { foreach($arquivos as $listar) { print " » <a href='$listar'>$listar</a><br>"; } } //faço a conexão para poder fazer o download $conn_id = ftp_connect("$servidor"); // conexão com servidor de FTP if ( !$conn_id ) { // checa conexão echo "<font color='red'>Não foi possível conectar ao servidor <b>$servidor</b>.</font><br>"; } else { echo "<br />Conectado ao servidor <b>$servidor</b>.<br>"; $login_result = ftp_login($conn_id, "$usuario", "$senha"); // login if ( !$login_result ) { // checa usuário e senha echo "<font color='red'>Usuário: <b>$usuario</b> ou senha inválidos.</font><br>"; } else { echo "Autenticação do usuário <b>$usuario</b> realizada com sucesso.<br><br>"; foreach($arquivos as $listar) { $arqretorno = "/var/www/site/retorno/".$listar; $download = ftp_get($conn_id, "$arqretorno", "$listar", FTP_ASCII); if (!$download) { // checa download do arquivo echo "<font color='red'>O download do arquivo <b>$listar</b> falhou!</font><br>"; } else { echo "Download do arquivo <b>$listar</b> realizado com sucesso.<br>"; } } } } // ftp_quit($conn_id); // fecha conexão com servidor de FTP //===== fim download arquivo txt ======================== Como resposta, aparece uma lista com todos os arquivos de teste que coloquei na pasta e, na mensagem de erro, aparece o nome destes arquivos, o que significa que estou conseguindo ler todos e na hora de fazer o download são eles que estou tentando copiar. Mas não sei o que estou fazendo de errado que não consigo efetuar a cópia para meu computador. Será que é porque o site está hospedado em um servidor remoto (nem sei onde??) Abaixo, copiei o retorno do código com a mensagem de erro de alguns arquivos... Lista de arquivos da pasta /remessa » 1234567890_20081227_145126_arquivoteste.xml » 1234567890_27122008_arquivoteste.xml » 1234567890_2712_arquivoteste.xml » 1234567890_arquivoteste.xml » 1234567890arquivoteste.xml » 71753297000104_20081227_145447_arquivoteste.xml » 71753297000104_20081227_145712_arquivoteste.xml » arquivoteste.xml Conectado ao servidor ftp.meusite.com.br. Autenticação do usuário meusite realizada com sucesso. Warning: ftp_get() [function.ftp-get]: open_basedir restriction in effect. File(/var/www/site/retorno /1234567890_20081227_145126_arquivoteste.xml) is not within the allowed path(s): (/home/meusite/:/usr/share/pear/:/var/lib/php/:/tmp/) in /home/meusite/www/download_arqteste.php on line 123 -----> (/var/www/site/retorno é uma pasta de MEU computador)...... Warning: ftp_get(/var/www/site/retorno/1234567890_20081227_145126_arquivoteste.xml) [function.ftp-get]: failed to open stream: Operation not permitted in /home/meusite/www/download_arqteste.php on line 123 Warning: ftp_get() [function.ftp-get]: Error opening /var/www/site/retorno/1234567890_20081227_145126_arquivoteste.xml in /home/meusite/www/download_arqteste.php on line 123 O download do arquivo 1234567890_20081227_145126_arquivoteste.xml falhou! Warning: ftp_get() [function.ftp-get]: open_basedir restriction in effect. File(/var/www/site/retorno/arquivoteste.xml) is not within the allowed path(s): (/home/meusite/:/usr/share/pear/:/var/lib/php/:/tmp/) in /home/meusite/www/download_arqteste.php on line 123 Warning: ftp_get(/var/www/site/retorno/arquivoteste.xml) [function.ftp-get]: failed to open stream: Operation not permitted in /home/meusite/www/download_arqteste.php on line 123 Warning: ftp_get() [function.ftp-get]: Error opening /var/www/site/retorno/arquivoteste.xml in /home/meusite/www/download_arqteste.php on line 123 O download do arquivo arquivoteste.xml falhou! Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 16, 2009 É porque você não pode ler um diretório que não é seu, isso é uma quebra de segurança: Você tentou ler: /var/www/site/retorno /1234567890_20081227_145126_arquivoteste.xml) Você pode ler: /home/meusite/ A partir do diretório: /home/meusite/www/download_arqteste.php E dê uma olhada neste espaço em branco que existe aqui: /var/www/site/retorno /1234567890_20081227_145126_arquivoteste.xml Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 17, 2009 Marcio Leandro, você é muito claro em suas explicações! Legal! Você disse que eu tentei ler em var/www/site/retorno. Certo! Estou tentando gravar nesta pasta o arquivo que estou copiando lá do site (ftp). Vou alterar o endereço da pasta que irá receber esta cópia para minha pasta home. Pelo que entendi o problema não está lá no ftp mas sim no código, onde tento gravar em uma pasta que não está no meu /home, mesmo com permissão de escrita. Estou certo? Abraços! Paulo Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 18, 2009 Isto mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 18, 2009 Ops! Lista de arquivos da pasta /remessa » 1234567890_20081227_145126_arquivoteste.xml » 1234567890arquivoteste.xml » arquivoteste.xml Conectado ao servidor ftp.meusite.com.br. Autenticação do usuário meusite realizada com sucesso. Warning: ftp_get(home/paulo/www/1234567890_20081227_145126_arquivoteste.xml) [function.ftp-get]: failed to open stream: No such file or directory in /home/meusite/www/download_arqteste.php on line 120 Warning: ftp_get() [function.ftp-get]: Error opening home/paulo/www/1234567890_20081227_145126_arquivoteste.xml in /home/meusite/www/download_arqteste.php on line 120 O download do arquivo 1234567890_20081227_145126_arquivoteste.xml falhou! Bom, fiz a alteração da pasta que deve receber o arquivo do download, passando de /var/www/site/retorno/ para a pasta home/paulo/www/ (tirei a barra / antes de home porque estava aparecendo uma terceira mensagem de erro, como no post anterior, mas não resolveu. Infelizmente ainda não sei o suficiente de PHP para poder analizar o que pode ser, mas o código a seguir: $download = ftp_get($conn_id, "$arqretorno", "$listar", FTP_ASCII);possui o $arqretorno, que é o "home/paulo/www" + $listar, resultando em home/paulo/www/123456....arquivoteste.xml, que é o que quero copiar;possui o $listar, que é o arquivo que está hospedado no ftp, em /home/meusite/www/remessa e que, no código, coloquei como /remessa e está sendo lido e armazenado em $listar, tanto que aparece a listagem dos arquivos que estão na pasta, e que uso em ftp_get. Resumindo: será que pode ter alguma restrição ou configuração por parte de quem faz a hospedagem do site, que dificulta a utilização deste ftp_get? Será que é alguma configuração? Abraços e desculpem se estou sendo insistente? Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 18, 2009 O erro agora é outro. Tá dizendo que o arquivo não foi encontrado. Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 18, 2009 Exato, Marcio! Acho que é porque deixei como "home/paulo/www".$listar e não como "/home/paulo/www".$listar. Veja a mensagem que aparece quando faço desta forma: Warning: ftp_get() [function.ftp-get]: open_basedir restriction in effect. File(/home/paulo/www/arquivoteste.xml) is not within the allowed path(s): (/home/meusite/:/usr/share/pear/:/var/lib/php/:/tmp/) in /home/meusite/www/download_arqteste.php on line 120 Warning: ftp_get(/home/paulo/www/arquivoteste.xml) [function.ftp-get]: failed to open stream: Operation not permitted in /home/meusite/www/download_arqteste.php on line 120 Warning: ftp_get() [function.ftp-get]: Error opening /home/paulo/www/arquivoteste.xml in /home/meusite/www/download_arqteste.php on line 120 O download do arquivo arquivoteste.xml falhou! Minha pasta pessoal, em home, aparece como drwxr-xr-x, que acredito ser o normal do linux. Será que posso alterar? Ou de /home? Obrigado pela paciência!! Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 18, 2009 Fiz o teste deixando a pasta home e paulo como drwxrwxrwx (usei chmod 777) só por via das dúvidas. Não é este o problema. Sei não... Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 18, 2009 Não adianta, você nunca vai conseguir ler uma pasta que não é sua. Você só pode ler o que está dentro de: echo realpath($_SERVER['DOCUMENT_ROOT']); Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 18, 2009 Então, deixa eu ver se eu entendi: eu até consigo ler o conteúdo de www/remessa, mas não vou poder copiar estes dados? Só poderia fazer isso se estivessem na pasta raiz? Ou se o servidor estivesse em minha máquina? Não há outra forma que eu possa usar para buscar estes arquivos lá no servidor, nem que para isso precise alterar as permissões da pasta ou arquivos? Mais uma vez, obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Janeiro 18, 2009 Não, não. Você não tem acesso a arquivos de outras pastas. Nem pra ler, nem pra executar, nem pra nada. Como a mensagem tá falando: O arquivo : /home/paulo/www/arquivoteste.xml não está no caminho permitido, que é /home/meusite/ Você só conseguirá ler dentro do diretório com o caminho permitido, que é o do site, ou seja, /home/meusite/. Compartilhar este post Link para o post Compartilhar em outros sites
lpc 0 Denunciar post Postado Janeiro 18, 2009 Entendi! Bom, vou tentar alterar aqui e ver o que consigo fazer... agradeço sua ajuda e espero conseguir postar aqui como resolvido e assim ajudar a outros também. Se persistir o erro, vou encher mais um pouco... Abraços! Paulo Compartilhar este post Link para o post Compartilhar em outros sites