Anonym-tsk / nfqws-keenetic

MIT License
639 stars 50 forks source link

[BUG] Лишний перенос строки при сохранении #107

Closed bear-gha closed 5 days ago

bear-gha commented 3 weeks ago

Приветствую. Веб пакет 2.5.9.

Делаем - например чистим auto.list до полной пустоты, жмем Save. Переключаем вкладки листов, возвращаемся назад в него же. Итог - лишний перенос строки. Если лист начнёт заполняться, вначале так же будет лишний перенос строки.

LordSlon commented 2 weeks ago

Друг, оно ж никак на функциональность не влияет)

bear-gha commented 2 weeks ago

С таким раскладом можно на все баги забивать 😉

bear-gha commented 1 week ago

Поковырял немного, проблема с переносом тут:

    $lastChar = substr($s, -1);
    if ($lastChar !== "\n") {
        $s .= "\n";
    }

Если поправить на это, то переноса лишнего не будет:

    $lastChar = substr($s, -1);
    if ($lastChar !== "\n" && !empty($s)) {
        $s .= "\n";
    }

Но возникает новая ошибка из-за этого:

        case 'filesave':
            $result = saveFile($_POST['filename'], $_POST['content']);
            $response = array('status' => $result ? 0 : 1, 'filename' => $_POST['filename']);
            break;

Потому что этот код работает некорректно:

function saveFile(string $filename, string $content, $path = ROOT_DIR . '/etc/nfqws') {
    $filename = basename($filename);
    $file = $path . '/' . $filename;
    if (file_exists($file)) {
        return file_put_contents($file, normalizeString($content));
    } else {
        return false;
    }
}

Вот в этой части: return file_put_contents($file, normalizeString($content)); Так как функция возвращает 0, потому что записала 0 байт, а не потому что она сфейлилась, а при 0 другой код думает, что произошел фейл. Это описано тут - https://www.php.net/manual/en/function.file-put-contents.php

Warning This function may return Boolean false, but may also return a non-Boolean value which evaluates to false. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Если исправить код на это, то оно работает, но по "красоте" оно мне не нравится, т.к. "кривой" ретурн никуда не делся, всего лишь обошел исключением:

function saveFile(string $filename, string $content, $path = '/opt/etc/nfqws') {
    $filename = basename($filename);
    $file = $path . '/' . $filename;
    if (file_exists($file)) {
        if (empty($content)) {
            file_put_contents($file, "");
            return true;
        } else {
        return file_put_contents($file, normalizeString($content));
        }
    } else {
        return false;
    }
}

Поправил красиво, оформил пул, проверяйте.

П.С. Все еще жду кнопку очищения лога ;).