PHP переменная сбрасывается при запуске из командной строки - PullRequest
1 голос
/ 29 февраля 2012

В файле config.php

$_CONFIG = array();
require_once("config.inc.php");
var_dump($_CONFIG);

В файле config.inc.php

$_CONFIG = array('x' => 'y', ...);
var_dump($_CONFIG);

Вывод этого кода при запуске из командной строки:

array(15) {
  ["x"]=>
  string(1) "y"
  ...
}
array(0) {
}

Если я удаляю первую строку config.php, который инициализирует пустой массив $ _CONFIG, скрипт работает, и var_dumps идентичны.

Обратите внимание, что это скрипт, запускаемый из командной строки. Есть идеи, почему это происходит? Я пробовал это на двух разных машинах, одна с PHP 5.3.3, а другая с PHP 5.3.5.

Обновление - похоже, это проблема только с командной строкой. При запуске из браузера, кажется, хорошо. Также есть третий файл, который я забыл упомянуть, в который входит config.php

test.php

require_once("/path/to/config.php");

При запуске test.php , а не config.php из командной строки, я получаю вывод выше.

1 Ответ

2 голосов
/ 29 февраля 2012

Ситуация, которую вы описываете, не дает результата, который вы описываете. Там происходит что-то еще; в вопросе не указан дополнительный код.

Из очень простого теста:

$ ls -la
-rw-rw-r--   1 jon jon    59 2012-02-28 20:37 config.inc.php
-rw-rw-r--   1 jon jon    83 2012-02-28 20:37 config.php

$ cat config.*
<?php
$_CONFIG = array('x' => 'y');
var_dump($_CONFIG);
?>
<?php

$_CONFIG = array();
require_once('config.inc.php');
var_dump($_CONFIG);

?>
$ php config.php
array(1) {
  ["x"]=>
  string(1) "y"
}
array(1) {
  ["x"]=>
  string(1) "y"
}

Возможные причины вывода вы видите:

  • config.inc.php использует пространство имен, определяя новую копию $ _CONFIG, не входящую в глобальное пространство имен
  • require_once('config.inc.php'); сначала проверяет ваш путь включения и включает файл config.inc.php, отличный от того, который вы ожидаете
...