Fórum Não localiza arquivo na pasta #586265

26/09/2017

0

PHP

Pessoal é o seguinte, tenho o script que quando uso ele em ambiente de teste no windows com xamp ele localiza o arquivo que preciso tudo perfeito, com caminho absoluto até a pasta.

Porem quando fiz o upload do sistema para o servidor linux debian ele não localiza mais o arquivo, creio que seja o caminho a baixo o código.

o caminho absoluto da pasta onde se encontram os arquivo é: /var/www/html/nfe/arquivos/
já tentei todas as formas a baixo, quando ele chega no if a comparação não bate e ele salta.


<?php
$pasta = 'arquivos/';
//$pasta = '/arquivos/';
//$pasta = './arquivos/';
//$pasta = '../arquivos/';
//$pasta = '../nfe/arquivos/';
//$pasta = 'nfe/arquivos/';
//$pasta = '/nfe/arquivos/';
//$pasta = '/html/nfe/arquivos/';
//$pasta = '/var/www/html/nfe/arquivos/';

$xmlNfe = $pasta."Nfe".$_POST["arquivo"]."-nfe.xml";
$pdfNfe = $pasta."Nfe".$_POST["arquivo"]."-nfe.pdf";


	   if(isset($xmlNfe) && file_exists($xmlNfe) && ($pdfNfe) && file_exists($pdfNfe) ){ // faz o teste se a variavel não esta vazia e se o arquivo realmente existe

               $zip = new ZipArchive();

                if( $zip->open( '/var/www/html/nfe/zips/arquivo.zip',ZipArchive::CREATE )  === true){

                    $zip->addFile($pdfNfe , 'Danfe.pdf');
                    $zip->addFile($xmlNfe , 'xml.xml');
                    $zip->close();
                }
                $dir = '/var/www/html/nfe/zips/';
                $arquivo = 'arquivo.zip';
                $var = "application/force-download";
                if(file_exists($dir.$arquivo)){
                header("Pragma: public");
                header("Expires: 0");
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                header("Cache-Control: private",false);
                header("Content-Type: $var");
                header("Content-Disposition: attachment; filename=\\"".basename($dir.$arquivo)."\\";" );
                header("Content-Transfer-Encoding: binary");
                header("Content-Length: ".filesize($dir.$arquivo));
                readfile($dir.$arquivo);
                }

                unlink($dir.$arquivo);

	   }else{
               echo "<script>window.location='index.php';alert('CHAVE da NFe não condiz com uma NFe valida ou foi digitada incorretamente! Tente novamente!');</script>";
               exit;
           }
exit;

Leonardo Freitas

Leonardo Freitas

Responder

Post mais votado

27/09/2017

Olá Leonardo,
tudo bem?

Quando disponibilizamos uma página web(site), o caminho padrão no servidor é o conteúdo inserido na pasta www ou public_html. Então, teoricamente tudo o que está contido em public_html, faz parte do site publicado.
Dentro dela você pode conferir seus arquivos, diretórios, scripts, entre outros.

Por exemplo:
arquivo: index.php
arquivo: empresax.php
arquivo: meuscript.php
diretorio: imagens
diretorio: notafiscal
Supondo que dentro do diretório notafiscal, temos o subdiretório: arquivos.
Dessa forma, para que o arquivo meuscript.php (que está na raiz) localize o subdiretório arquivos, eu tenho que informar o seguinte caminho:
$pasta = '/notafiscal/arquivos/';

No Xampp é comum criarmos a pasta com o nome do nosso projeto.
Pode ser que vc tenha ai, o caminho: C:\\xampp\\htdocs\\meuprojetox\\
Só que no servidor a pasta meuprojetox não será necessária, apenas o conteúdo dentro dela que deve ser extraido na raiz www. Então se localizar no servidor a sua index, também conseguirá localizar todas as pastas e subpastas que precisa.

Espero ter ajudado!
Abraços,

Cida Luna - São Carlos,SP.

Aparecida Gonçalves

Aparecida Gonçalves
Responder

Gostei + 1

Mais Posts

27/09/2017

Leonardo Freitas

Obrigado pela ajuda, não tem 10 minutos que consegui resolver.
Coloquei a culpa no caminho mas...
Depois de muita dor de cabeça percebi que no código o prefixo da chave "Nfe" tinha que ser com F maiúsculo. kkkkk
Quase perdi o juízo de raiva.
Mas é assim mesmo o código pega você no detalhe.

Me tire uma duvida fora desse contesto, tem alguma coisa que eu deva me preocupar nesse código com o quisto segurança?
A chave já tem validação, no formulário, só aceita números.
E como vem por post, não pode enviar na URL.
Mas a IDE me per tuba por um filtro em:

$xmlNfe = $pasta."Nfe".$_POST["arquivo"]."-nfe.xml";
$pdfNfe = $pasta."Nfe".$_POST["arquivo"]."-nfe.pdf";


Como não sei muito de PHP não consegui aplicar o filter_imput().
Você poderia me dizer como ele ficaria aplicado?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar