Re: variable placeholders in a text file

From: Date: Mon, 31 Dec 2012 23:47:30 +0000
Subject: Re: variable placeholders in a text file
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-319988@lists.php.net to get a copy of this message
On 12-12-31 03:37 PM, Nelson Green wrote:
On Mon, 31 Dec 2012 14:47:20 Stephen D wrote:
Yes! Easy standard stuff. $title = 'Mr."; $user_name = 'John Doe'; $message = "Hello $title $user_name ...." Just define the value for the variables before defining the value for the message. Note that $message has to use double quotes for the expansion. Also consider using HEREDOC instead of the double quotes. You may want to put your message in a text file and using the include function.
Hi Stephen, My message is in a text file, but I'm using fopen and fread in a self-defined function, so message is actually defined as (GREETER_FILE is a defined constant): function print_greeting($user_name) {
    $handle   = fopen(GREETER_FILE, "r");
    $message  = fread($file_handle, filesize(GREETER_FILE));
    $msg_text = str_replace("USER", $user_name, $message);
        print($msg_txt);
} And my text file is simply: $cat greet.txt Hello USER. How are you today? If I change USER to $user_name in the text file and change the print function parameter to $message, $user_name gets printed verbatim. In other words the greeting on my page becomes: Hello $user_name. How are you today? I want to pass the name Nelson to the function, and have it output: Hello Nelson. How are you today? after the function reads in text file input that contains a variable placeholder for the user name. I actually had a HEREDOC in the function, and that worked. But by reading a file instead, I can make things more flexible. I'd rather be changing a text file instead of a code file. The reason you get $user_name printed is because of the way you are populating the variable $message. You need to have $user_name embedded in double quotes or a HEREDOC when PHP parses $messsage. And $user_name has to have already been defined.
Here is a sample from one of my sites. It is a simple one for the contact page. =====contact.php==== <?php $thispage = "Contact"; $contenttop = "<p>$thispage</p>"; $contentbody = <<<HEREDOC <p>stephen@roissy.ca</p> HEREDOC; require_once "include.php"; require_once "utilities.php"; echo $header . $markup; ================= The common stuff for every page is defined in the file "include.php". I define the variable $markup in that file. Here is the definition for $markup $markup=<<<HEREDOC <body> <div id="all">
    <div id="top">
      <img src=$titlepng alt=$title />
    </div>
    <div id="main">
      <div id="mainrow">
        <div id="left">
          $leftimage
          <div id="mainnav">
            <ul>
              $menu
            </ul>
          </div>
        </div>
        <div id="content">
          <div id="content-top">
            $contenttop
          </div>
          <div id="content-body">
            $contentbody
          </div>
          <div id="content-bottom">
          </div>
        </div>
      </div>
    </div>
    <div id="footer">
      $copyright
    </div>
</div> </body> </html> HEREDOC; There is lots more code, but this is the important stuff. By using require_once instead of fopen and fread, I have simpler code and PHP evaluates the embedded variables in $markup without any need to use string functions. In your case, I would make the file greeter.php =====greeter.php=== $message = "Hello $user_name. How are you today?" =============== You replace the fopen and fread stuff with a require_once function and $message gets included and the user name resolved all in one line of code. Hope this helps -- Stephen

« previous php.general (#319988) next »