Comment exécuter et obtenir le contenu d'un fichier .php dans une variable?
-
21-08-2019 - |
Question
Je veux obtenir le contenu d'un fichier .php dans une variable autre page.
J'ai deux fichiers, et myfile1.php
myfile2.php
.
myfile2.php
<?PHP
$myvar="prashant"; //
echo $myvar;
?>
Maintenant, je veux obtenir la valeur fait écho par la myfile2.php dans une variable myfile1.php, je l'ai essayé la voie follwing, mais sa prise de tout le contenu, y compris balise php () aussi.
<?PHP
$root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true);
?>
S'il vous plaît me dire comment je peux obtenir le contenu retourné par un fichier PHP dans une variable définie dans un autre fichier PHP.
Merci
La solution
Vous pouvez utiliser le comprennent directive pour le faire.
Fichier 2:
<?php
$myvar="prashant";
?>
Fichier 1:
<?php
include('myfile2.php');
echo $myvar;
?>
Autres conseils
Vous devez distinguer deux choses:
- Est-ce que vous voulez capturer la sortie (
echo
,print
, ...) du fichier inclus et utiliser la sortie dans une variable (chaîne)? - Est-ce que vous voulez retourner certaines valeurs à partir des fichiers inclus et les utiliser comme une variable dans votre host script?
Les variables locales dans vos fichiers inclus seront toujours déplacés à la portée actuelle de votre host Script - il convient de noter. Vous pouvez combiner toutes ces fonctions en un seul:
include.php
$hello = "Hello";
echo "Hello World";
return "World";
host.php
ob_start();
$return = include 'include.php'; // (string)"World"
$output = ob_get_clean(); // (string)"Hello World"
// $hello has been moved to the current scope
echo $hello . ' ' . $return; // echos "Hello World"
return
-. Fonctionnalité est très pratique en particulier lors de l'utilisation des fichiers de configuration
config.php
return array(
'host' => 'localhost',
....
);
app.php
$config = include 'config.php'; // $config is an array
EDIT
Pour répondre à votre question sur la peine de performances lors de l'utilisation des tampons de sortie, je viens de faire quelques tests rapides. 1.000.000 itérations de l'correspondant et ob_start()
prendre environ 7,5 $o = ob_get_clean()
secondes ma machine Windows (sans doute pas le meilleur environnement pour PHP). Je dirais que l'impact de la performance devrait être considérée comme assez faible ...
Si vous ne voulez que le contenu echo()
'ed par la page incluse, vous pouvez envisager d'utiliser en mémoire tampon de sortie:
ob_start();
include 'myfile2.php';
$echoed_content = ob_get_clean(); // gets content, discards buffer
J'essaie toujours d'éviter ob_
Fonctions . , J'utiliser:
<?php
$file = file_get_contents('/path/to/file.php');
$content = eval("?>$file");
echo $content;
?>
« En fait, je viens de regarder c'est-il une méthode de type de retour qui peut directement me donner la valeur » - Vous venez de répondre à votre question
.Voir http://sg.php.net/manual/en/function .include.php , Exemple # 5
file1.php:
<? return 'somevalue'; ?>
file2.php:
<?
$file1 = include 'file1.php';
echo $file1; // This outputs 'somevalue'.
?>
Vous pouvez utiliser des tampons de sortie, qui permet de stocker tout ce que vous sortie, et ne l'imprimer à moins que vous dire explicitement, ou ne finissent pas / effacer les tampons d'ici la fin du chemin d'exécution.
// Create an output buffer which will take in everything written to
// stdout(i.e. everything you `echo`ed or `print`ed)
ob_start()
// Go to the file
require_once 'file.php';
// Get what was in the file
$output = ob_get_clean();
Si vous souhaitez obtenir toute l'utilisation du site par
<?php
$URL = 'http://www.example.com/';
$homepage = file_get_contents($URL);
echo $homepage;
?>
S'il vous plaît essayer ce code
myfile1.php
<?php
echo file_get_contents("http://domainname/myfile2.php");
?>
myfile2.php
<?PHP
$myvar="prashant";
echo $myvar;
?>
Si vous voulez retourner la sortie du code dans un fichier, tout simplement faire un appel API RESTful lui. De cette façon, vous pouvez utiliser le même fichier de code pour les appels ajax, API REST, ou pour votre code PHP interne.
Il faut cURL à installer, mais pas de tampons de sortie ou ne comprend, à la page exécutée et retournée dans une chaîne.
Je vais vous donner le code que j'écrit. Il fonctionne avec presque tous les REST / serveur web (et fonctionne même avec Equifax):
$return = PostRestApi($url);
ou
$post = array('name' => 'Bob', 'id' => '12345');
$return = PostRestApi($url, $post, false, 6, false);
Voici la fonction:
/**
* Calls a REST API and returns the result
*
* $loginRequest = json_encode(array("Code" => "somecode", "SecretKey" => "somekey"));
* $result = CallRestApi("https://server.com/api/login", $loginRequest);
*
* @param string $url The URL for the request
* @param array/string $data Input data to send to server; If array, use key/value pairs and if string use urlencode() for text values)
* @param array $header_array Simple array of strings (i.e. array('Content-Type: application/json');
* @param int $ssl_type Set preferred TLS/SSL version; Default is TLSv1.2
* @param boolean $verify_ssl Whether to verify the SSL certificate or not
* @param boolean $timeout_seconds Timeout in seconds; if zero then never time out
* @return string Returned results
*/
function PostRestApi($url, $data = false, $header_array = false,
$ssl_type = 6, $verify_ssl = true, $timeout_seconds = false) {
// If cURL is not installed...
if (! function_exists('curl_init')) {
// Log and show the error
$error = 'Function ' . __FUNCTION__ . ' Error: cURL is not installed.';
error_log($error, 0);
die($error);
} else {
// Initialize the cURL session
$curl = curl_init($url);
// Set the POST data
$send = '';
if ($data !== false) {
if (is_array($data)) {
$send = http_build_query($data);
} else {
$send = $data;
}
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, $send);
}
// Set the default header information
$header = array('Content-Length: ' . strlen($send));
if (is_array($header_array) && count($header_array) > 0) {
$header = array_merge($header, $header_array);
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// Set preferred TLS/SSL version
curl_setopt($curl, CURLOPT_SSLVERSION, $ssl_type);
// Verify the server's security certificate?
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ($verify_ssl) ? 1 : 0);
// Set the time out in seconds
curl_setopt($curl, CURLOPT_TIMEOUT, ($timeout_seconds) ? $timeout_seconds : 0);
// Should cURL return or print out the data? (true = return, false = print)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Execute the request
$result = curl_exec($curl);
// Close cURL resource, and free up system resources
curl_close($curl);
unset($curl);
// Return the results
return $result;
}
}