Каков наилучший способ изменить переменную в файле php из другого файла php

#php #variables

#php #переменные

Вопрос:

То, что я пытаюсь сделать, это изменить переменную в fileb из filea. В некотором смысле это похоже на использование fileb в качестве файла конфигурации.

Пример:

Файл A:

 require_once "fileb.php";

if($power == 'off') {
  exit;
}

if($test1 == 'one') {
  echo "The first option is selected";
} elseif($test1 == 'two') {
  $power = 'off';
}
  

Файл B:

 $power = 'on';
  

Итак, в этом примере идентификатор пользователя запрашивается для $ test1, если они отвечают «one», они получают echo. Что я хочу сделать, так это сделать так, чтобы, если они ответят «два», страница закрывалась, и не только для них, но и для всех. Я пытаюсь сделать все это без использования базы данных, это было бы слишком просто, лол. Спасибо за помощь!

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

1. вы можете просто использовать $_SESSION ассоциативный массив для передачи значения, обычно это чище, чем этот беспорядок. Не используйте gorget для вызова session_start();

2. @MightyPork $_SESSION сохранял бы значение для каждого пользователя отдельно.

3. да, я думал, что это цель. В противном случае, мы просто используем database.

4. В этой ситуации я избегаю баз данных.

Ответ №1:

Я пытаюсь сделать все это без использования базы данных, это было бы слишком просто

Есть причина, по которой использовать базу данных для этого легко. Это правильный способ выполнить эту задачу. Изменение файлов реального PHP-кодазаведомо плохая идея. (И, кажется, тот, который кто-то в Stack Overflow использует почти еженедельно.)

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

То, что вы пытаетесь сделать, это сохранить эту измененную переменную. Для того, чтобы это сделать, она должна быть записана где-то за пределами приложения. Базы данных действительно хороши для такого рода вещей. Вы также можете выполнять запись в простой текстовый файл (текстовую строку, структурированный XML и т.д.), Хотя в этом случае вам придется вручную следить за одновременной записью и другими подобными ошибками. (Базы данных тоже действительно хороши в этом, что делает их идеально подходящими для многопоточных / многопользовательских приложений, таких как веб-приложения.)

Я полагаю, вы могли бы рассматривать сам PHP-файл как редактируемый текстовый файл, как и любой другой. (Поскольку PHP, в конце концов, это просто текст.) Но, опять же, это действительно плохая идея. Во-первых, будет очень сложно разобрать именно то значение, которое вы хотите, и записать обратно изменение только этого значения. Кроме того, вы рискуете взломать файл, который обрабатывается как исполняемый код, что создает всевозможные потенциальные риски.

Просто запишите в базу данных, или в файл, или на любой другой простой носитель сохранения данных вне приложения.

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

1. Каков наилучший способ записать ее в файл?

2. $file = ‘fireworks/config.php ‘; // Откройте файл, чтобы получить существующее содержимое $current = file_get_contents($file); // Добавьте нового пользователя в файл $current = ‘<?php $Test1 = отключить; $Test3 = хахаха; ?>’; // Запишите содержимое обратно в файл file_put_contents($file, $current);

3. Спасибо, я получил то, что искал здесь, что я в итоге сделал: $current = ‘<?php $power = off; ?>’;

4. @user2464339: Опять же, сохранение значений в виде PHP-кода плохая идея . Это было плохой идеей каждый раз, когда кто-то ее получал (что происходит на удивление часто), и это будет продолжать оставаться плохой идеей. Если вы по какой-либо причине отказываетесь использовать базу данных, по крайней мере, используйте какой-нибудь сериализованный файл данных (XML, JSON, какой-нибудь структурированный формат). Данные и код — это две разные вещи.

5. Пожалуйста, помогите мне понять, что делает это плохой идеей?

Ответ №2:

У вас fileb отсутствуют <?php ... ?> теги. Без них ваш «код» никогда не будет восприниматься как код. это будет просто обрабатываться как обычный текст.

файл b:

 <?php

$power = 'on';
  

файл c:

 Hello
<?php
$foo = 'world!';
  

файл a:

 <?php

include('fileb.php');

echo $power;

include ('filec.php'); // "Hello" is immediately output
echo $foo; // tell PHP to put the $foo var, which will print out "world!"
  

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

1. Похоже, вы забыли ?> в своих примерах 🙂

2. не обязательно. конец файла является неявным ?> . Это понадобится вам только в том случае, если у вас есть некоторый открытый текст после кода, который вам нужно вывести.

3. Я опустил теги <?php … ?> в примерах, однако в этом примере все на php. Я не думаю, что я объяснил проблему достаточно хорошо, я хочу навсегда изменить переменную в fileb из filea.

4. @user2464339: вы имеете в виду изменить содержимое файла? Итак, перепишите файл и выведите в файл законный PHP-код. в противном случае, если вы просто меняете значение, зачем включать файл для начала? Вы могли бы просто $power = 'whatever';

5. Или быть корректным с синтаксисом SGML. Позже это может вызвать проблемы с синтаксическим анализом, объединением источников и т.д.