wake-up-neo.com

Ausführen und Abrufen des Inhalts einer .php-Datei in einer Variablen

Ich möchte den Inhalt einer .php-Datei in einer Variablen auf einer anderen Seite erhalten.

Ich habe zwei Dateien, myfile1.php und myfile2.php.

myfile2.php

<?PHP
    $myvar="prashant"; // 
    echo $myvar;
?>

Jetzt möchte ich den Wert, der von myfile2.php in einer Variablen in myfile1.php wiedergegeben wird, auf folgende Weise testen, aber den gesamten Inhalt einschließlich php tag () auch übernehmen.

<?PHP
    $root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true);
?>

Bitte sagen Sie mir, wie ich den Inhalt einer PHP -Datei in eine Variable zurückgeben kann, die in einer anderen PHP -Datei definiert ist.

Vielen Dank

18
Prashant

Sie können dazu die Direktive include verwenden.

Datei 2:

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

Datei 1:

<?php 

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

?>
2
zombat

Sie müssen zwei Dinge unterscheiden:

  • Möchten Sie die Ausgabe (echo, print, ...) der enthaltenen Datei erfassen und die Ausgabe in einer Variablen (Zeichenfolge) verwenden?
  • Möchten Sie bestimmte Werte aus den enthaltenen Dateien zurückgeben und als Variable in Ihrem Host - Skript verwenden?

Lokale Variablen in Ihren eingeschlossenen Dateien werden immer in den aktuellen Bereich Ihres Host Skripts verschoben. Dies sollte beachtet werden. Sie können alle diese Funktionen in einem kombinieren:

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"

Die return- Funktion ist besonders bei der Verwendung von Konfigurationsdateien nützlich.

config.php

return array(
    'Host' => 'localhost',
     ....
);

app.php

$config = include 'config.php'; // $config is an array

EDIT

Um Ihre Frage nach dem Leistungsnachteil bei Verwendung der Ausgabepuffer zu beantworten, habe ich nur ein paar schnelle Tests durchgeführt. 1.000.000 Iterationen von ob_start() und der entsprechenden $o = ob_get_clean() dauern auf meinem Windows-Computer etwa 7,5 Sekunden (möglicherweise nicht die beste Umgebung für PHP). Ich würde sagen, dass die Auswirkungen auf die Leistung als ziemlich gering angesehen werden sollten ...

32
Stefan Gehrig

Wenn Sie nur den Inhalt echo() von der mitgelieferten Seite erhalten möchten, können Sie die Verwendung der Ausgabepufferung in Betracht ziehen:

ob_start();
include 'myfile2.php';
$echoed_content = ob_get_clean(); // gets content, discards buffer

Siehe http://php.net/ob_start

18
harto

Ich versuche immer,ob_- Funktionen zu vermeiden. Stattdessen verwende ich:

<?php
$file = file_get_contents('/path/to/file.php');
$content = eval("?>$file");
echo $content;
?>
9
T.Todua

"Eigentlich habe ich gerade gesucht, dass es eine beliebige Rückgabemethode gibt, die mir den Wert direkt geben kann".

Siehe http://sg.php.net/manual/de/function.include.php , Beispiel 5

file1.php:

<? return 'somevalue'; ?>

file2.php:

<?

$file1 = include 'file1.php';
echo $file1; // This outputs 'somevalue'.

?>
5
Shanshui

Sie können Ausgabepuffer verwenden, in denen alles gespeichert wird, was Sie ausgegeben haben, und es wird nicht ausgedruckt, wenn Sie dies nicht ausdrücklich sagen oder die Puffer am Ende des Ausführungspfads nicht beenden/löschen.

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

Wenn Sie die gesamte Site von nutzen möchten 

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

Wenn Sie die Ausgabe von Code in einer Datei zurückgeben möchten, führen Sie einfach einen RESTful-API-Aufruf aus. Auf diese Weise können Sie dieselbe Codedatei für ajax-Aufrufe, REST API oder für Ihren internen PHP-Code verwenden.

Es muss cURL installiert sein, aber keine Ausgabepuffer oder keine Includes, nur die Seite, die ausgeführt und in einen String zurückgegeben wird.

Ich gebe dir den Code, den ich geschrieben habe. Es funktioniert mit fast jedem REST/Webserver (und sogar mit Equifax):

$return = PostRestApi($url);

oder

$post = array('name' => 'Bob', 'id' => '12345');
$return = PostRestApi($url, $post, false, 6, false);

Hier ist die Funktion:

/**
 * 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

Bitte versuche diesen Code

myfile1.php

<?php
    echo file_get_contents("http://domainname/myfile2.php");
?>

myfile2.php

<?PHP
    $myvar="prashant";
    echo $myvar;
?>
0
Chinmay235