php file_put_contents без записанных байтов - PullRequest
0 голосов
/ 10 ноября 2018

у меня есть файл php file_put_contents так;

file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);

когда он записывает в мой файл test.txt , вывод соответствует количеству байтов, записанных в файл.

а: 4: {s: 4: "имя"; s: 4: "аааа"; s: 5: "электронная почта"; s: 10: "aaa@gmx.de"; s: 7: "сообщение "; s: 27:" мм "; s: 8:" datetime "; s: 22:" 10.11.2008 05:20:35 pm ";}

Я сделаю так, чтобы он ТОЛЬКО записывал данные БЕЗ номера байтов, может кто угодно поможет мне, спасибо!

мой код;

<?php

header('Content-Type: text/html; Charset=utf-8');
mb_internal_encoding('UTF-8');
date_default_timezone_set('Europe/Berlin');
error_reporting(E_ALL);


class ClassProveContakt3 
{

  private $Name;
  private $Email;
  private $Message;
  private $PostOK;
  private $DateTime;
  private $items; 


   function __construct() 
   {


      $this -> DateTime = date('m/d/Y h:i:s a');  
      $this -> items = ['Name', 'Email', 'Message']; 

      $flag = true;
      foreach ( $this -> items as $key ) {  
                   if ( empty ( $_POST[$key] ) )  {
                     $flag = false;    
                   } else {    
                     $this -> $key = trim( filter_var( $_POST[$key], FILTER_SANITIZE_STRING ) );
                    }    
       }         
     $this -> PostOk = $flag; 
 }





 function ShowForm() 
 {
 ?>
   <form method="POST">
     <label for="name">Name </label>
     <input type="text" id="name" name="Name" value="<?= $this->Name ?>">
     <label for="email">E-mail </label>
     <input type="email" id="email" name="Email" value="<?= $this->Email     

      ?>">
     <br><br>
     <label> Message: <br>
       <textarea cols="45" rows="6" name="Message"><?= $this->Message ?></textarea>      
     </label>
     <br><br>
     <input  type="submit" name="post" value="POST COMMENT" id="comment">
   </form>
 <?php
 }




 function PostOkT() 
 {

   if ($this -> PostOK) 
   {
      return;

   }     
   if (empty($this->Name) ||  empty($this->Email) || empty($this->Message))
   {

     echo "<br>" . "<b>" . "<h3>*** Please enter all required fields ***</h3>" . "</b>";  


   } 
   else 
   {

        $file = "test.txt"; 

        $datetime = date('m/d/Y h:i:s a', time());
        $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);           


        $data = serialize($data);
        file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);

        $messages = file($file);

        foreach ($messages as $value) {
            $data = unserialize($value);


                 echo "<br>"

                       . "<b>From: </b>" . htmlspecialchars( $data["name"])
                       . "<b> at: </b>" . htmlspecialchars( $data["datetime"])
                       . "<br><br>" . htmlspecialchars( $data["email"])                                     
                       . "<br><br>" . htmlspecialchars( $data["message"])
                       . "<br><hr>";

                   }

                }




    }

}       

?>

1 Ответ

0 голосов
/ 12 ноября 2018

@ Найджел Рен, я должен сделать, как ты мне скажешь ... с json ..., я должен попробовать без Json, но, поскольку я очень новичок в PHP, я не знаю, как это сделать ....

Может быть, заголовок моего вопроса, php file_put_contents без записанных байтов не самый лучший .... потому что это не ответственность по количеству моих байтов, а функция сериализации ..... Возможно, лучшим заголовком будет: PHP - Как отобразить возвращаемое значение без номера байта и без Json .

Потому что в моем коде есть массив

$data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);

должен использовать функцию serialize , поэтому я получаю вывод с количеством байтов.

Функция сериализации

Массив или объект PHP или другая сложная структура данных не могут быть перенесены, сохранены или использованы иным образом за пределами работающего сценария PHP. Если вы хотите сохранить такую ​​сложную структуру данных после одного запуска скрипта, вам нужно ее сериализовать. Это просто означает поместить структуру в «более низкий общий знаменатель», который может обрабатываться другими вещами, кроме PHP, такими как базы данных, текстовые файлы, сокеты. Стандартная функция PHP serialize - это просто формат для выражения такой вещи, она сериализует структуру данных в строковое представление, уникальное для PHP, и может быть преобразовано в объект PHP с помощью unserialize. Однако существует много других форматов, таких как JSON или XML.

С здесь (Первый ответ ..)

Итак, поскольку я не получу свои возвращаемые значения вместе с числом байтов и не знаю, что делать только с PHP, я использую Json. В моем коде у меня есть только для изменения else оператор, остальные из кода остаются идентичными.

else 
{

      $file = "test.txt"; 

      $datetime = date('m/d/Y h:i:s a', time());
      $data = array("name" => $this->Name, "email" => $this->Email, "message" => $this->Message, "datetime" => $datetime);


      $data = json_encode($data);
      file_put_contents($file, $data . "\n", FILE_APPEND|LOCK_EX);


      $messages = file($file);

      foreach ($messages as $value) {
           $data = json_decode($value, true);


                  echo "<br>"

                             . "<b>From: </b>" . htmlspecialchars( $data["name"])
                             . "<b> at: </b>" . htmlspecialchars( $data["datetime"])
                             . "<br><br>" . htmlspecialchars( $data["email"])                                     
                             . "<br><br>" . htmlspecialchars( $data["message"])
                             . "<br><hr>";

      }

}

и теперь мой вывод из моего файла test.txt

{"name": "aaaa", "email": "aaa@gmx.de", "message": "mmmmmmmmmmmmmmmmmmmmmmmmmmm", "datetime": "12.11.2008 02:49:46 pm"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...