дважды включать переменные из файла php

#php #include #fopen

#php #включить #открыть

Вопрос:

У меня есть простые пользовательские файлы, подобные этому

joe.php

 <?php
$pass = 'joepassword';
$userpath = 'work/joe';
?>
  

сэм.php

 <?php
$pass = 'sampassword';
$userpath = 'work/sam';
?>
  

Я использую эти файлы для проверки подлинности текста, один из которых включается, как только пользователь входит в систему, указывая путь для этого пользователя при проверке аутентификации. После аутентификации я немедленно заменяю эту переменную $ pass на «текст», чтобы пароль не был доступен в качестве переменной для посторонних глаз.

Теперь мне нужно войти в систему как «Джо»

поэтому я включаю joe.php обработка $userpath

 $userpath='work/joe'
  

Теперь мне нужно для целей администрирования одновременно получить доступ к $ userpath Сэма в качестве места назначения и к $ userpath джо в качестве источника, но если я включу sam.php Я буду переопределять $ userpath Джо

Я полагаю, что есть более простое решение, такое как использование fopen и извлечение только (второго) пути для sam, но не уверен, как это сделать.

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

Комментарии:

1. Вы должны использовать носитель и формат, который предназначен для хранения данных. Это может быть простой текстовый файл, такой как файл CSV или файл json, но если его нужно масштабировать, вам понадобится база данных. Там вы могли бы сохранить свои комбинации имени пользователя / пользовательского пути / пароля, где вы действительно должны использовать хэш паролей password_hash() . И затем вы можете подтвердить своего пользователя, проверив доступные учетные данные в одном месте.

2. Марк, я бы настоятельно рекомендовал вам использовать какое-либо постоянное хранилище (плоский файл или базу данных) для ваших учетных записей пользователей. Вы бы использовали passwword_hash() для хранения и password_verify() для входа.

3. Я ценю комментарии yopur о базах данных и тому подобном, однако на данный момент я не меняю весь код. Я здесь спрашиваю, как проехать мимо лежачего полицейского на определенной улице, а вы говорите мне выбрать другую дорогу? Это не отвечает на вопрос. Метод аутентификации — это не то, что я собираюсь изменить. Кроме того, вы, очевидно, не понимаете, что не все приложения php доступны в Интернете. Это приложение только для локальной сети, в нем нет такой необходимости в высокой безопасности и не предпринимаются большие шаги для изменения кода для переключения на базу данных.

4. Вы могли бы сохранить информацию в формате JSON, которая может быть прочитана в вашей системе, в которой каждый пользователь может иметь информацию, относящуюся к ним, с теми же «ключами» для других пользователей. Нет реального способа сделать это с отдельными файлами, если вы не измените имя переменной после загрузки.

Ответ №1:

Сделайте их классами:

 class Sam() {
    public $userPath;
    public $password;
    public __construct($path,$password) {
        $this->userpath = $path;
        $this->password = $password;
    }
}

class Joe() {
    public $userPath;
    public $password;
    public __construct($path,$password) {
        $this->userpath = $path;
        $this->password = $password;
    }
}

$joe = new Joe("user path here", "my password");
$sam = new Sam("another user path", "another password");

echo $joe->userPath;
echo $sam->userPath;
echo $joe->password;
echo $sam->password;
  

Комментарии:

1. Креативное решение общей проблемы.

2. @Jay Blanchard Я не понимаю, как это получает $ pass из файла. Я предполагаю, что я должен включить в каждый класс? класс Джо и класс Сэм?

3. Нет, вы не можете включать файлы в классы, подобные этому @Mark. Это метод ООП для обработки нескольких пользователей с одинаковыми атрибутами. Хотя это творческое решение, оно ведет вас по «другому пути», как вы выразились в своем комментарии выше. Кстати, наказывать кого-то, кто не мог читать ваши мысли, не должно происходить — ничего из этой информации не было в вашей статье, и комментатор просто пытался быть полезным.

4. @Jay Blanchard Это также не решает проблему. По вашим собственным словам, он не получает путь пользователя из файла, поэтому я предложил fopen

5. Если система безопасности представляет собой плоские файлы на сервере, то все, что мне нужно сделать, это взломать сервер — мне не понадобится ничего более сложного. Независимо от того, что вы хотите сделать @Mark, это невозможно так, как вам хотелось бы. Вам нужно что-то, чтобы переменные плоского файла не перезаписывались, что возможно только при использовании другого метода плоского файла, такого как CSV или JSON.

Ответ №2:

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

после включения joe.php в auth.php

 $_SESSION['userpath']=$userpath;
  

Тогда даже на той же странице или других страницах мы можем включить

joe.php

 <?php
$pass = 'joepassword';
$userpath = 'work/joe';
?>
  

теперь, когда мы включаем sam.php (второй)

 $_SESSION['touserpath']=$userpath;