Ir para conteúdo
Fórum Script Brasil
  • 0

gravar arquivo txt


netocazuza

Pergunta

Estou estudando um sistema php que salva o resultado do processamento num arquivo txt. Estava tudo funcionando até eu implantar a parte do gravar o arquivo txt  (orders.txt) numa pasta do meu servidor. Agora aparece o http error 500 e não salva nada. Gostaria que alguém desse uma olhada no arquivo pra ver se encontra o erro. Estou executando o arquivo num navegador google chrome no windows 7, e os arquivos do php estão num servidor linux ubuntu (12.04). Tava funcionando tudo certinho quando eu exibia o resultado na tela apenas. Depois que implementei a rotina de salvar no arquivo txt, que passou a abrir esse erro 500. Vejam o código original:

<html>
<head>
        <title>Bob's auto Parts - Order Results</title>
</head>
<body>
<h1>Bob's Auto Parts</h1>
<?php
// cria nomes de variaveis abreviados
$tireqty = $_POST['tireqty'];
$oilqty = $_POST['oilqty'];
$sparkqty = $_POST['sparkqty'];
$address = $_POST['address'];
$DOCUMENT_ROOT = $_SERVER_VARS['DOCUMENT_ROOT'];
?>
<?php
echo '<p>Pedido processado.</p>';

$date =  date('H:i, jS F');
echo $date;
?>
<h2>Resultado pedido</h2>
<?php
echo '<p>A sua encomenda é a seguinte: </p>';

$totalqty = 0;
$totalqty = $tireqty + $oilqty + $sparkqty;
if($totalqty == 0)
        {
        echo '<font color=red size=5>';
        echo 'Você não selecionou nenhum item na página anterior!<br />';
        echo '</font>';
        }
else
{
        if ($tireqty>0)
                echo $tireqty.' pneus<br />';
        if ($oilqty>0)
                echo $oilqty.' litros de óleo<br />';
        if ($sparkqty>0)
                echo $sparkqty.' velas de ignição<br />';
}
if($tireqty<10)
        $discount = 0;
elseif($tireqty >= 10 && $tireqty <= 49)
        $discount = 5;
elseif($tireqty >= 50 && $tireqty <= 99)
        $discount = 10;
elseif($tireqty >= 100)
        $discount = 15;
echo 'Total de itens pedido: '.$totalqty.'<br />';
$totalamount = 0.00;
define('TIREPRICE', 100 - $discount);
define('OILPRICE', 10);
define('SPARKPRICE',4);
$totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE;
echo 'Subtotal: R$'.number_format($totalamount,2).'<br />';
$taxrate = 0.10; // o imposto de vendas local é 10%
$totalamount = $totalamount * (1 + $taxrate);
echo 'Total incluindo impostos: $'.number_format($totalamount,2).'<br />';
echo 'Entregar em: '.$address. '<br />';
switch($find)
{
        case 'a' :
                echo '<p>Cliente Regular.</p>';
                break;
        case 'b' :
                echo '<p>Cliente Obtido por propaganda de TV.</p>';
                break;
        case 'c' :
                echo '<p>Cliente Lista Telefônica.</p>';
                break;
        case 'd' :
                echo '<p>Cliente Boca a Boca.</p>';
                break;
        default :
                echo '<p>Não sabemos como o Cliente nos encontrou.</p>';
                break;
}
$outputstring = $date."\t".$tireqty." pneus \t".$oilqty." Óleo\t"
                $sparkqty." Velas de Ignição\t\R$".$totalamount
                ."\t". $address."\n";
// abre o arquivo para anexar
fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'ab');
if (!$fp)
{
        echo '<p><strong> Seu pedido não poderá ser processado nesse momento. '
        .'Por favor, tente novamente mais tarde.</strong></p></body></html>';
        exit;
}
fwrite($fp, $outputstring, strlen($outputstring));
fclose($fp);
echo '<p>Pedido Gravado!</p>';
?>
</body>
</html>

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Você pode fazer alguns testes no próprio script pra descobrir onde ocorre alguma falha.

Teste assim e veja o que acontece:

<?php
// ativa a exibição de possíveis falhas
error_reporting(E_ALL);

// == definição de variáveis: == //
$date = date('H:i, jS F');

// se algo foi postado
if (sizeof($_POST)) {
// define nomes de variaveis abreviados
   $tireqty = $_POST['tireqty'];
   $oilqty = $_POST['oilqty'];
   $sparkqty = $_POST['sparkqty'];
   $address = $_POST['address'];
   $totalqty = $tireqty + $oilqty + $sparkqty;
} else {
   // caso nada tenha sido postado, exibe erro na tela:
   die('<p><b>ERRO!</b> Nada foi postado!</p>');
}
// verificar se existe a superglobal $_SERVER_VARS:
if (isset($_SERVER_VARS['DOCUMENT_ROOT'])) {
   $DOCUMENT_ROOT = $_SERVER_VARS['DOCUMENT_ROOT'];
} else {
   // se não existir a variável, exibe erro na tela:
   die('<p><b>ERRO!</b> A variável <b>$_SERVER_VARS[\'DOCUMENT_ROOT\']</b> não existe!</p>');
}
?>
<!doctype html>
<html>
   <head>
      <meta charset="utf-8">
      <title>Bob's auto Parts - Order Results</title>
   </head>
   <body>
      <h1>Bob's Auto Parts</h1>
      <p>Pedido processado.</p>
      <?= $date; ?>
      <h2>Resultado pedido</h2>
      <p>A sua encomenda é a seguinte: </p>
      <?php
      if ($totalqty == 0) {
         echo '<font color=red size=5>
         Você não selecionou nenhum item na página anterior!<br>
         </font>';
      } else {
         if ($tireqty > 0)
            echo $tireqty . ' pneus<br>';
         if ($oilqty > 0)
            echo $oilqty . ' litros de óleo<br>';
         if ($sparkqty > 0)
            echo $sparkqty . ' velas de ignição<br>';
      }
      if ($tireqty < 10)
         $discount = 0;
      elseif ($tireqty >= 10 && $tireqty <= 49)
         $discount = 5;
      elseif ($tireqty >= 50 && $tireqty <= 99)
         $discount = 10;
      elseif ($tireqty >= 100)
         $discount = 15;
      echo 'Total de itens pedido: ' . $totalqty . '<br>';
      $totalamount = 0.00;
      define('TIREPRICE', 100 - $discount);
      define('OILPRICE', 10);
      define('SPARKPRICE', 4);
      $totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE;
      echo 'Subtotal: R$' . number_format($totalamount, 2) . '<br>';
      $taxrate = 0.10; // o imposto de vendas local é 10%
      $totalamount = $totalamount * (1 + $taxrate);
      echo 'Total incluindo impostos: $' . number_format($totalamount, 2) . '<br>';
      echo 'Entregar em: ' . $address . '<br>';

      // verificar se a variável $find existe:
      if (isset($find)) {
         switch ($find) {
            case 'a' :
               echo '<p>Cliente Regular.</p>';
               break;
            case 'b' :
               echo '<p>Cliente Obtido por propaganda de TV.</p>';
               break;
            case 'c' :
               echo '<p>Cliente Lista Telefônica.</p>';
               break;
            case 'd' :
               echo '<p>Cliente Boca a Boca.</p>';
               break;
            default :
               echo '<p>Não sabemos como o Cliente nos encontrou.</p>';
               break;
         }
      } else {
         // caso a variável $find não exista:
         die('<p><b>ERRO!</b> A variável <b>$find</b> não existe!</p>');
      }
      $outputstring = $date . "\t" . $tireqty . " pneus \t" . $oilqty . " Óleo\t" .
              $sparkqty . " Velas de Ignição\t\R$" . $totalamount
              . "\t" . $address . "\n";

// pasta onde o arquivo txt será salvo
      $folder = $DOCUMENT_ROOT . '/../orders/';

// verificar se a pastinha existe:
      if (is_dir($folder)) {
// abre o arquivo para anexar
         fopen($folder . 'orders.txt', 'ab');
         if (!$fp) {
            die('<p><b>Seu pedido não poderá ser processado nesse momento.</b><br>Por favor, tente novamente mais tarde.</p>');
         }
         fwrite($fp, $outputstring, strlen($outputstring));
         fclose($fp);
         echo '<p>Pedido Gravado!</p>';
      } else {
         die("<p><b>ERRO!</b> A pastinha <b>$folder</b>, não existe!</p>");
      }
      ?>
   </body>
</html>

 

Editado por wash
Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Wash, mas consegui um outro arquivo pronto aqui na net, e implementei no meu sistema, pra poder avançar no estudo. Estou vendo sua sugestão só hoje, e como mantive o arquivo com erro, num momento oportuno, vou verificar isso e coloco um retorno aqui.

Editado por netocazuza
correções
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...