Je veux obtenir le contenu d'un fichier .php dans une variable sur une autre page.
J'ai deux fichiers, myfile1.php
et myfile2.php
.
myfile2.php
<?PHP
$myvar="prashant"; //
echo $myvar;
?>
Maintenant, je veux obtenir la valeur renvoyée par myfile2.php dans une variable de myfile1.php. J'ai essayé la méthode suivante, mais elle prend également tout le contenu, y compris php tag ().
<?PHP
$root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true);
?>
Dites-moi comment je peux obtenir le contenu renvoyé par un fichier PHP dans une variable définie dans un autre fichier PHP.
Merci
Vous pouvez utiliser la directive include pour le faire.
Fichier 2:
<?php
$myvar="prashant";
?>
Fichier 1:
<?php
include('myfile2.php');
echo $myvar;
?>
Vous devez différencier deux choses:
echo
, print
, ...) du fichier inclus et utiliser la sortie dans une variable (chaîne)?Les variables locales dans vos fichiers inclus seront toujours déplacées vers la portée actuelle de votre Host script - ceci devrait être noté. Vous pouvez combiner toutes ces fonctionnalités en une seule:
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"
La fonctionnalité return
- est particulièrement utile lors de l'utilisation de fichiers de configuration.
config.php
return array(
'Host' => 'localhost',
....
);
app.php
$config = include 'config.php'; // $config is an array
MODIFIER
Pour répondre à votre question sur les pertes de performances lors de l’utilisation des tampons de sortie, je viens de faire quelques tests rapides. 1 000 000 d'itérations de ob_start()
et de la $o = ob_get_clean()
correspondante prennent environ 7,5 secondes sur ma machine Windows (ce n'est peut-être pas le meilleur environnement pour PHP). Je dirais que l'impact sur les performances devrait être considéré comme assez faible ...
Si vous ne voulez que le contenu echo()
'édité par la page incluse, vous pouvez envisager d'utiliser la mise en mémoire tampon de sortie:
ob_start();
include 'myfile2.php';
$echoed_content = ob_get_clean(); // gets content, discards buffer
J'essaie toujours d'éviterob_
fonctions. Au lieu de cela, j'utilise:
<?php
$file = file_get_contents('/path/to/file.php');
$content = eval("?>$file");
echo $content;
?>
"En fait, je cherchais simplement une méthode de type de retour qui puisse me donner directement la valeur" - Vous venez de répondre à votre propre question.
Voir http://sg.php.net/manual/en/function.include.php , Exemple # 5
fichier1.php:
<? return 'somevalue'; ?>
fichier2.php:
<?
$file1 = include 'file1.php';
echo $file1; // This outputs 'somevalue'.
?>
Vous pouvez utiliser des tampons de sortie, qui stockeront tout ce que vous avez généré et ne l’imprimeront que si vous le leur donnez explicitement, ou ne terminez/effacez pas les tampons avant 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 utiliser l’ensemble du site par
<?php
$URL = 'http://www.example.com/';
$homepage = file_get_contents($URL);
echo $homepage;
?>
Si vous souhaitez renvoyer la sortie du code dans un fichier, faites simplement un appel à l'API RESTful. De cette façon, vous pouvez utiliser le même fichier de code pour les appels ajax, REST API ou pour votre code interne PHP.
CURL doit être installé, mais pas de tampon de sortie ni d'inclus, uniquement la page exécutée et renvoyée dans une chaîne.
Je vais vous donner le code que j'ai écrit. Cela fonctionne avec presque tous les serveurs Web/REST (et 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;
}
}
S'il vous plaît essayez ce code
monfichier1.php
<?php
echo file_get_contents("http://domainname/myfile2.php");
?>
myfile2.php
<?PHP
$myvar="prashant";
echo $myvar;
?>