How to get the value from include statement in a variable? - php

Suppose I write a line
include Yii::app()->basepath.'/views/email/email_friend.php';
now how can i take the response of this line into a variable?
like
$abc = include Yii::app()->basepath.'/views/email/email_friend.php';

Have a look at the PHP docs for include http://php.net/manual/en/function.include.php
Example #5 is I think what you're looking for
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>

All you have to do is the included file had a return with the desired value. It's been quite popular for some time.
so the include.php should like the following:
<?php
return ' World!';
and the including one:
<?php
$a = include('include.php');
echo 'Hello'.$a; // Hello World!

When you include it's like you're copy/pasting the code into your PHP. If it's just inline PHP and there was a variable $abc in the include file 'email_friend.php' then you could access the variable normally after the include.

I know this is an old post. I hope my answer will be useful to someone. I combined the Accepted answer with the answer "PHP/7 you can use a self-invoking anonymous function..."
define( 'WPPATH', dirname(dirname(__FILE__)) . '/public/partials/bla-bla.php' );
$publicDisplayContent = (function () {
// [PHP/7 you can use a self-invoking anonymous function](https://stackoverflow.com/a/41568962/601770)
// https://stackoverflow.com/a/5948404/601770
ob_start();
require_once(WPPATH);
return ob_get_clean();
})(); // PHP/7 you can use a self-invoking anonymous function
error_log( 'activate() >> $publicDisplayContent: ' . print_r( $publicDisplayContent, true ) );
DOT DOT DOT
'post_content' => $publicDisplayContent,

Related

Echo an array from another PHP file

I'm currently stuck on what I thought would be an easy solution... I'm working with PHPFileNavigator, and the only thing I'm stuck on is how I can echo the Title that is returned to an array on a separate file. Every time a file is created/edited for an uploaded file, it generates the following file below when a title is added to the file.
Update
Generally all I'm wanting to do is return the one Array value from my destination file which in this case would be from the 'titulo' key, and then print it back to my source file.
Destination File
<?php
defined('OK') or die();
return array(
'titulo' => 'Annual 2011 Report',
'usuario' => 'admin'
);
?>
Source File
<?php
$filepath="where_my_destination_file_sits";
define('OK', True); $c = include_once($filepath); print_r($c);
?>
Current Result
Array ( [titulo] => Annual 2011 Report [usuario] => admin )
Proposed Result
Annual 2011 Report
All I'm wanting to find out is how can I echo this array into a variable on another PHP page? Thanks in advance.
Assuming your file is saved at $filepath
<?php
define('OK', True);
$c = include_once($filepath);
print_r($c);
If you know the file name and file path, you can easily capture the returned construct of the php file, to a file.
Here is an example:
$filepath = 'path/to/phpfile.php';
$array = include($filepath); //This will capture the array
var_dump($array);
Another example of include and return working together: [Source: php.net]
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>
Update
To only print a item from the array, you can use the indices. In your case:
<?php
$filepath="where_my_destination_file_sits";
define('OK', True); $c = include_once($filepath); print_r($c);
echo $c['titulo']; // print only the title
?>
First we have a file(you want initiate array in it ) first.php
(you can also act profissionaler and play with parameters,with any parameter function pass different type or different array)
function first_passing() {
$yourArray=array('everything you want it's be');
return $yourArray;
}
And in second.php
require 'yourpath/first.php' (or include or include_once or require_once )
//and here just call function
$myArray=first_passing();
//do anything want with $myArray
To print/echo an array in PHP you have to use print_r($array_variable) and not echo $array

PHP code dynamic evaluation

Imagine we have 2 files, one called 1.php with the following code:
<?php
$hello = "Hello from 1";
?>
and 2.php with the following code:
<?php
function LoadPage( $page )
{
$f = fopen( $page, 'r+' );
$content = fread( $f, filesize($page) );
fclose( $f );
return $content;
}
function GetEvalContent( $content )
{
$var = "";
ob_start();
eval( "?>" . $content . "<?" );
$var = ob_get_contents();
ob_end_clean();
return $var;
}
$hello = "hello from 2";
echo $hello . '<br/>';
$content = LoadPage( '1.php' );
GetEvalContent( $content );
echo $hello;
?>
So what the 2.php does is load the content of 1.php and evaluate the php code inside it. Now what I want to do is during the evaluation of 1.php, variable $hello changes to "hello from 1". However if you execute 2.php you always get:
"hello from 2"
"hello from 2"
instead of getting
"hello from 2"
"hello from 1"
Has anyone encountered this problem before and if so, how would you fix it?
There is a much easier way to do this. Use PHP's include.
1.php
<?php
$hello = "Hello from 1";
?>
2.php
<?php
$hello = "hello from 2";
echo $hello;
include '1.php';
echo $hello;
?>
UPDATE (not tested):
function includeFile($file){
global $hello; // Use the global variable $hello
// this will make the include sets $hello correctly
ob_start();
include $file; // Remember any variables set here will be in this scope,
// not the global scope (unless you add them to the global line above)
$var = ob_get_contents(); // This will contain anything echoed to the screen
// from the included file
ob_end_clean();
return $var;
}
$hello = "hello from 2";
echo $hello;
$file = '1.php';
$output = includeFile($file);
echo $hello;
echo $output;
You're doing your eval() within a function, so the $hello in the included file will be part of only the function's scope. It will not affect the $hello that's defined outside the function (which is global scope).
You'd need to put the global keyword into your included file, unless you want to write your own PHP parser to figure out what variables are being defined in the included file and auto-globalize them.
However, in the bigger picture... WHY? eval is a horribly evil ugly construct, and you're opening yourself up to a world of debugging pain, let alone the security issues.
Have you considered using require or include? PHP Manual
Example:
$hello = "Hello from 2";
echo $hello;
include("1.php");
echo $hello;
try to use $GLOBALS['hello'] instead of $hello
PS: Don't forget eval is evil ;)

How to pass the require_once output to a variable?

I want to call require_once("test.php") but not display result and save it into variable like this:
$test = require_once('test.php');
//some operations like $test = preg_replace(…);
echo $test;
Solution:
test.php
<?php
$var = '/img/hello.jpg';
$res = <<<test
<style type="text/css">
body{background:url($var)#fff !important;}
</style>
test;
return $res;
?>
main.php
<?php
$test = require_once('test.php');
echo $test;
?>
Is it possible?
Yes, but you need to do an explicit return in the required file:
//test.php
<? $result = "Hello, world!";
return $result;
?>
//index.php
$test = require_once('test.php'); // Will contain "Hello, world!"
This is rarely useful - check Konrad's output buffer based answer, or adam's file_get_contents one - they are probably better suited to what you want.
“The result” presumably is a string output?
In that case you can use ob_start to buffer said output:
ob_start();
require_once('test.php');
$test = ob_get_contents();
EDIT From the edited question it looks rather like you want to have a function inside the included file. In any case, this would probably be the (much!) cleaner solution:
<?php // test.php:
function some_function() {
// Do something.
return 'some result';
}
?>
<?php // Main file:
require_once('test.php');
$result = test_function(); // Calls the function defined in test.php.
…
?>
file_get_contents will get the content of the file. If it's on the same server and referenced by path (rather than url), this will get the content of test.php. If it's remote or referenced by url, it will get the output of the script.

Get contents of php file after it's ran/executed

How can I put the result of an include into a PHP variable?
I tried file_get_contents but it gave me the actual PHP code, whereas I want whats echoed.
Either capture anything that's printed in the include file through output buffering
ob_start();
include 'yourFile.php';
$out = ob_get_contents();
ob_end_clean();
or alternatively, set a return value in the script, e.g.
// included script
return 'foo';
// somewhere else
$foo = include 'yourFile.php';
See Example 5 of http://de2.php.net/manual/en/function.include.php
or simply return a value from an included file as explained here.
return.php:
<?php
$var = 'PHP';
return $var;
?>
$foo = include 'return.php';
echo $foo; // prints 'PHP'

How do you define a PHP include as a string?

I tried:
$test = include 'test.php';
But that just included the file normally
You'll want to look at the output buffering functions.
//get anything that's in the output buffer, and empty the buffer
$oldContent = ob_get_clean();
//start buffering again
ob_start();
//include file, capturing output into the output buffer
include "test.php";
//get current output buffer (output from test.php)
$myContent = ob_get_clean();
//start output buffering again.
ob_start();
//put the old contents of the output buffer back
echo $oldContent;
EDIT:
As Jeremy points out, output buffers stack. So you could theoretically just do something like:
<?PHP
function return_output($file){
ob_start();
include $file;
return ob_get_clean();
}
$content = return_output('some/file.php');
This should be equivalent to my more verbose original solution.
But I haven't bothered to test this one.
Try something like:
ob_start();
include('test.php');
$content = ob_get_clean();
Try file_get_contents().
This function is similar to file(), except that file_get_contents() returns the file in a string.
Solution #1: Make use of include (works like a function): [My best solution]
File index.php:
<?php
$bar = 'BAR';
$php_file = include 'included.php';
print $php_file;
?>
File included.php:
<?php
$foo = 'FOO';
return $foo.' '.$bar;
?>
<p>test HTML</p>
This will output FOO BAR, but
Note: Works like a function, so RETURN passes contents back to variable (<p>test HTML</p> will be lost in the above)
Solution #2: op_buffer():
File index.php:
<?php
$bar = 'BAR';
ob_start();
include 'included.php';
$test_file = ob_get_clean(); //note on ob_get_contents below
print $test_file;
?>
File included.php:
<?php
$foo = 'FOO';
print $foo.' '.$bar;
?>
<p>test HTML</p>
If you use ob_get_contents() it will output FOO BAR<p>test HTML</p> TWICE, make sure you use ob_get_clean()
Solution #3: file_get_contents():
File index.php:
<?php
$bar = 'BAR';
$test_file = eval(file_get_contents('included.php'));
print $test_file;
?>
File included.php:
$foo = 'FOO';
print $foo.' '.$bar;
This will output FOO BAR, but Note: Include.php should not have <?php opening and closing tags as you are running it through eval()
The other answers, for reasons unknown to me, don't quite reach the correct solution.
I suggest using the buffer, but you have to get the contents and then clean the buffer before the end of the page, otherwise it is outputted. Should you wish to use the output from the included file, you should use op_get_contents(), which will return a string of the contents of the buffer.
You also don't need to loop over the includes as each will just add to the buffer (unless you clean it first).
You therefore could use the following;
ob_start();
include_once('test.php');
include_once('test2.php');
$contents = ob_get_contents();
ob_end_clean();
Hope this helps.
You can use the function file_get_contents.

Categories