За последние 24 часа нас посетили 34059 программистов и 1701 робот. Сейчас ищут 795 программистов ...

Инклюд HEREDOC с переменными внутри

Тема в разделе "PHP для новичков", создана пользователем bocharsky, 19 дек 2014.

  1. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Рассылаю письмо с помощью mail();.

    Там довольно объемный текст. В тексте есть пара переменных.
    Вот упрощенная схема моих действий:

    текст письма лежит в файле text.inc.php:
    Код (Text):
    1.  
    2. $message_text = <<<EOD
    3. Здравствуйте, $name.
    4. EOD;
    Сам скрипт такой:

    Код (Text):
    1.  
    2. $name = 'name';
    3. require_once 'text.inc.php';
    4. mail( $email_to, $message_subj, $message_text, $headers );
    Письмо уходит, текст ок, а на месте переменной пустота. Что я делаю не так?

    Я предполагал, что require как бы "вклеит" этот код в файл - в то место, где стоит require. Все равно что в этом месте я бы в явном виде поставил содержимое файла.
    Так я получу переменную $message_text с хранящимся в ней текстом.
    При этом переменная $name, которая в $message_text у меня выше определена, значит ее значение должно подставиться без проблем. Однако, нет.
    Нужны подсказки)
    Спасибо!

    Спасибо
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    global $name в подключаемом файле пробовал?
     
  3. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Нет.

    Может я чего не понимаю, но вот тут https://php.net/manual/ru/language.variables.scope.php
    пишут, что "единая область видимости охватывает также включаемые (include) и требуемые (require) файлы. Например: "

    Код (Text):
    1.  
    2. <?php
    3. $a = 1;
    4. include 'b.inc';
    5. ?>
    "Здесь переменная $a будет доступна внутри включенного скрипта b.inc." // конец цитаты

    Т.е. моя $name должна быть видна во включаемом файле и без global.
    Или как?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    А что за версия php? Например в php 5.6.4 всё работает

    Код (PHP):
    1. 0.inc.php:
    2. <?php
    3. $message_text = <<<EOD
    4. Здравствуйте, $name.
    5. EOD;
    6. ?>
    7.  
    8. <?php
    9. $name = 'test';
    10. require_once '0.inc.php';
    11. echo $message_text;
    12. ?>
    результат: Здравствуйте, test.
     
  5. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    5.3.3

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

    Спасибо!
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    зачем меня сейчас в документашку окунули? что там писано я лет 5 назад последний раз смотрел. был задан прямой вопрос - была ли попытка насильно запихнуть-притянуть переменную через глобальную область видимости?
    и да, если провести дебаг наверное будет более понятно что происходит, чтоб нам тут не гадать.
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    $message_text = <<<EOD
    Здравствуйте, $name.
    EOD;

    А на хрена здесь heredoc?
     
  8. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Не сердитесь. Просто в наше время непонятно, вопрос это, или рекомендация в форме вопроса.

    А вообще хочу сказать спасибо вам и denis01: действительно, проблема была в другом месте. Исправил ошибку, все заработало.
    Но если б не получил подтверждение, что "должно работать", так бы и стучался в открытую дверь.

    В общем, проблема решена. Всем больше спасибо.