Frage

Ich mag Inhalt einer Php-Datei in einer Variablen auf anderer Seite gelangen.

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

myfile2.php

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

Jetzt möchte ich den Wert der myfile2.php in einer Variable in myfile1.php Echo bekommen, ich habe die follwing Weise versucht, aber seine alle Inhalte einschließlich PHP-Tag () auch nehmen.

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

Bitte mir sagen, wie ich kann Inhalte von einer PHP-Datei in eine Variable in einer anderen PHP-Datei definiert zurückgegeben.

Danke

War es hilfreich?

Lösung

Sie können mit dem umfassen Richtlinie dies zu tun.

Datei 2:

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

Datei 1:

<?php 

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

?>

Andere Tipps

Sie haben zwei Dinge zu unterscheiden:

  • Möchten Sie die Ausgabe aufnehmen möchten (echo, print, ...) der Datei enthalten und die Ausgabe in einer Variablen (string) verwenden?
  • Haben Sie bestimmte Werte von den darin enthaltenen Dateien und verwenden sie als Variable in der Host Skript?
  • zurückkehren möchten

Lokale Variablen in der darin enthaltenen Dateien werden immer auf den aktuellen Bereich Ihres Host Skript bewegt werden - dies sollte beachtet werden. Sie können alle diese Funktionen miteinander 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 praktisch, vor allem, wenn die Konfigurationsdateien verwendet wird.

config.php

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

app.php

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

Bearbeiten

Um Ihre Frage über die Leistungseinbuße zu beantworten, wenn die Ausgangspuffer mit, ich habe nur ein paar schnellen Tests. 1.000.000 Iterationen von ob_start() und dem entsprechenden $o = ob_get_clean() dauert etwa 7,5 Sekunden auf meinem Windows-Rechner (wohl nicht die beste Umgebung für PHP). Ich würde sagen, dass die Auswirkungen auf die Leistung sollte recht klein angesehen werden ...

Wenn Sie nur den Inhalt echo()'ed durch die eingeschlossene Seite wollten, könnten Sie erwägen Ausgabepufferung mit:

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

Siehe http://php.net/ob_start

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

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

„Eigentlich war ich gerade auf der Suche, dass ist es ein Rückgabetyp Methode, die direkt mir den Wert geben kann“ - Sie antwortete nur Ihre eigene Frage

.

Siehe http://sg.php.net/manual/en/function .include.php Beispiel # 5

file1.php:

<? return 'somevalue'; ?>

file2.php:

<?

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

?>

Sie können die Ausgangspuffer verwenden, die alles, was Sie Ausgabe speichert, und es wird nicht, es sei denn Sie ausdrücklich darauf, sagen ausdrucken oder nicht Ende / die Puffer bis zum Ende des Ausführungspfad 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();

Wenn Sie alle über Einsatz vor Ort zu erhalten, indem

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

Bitte versuchen Sie diesen Code

myfile1.php

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

myfile2.php

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

Wenn Sie die Ausgabe von Code in einer Datei zurückkehren wollen, einfach nur einen RESTful API-Aufruf machen. Auf diese Weise können Sie die gleiche Code-Datei für Ajax-Aufrufe, REST-API oder für Ihren internen PHP-Code verwenden.

Es erfordert cURL installiert werden, aber keine Ausgabepuffer oder nicht enthält, nur die Seite ausgeführt und wieder in einen String.

Ich gebe Ihnen den Code, den ich geschrieben habe. Es funktioniert mit fast jedem REST / Web-Server (und funktioniert 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;

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top