• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

AutoInkrementacja w pliku txt

Object Storage Arubacloud
0 głosów
128 wizyt
pytanie zadane 14 lipca 2020 w PHP przez prymex Obywatel (1,250 p.)

Witam mam problem, chciałem napisać cos w stylu logów na mojej stronie, niestety nie wiem jak zrobić autoinkrementacje ponieważ funkcja $newid zwraca stringa a nie mogę go przekonwertować na inta:

      $file = "../xmloperation/file.txt";

      $oldsave = file_get_contents($file);

      $lines = count(file($file));
      $line = file($file);

      $id = 1;

      if($lines >= 1){
        $lin = $line[($lines)-1];
        $newid = substr($lin, strpos($lin, "<td>"), strpos($lin, "</td>"));
      }

      $newsave = "<tr><td>". $id . "</td><td>Logowanie</td><td>Administrator zalogował się</td><td>" . date("d.m.Y H:i") . "</td></tr>";
      $newfile = $oldsave . PHP_EOL . $newsave;
      file_put_contents($file, $newfile);

 

komentarz 14 lipca 2020 przez Assasz Nałogowiec (30,460 p.)
$newid = (int) substr(...

;)

komentarz 14 lipca 2020 przez prymex Obywatel (1,250 p.)
Na wyjściu daje 0 mimo że int jest 1. Muszę chyba przebudować ten kod ale nie dokońca wiem jak! ;0
komentarz 14 lipca 2020 przez Assasz Nałogowiec (30,460 p.)
edycja 14 lipca 2020 przez Assasz

https://www.php.net/manual/en/function.substr.php

Ponieważ w przypadku błędu funkcja zwraca FALSE, czyli 0. I tak, też bym to przebudował - obiektowo ;)

1 odpowiedź

0 głosów
odpowiedź 14 lipca 2020 przez VBService Ekspert (252,740 p.)
edycja 16 lipca 2020 przez VBService

Moja propozycja, może zainspiruje Ciebie. wink

test_admin_log.php

<?php
    $file_name = "../xmloperation/file.txt";
    // Można (trzeba?) dopisać zabezpieczenie jak plik file.txt nie istnieje
    // coś w stylu if (file_exists($file_name))  { ... } else { $count_lines = 0; }
    $lines = file($file_name);
    $count_lines = count($lines);

    $tr_last_line = "";
    $tr_all_lines = "";

    if ($count_lines == 0) { // Pusty plik log'ów
        $log_line = prepare_log_line('1');
        file_put_contents($file_name, $log_line, LOCK_EX);
        $tr_last_line = $tr_all_lines = $log_line; // Do demonstracji ;-)
    } else {
        // $last_line = count($lines) - 1;
        // Ponieważ zrobiliśmy w 6 linii kodu count(), możemy
        $last_line = $count_lines - 1;
        // Odczytujemy ostatni wpis z pliku log - file.txt
        $tr_last_line = $lines[$last_line];
        // Odczytanie wartości ostatniego ID i utworzenie nowego
        $new_id = new_ID($tr_last_line);
        // Nowy wpis do pliku log
        $new_log_line = prepare_log_line($new_id);
        file_put_contents($file_name, $new_log_line, FILE_APPEND | LOCK_EX);

        /*
            Można jeszcze raz odczyta plik
            $lines = file($file_name);
            $count_lines = count($lines);

            for ($i=0; $i<$count_lines; ++$i) {
                $tr_all_lines .= $lines[$i];
            }
        */

        // ... lub
        for ($i=0; $i<$count_lines; ++$i) {
            $tr_all_lines .= $lines[$i];
        }
        // Do wszystkich dodajem ostatnio utworzoną
        $tr_all_lines .= $new_log_line;
        // ... koniec lub
    }

    $file_name = basename($file_name);

    function prepare_log_line($id) {
        $log_line = "<tr><td>%id_loged%</td><td>Logowanie</td><td>Administrator</td><td>%date_loged%</td></tr>";
        $log_line = str_replace('%id_loged%', $id, $log_line);
        $log_line = str_replace('%date_loged%', date("d.m.Y H:i:s"), $log_line) . PHP_EOL; // :s dodane żeby widać nowe wpisy
        return $log_line;
    }
    function new_ID($input) {
        $return = substr($input, strpos($input, "<td>"), strpos($input, "</td>") +1);
        $return = (int) strip_tags($return);
        return ++$return;
    }
?>
<!DOCTYPE html>
<html lang="pl">
<heda>
    <meta charset="utf-8">

<style>
body {
    margin: 0;
    padding: 0;
    font: small-caps bold 14px/28px Arial, monospace;
}
table {
    margin: 10px;
}
thead {
    background-color: black;
    color: white;
    text-align: center;
}
thead tr:first-child th {
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
}
thead th {
    padding-left: 10px;
    padding-right: 10px;
}
tbody td {
    text-align: center;
    padding-left: 10px;
    padding-right: 10px;
}
tbody tr:nth-child(odd) {
    background-color: lightgrey;
}
tbody tr:nth-child(even) {
    background-color: grey;
}
tbody tr:hover {
    background-color: rgba(255, 99, 71, 0.6);
}
tfoot td {
    text-align: center;
    padding-top: 20px;
}
tfoot button {
    box-shadow: 2px 2px 2px black;
    -webkit-box-shadow: 2px 2px 2px black;
    -moz-box-shadow: 2px 2px 2px black;
    font-variant: small-caps;
    cursor: pointer;
}
tfoot button:active {
    transform: translateY(1px);
    -webkit-transform: translateY(1px);
    -moz-transform: translateY(1px);
    box-shadow: none;
    -webkit-box-shadow: none;
    -moz-box-shadow: none;
}
.file-name {
    padding-left: 10px;
    color: yellow;
}
</style>
</heda>
<body>
    <table>
        <thead>
            <tr><th colspan="4">Ostatni wpis z pliku <span class='file-name'><?php echo $file_name; ?></span></th></tr>
            <tr><th>ID</th><th>Operacja</th><th>Rola</th><th>Data</th></tr>
        </thead>
        <tbody>
            <?php echo $tr_last_line; ?>
        </tbody>
    </table>
    <table>
        <thead>
            <tr><th colspan="4">Wszystkie wpisy z pliku <span class='file-name'><?php echo $file_name; ?></span></th></tr>
            <tr><th>ID</th><th>Operacja</th><th>Rola</th><th>Data</th></tr>
        </thead>
        <tbody>
            <?php echo $tr_all_lines; ?>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="4"><button id="add_new_log">Demo dodaj nowy log</button></td>
            </tr>
        </tfoot>
    </table>
<script>
    const addNewLog = document.getElementById("add_new_log");
    addNewLog.addEventListener("click", event => {
        window.location.reload();
    });
</script>
</body>
</html>

Podobne pytania

0 głosów
0 odpowiedzi 401 wizyt
pytanie zadane 12 stycznia 2021 w Java przez Patryk2001 Początkujący (470 p.)
0 głosów
1 odpowiedź 459 wizyt
pytanie zadane 15 grudnia 2020 w Python przez Pico Obywatel (1,330 p.)
+1 głos
3 odpowiedzi 385 wizyt
pytanie zadane 17 września 2020 w C i C++ przez regge03 Nowicjusz (130 p.)

92,551 zapytań

141,393 odpowiedzi

319,524 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...