PHP: добавление текста в файл - PullRequest
0 голосов
/ 16 января 2011

Я пытаюсь настроить аутентификацию на моем сервере, однако я мало знаю о Php.

У меня есть php-файл, заполненный пользователями и паролями:

 function getPassword( $user )
 {
    // the user/password database. For very small groups
    // of users, you may just get away with expanding this
    // array.
    $passwords= array (
        'user1' => 'password1',
        'user2' => 'password2',
        'user3' => 'password3',
        'user4' => 'password4'
         );
    $password = $passwords[ $user ];
    if ( NULL == $password )
        return NULL;

Не редактируя вручную массив паролей, я хочу, чтобы php-файл считывал пользовательские вводы для имен пользователей и паролей и добавлял его в массив.

Я смутно представляю, как это может работать, просматривая документацию:

<?php
function fwrite_stream($fp, $string) {
    $fp = fopen('shit.php', 'w');
    for ($written = 0; $written < strlen($string); $written += $fwrite) {
        $fwrite = fwrite($fp, substr($string, $written));
        if ($fwrite === false) {
            return $written;
        }
    }
    return $written;
    fclose($fp);
}
?>

Как мне сказать это для записи в массив?

Ответы [ 2 ]

1 голос
/ 16 января 2011

Я бы не стал жестко кодировать список имен пользователей и паролей в вашем скрипте PHP.Вместо этого я бы сделал что-то подобное для чтения массива с диска:

// Web server must have read permission for the file,
// but it should be placed outside of public_html
// for security reasons.
$gPasswordFile = '/home/kevin/password.db';

// Read the password file's entire contents as a string.
$contents = file_get_contents($gPasswordFile);

// Unserialize the file's contents, assuming an empty array
// if the file does not exist.
$passwords = $contents ? unserialize($contents) : array();

Для записи массива на диск:

file_put_contents($gPasswordFile, serialize($contents)) or die('Could not save password file!');

Если бы вы имели тысячи пользователей, как наобщедоступный веб-сайт, было бы неэффективно загружать всю пользовательскую базу данных при каждой попытке входа в систему.Тогда вы, скорее всего, обратились бы к реальной СУБД, такой как MySQL, для хранения информации.

(Как примечание: вам действительно следует хэшировать пароли с солью для каждого пользователя, чтобы ограничить эффект компрометации файла паролейСохраните это для другого вопроса.)

1 голос
/ 16 января 2011

Я бы настоятельно рекомендовал против того, что вы пытаетесь сделать сейчас. Почему бы не хранить пароли в отдельном файле, а сценарий для чтения / записи? Таким образом, манипулирование PHP вызывает проблемы, так как вам нужно помнить о каждом виде ввода, который ваши пользователи могут использовать для этого.

Я думаю, что ваша лучшая ставка - file_put_contents('filename.txt', "\"$username\",\"$password\\n" FILE_APPEND); (конечно, вам придется применить экранирование и / или проверку имени пользователя / пароля)

Затем получите содержимое с помощью $passwords = fgetcsv('filename.txt')

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