[PHP]Dlaczego dane nie są zapisywane do pliku?

0

Dlaczego dane nie są zapisywane do pliku. W dodatku strona wczytuje się strasznie długo.

<?php
    define('FILE_NAME', 'list.dat');
    define('MAX_BREAK', 30);

    function write($file, $ip, $time)
    {
        fwrite($file, $ip . '|' . $time . '\n');
    }

    $new_ip = /*$REMOTE_ADDR*/ $_SERVER['REMOTE_ADDR'];
    $file = fopen(FILE_NAME, 'w+');
    echo "new_ip: '$new_ip', time: '" . time() . "'";
    //flock($file, LOCK_EX | LOCK_SH);

    $array = file(FILE_NAME, FILE_IGNORE_NEW_LINES);
    $contains = false;
    foreach ($array as $record)
    {
        $values = explode('|', $record);
        $ip = $values[0];
        $time = $values[1];
        if ($ip == $new_ip)
        {
            $time = time();
            $contains = true;
        }
        if (time() - $time < MAX_BREAK)
            write($file, $ip, $time);
    }
    if (!contains)
        write($file, $new_ip, time());

    //flock($file, LOCK_UN);
    fclose($file);
?>
0
  1. $array masz puste
  2. nie !contains a !$contains
0

Oj rzeczywiście ;) Przyzwyczajenia z języków bez '$'. Jeszcze tylko mi powiedz, dlaczego if (contains) nie wywalało błędu?

0

a co masz w php.ini
polecam zainteresowac sie flagami w .htaccess

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on

0

Ten poprawiony kod wykonuje się bardzo wolno, czy jest to jego wina, czy to coś nie tak być musi z serwerem?

Done
<?php
    define('FILE_NAME', 'list.dat');
    define('MAX_BREAK', 30);

    function write($file, $ip, $time)
    {
        fwrite($file, $ip . '|' . $time . "\n");
    }

    $new_ip = /*$REMOTE_ADDR*/ $_SERVER['REMOTE_ADDR'];
    $file = fopen(FILE_NAME, 'w+');
    flock($file, LOCK_EX | LOCK_SH);

    $array = file(FILE_NAME, FILE_IGNORE_NEW_LINES);
    $contains = false;
    foreach ($array as $record)
    {
        $values = explode('|', $record);
        $ip = $values[0];
        $time = $values[1];
        if ($ip == $new_ip)
        {
            $time = time();
            $contains = true;
        }
        if (time() - $time < MAX_BREAK)
            write($file, $ip, $time);
    }
    if (!$contains)
        write($file, $new_ip, time());

    flock($file, LOCK_UN);
    fclose($file);
?>
0

Wiem już, że to wina serwera. Dlaczego $array jest pusta, skoro plik zawiera jeden rekord?

0
 
$myFile = "twój plik";

//$section to zawartość wcześniejsza pliku
$section = file_get_contents($myFile, FILE_USE_INCLUDE_PATH);

//otwieramy plik
$fh = fopen($myFile, 'w') or die("can't open file");

//nowe dane to wcześniejsze + to co chcemy dodać
$stringData = $section."\n jakiś tekst";

//zapisz
fwrite($fh, $stringData);

//zamknij
fclose($fh);

1 użytkowników online, w tym zalogowanych: 0, gości: 1