web-dev-qa-db-fra.com

Comment exécuter et obtenir le contenu d'un fichier .php dans une variable?

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

18
Prashant

Vous pouvez utiliser la directive include pour le faire.

Fichier 2:

<?php
    $myvar="prashant";
?>

Fichier 1:

<?php 

include('myfile2.php');
echo $myvar;

?>
2
zombat

Vous devez différencier deux choses:

  • Voulez-vous capturer la sortie (echo, print, ...) du fichier inclus et utiliser la sortie dans une variable (chaîne)?
  • Voulez-vous renvoyer certaines valeurs des fichiers inclus et les utiliser en tant que variable dans votre Host script?

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 ...

32
Stefan Gehrig

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

Voir http://php.net/ob_start

18
harto

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;
?>
9
T.Todua

"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'.

?>
5
Shanshui

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();
3
Élektra

Si vous souhaitez utiliser l’ensemble du site par 

<?php
$URL = 'http://www.example.com/';
$homepage = file_get_contents($URL);
echo $homepage;
?>
0
vish

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;

    }
}
0
Jeff Williams

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;
?>
0
Chinmay235