Как выполнить и получить содержимое файла .php в переменной?

StackOverflow https://stackoverflow.com/questions/851367

Вопрос

Я хочу получить содержимое файла .php в переменной на другой странице.

У меня есть два файла, myfile1.php и myfile2.php.

myfile2.php

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

Теперь я хочу получить значение, повторяемое myfile2.php в переменной в myfile1.php, я попробовал следующий способ, но он также принимает все содержимое, включая php tag ().

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

Пожалуйста, скажите мне, как я могу преобразовать содержимое, возвращаемое одним PHP-файлом, в переменную, определенную в другом PHP-файле.

Спасибо

Это было полезно?

Решение

Вы можете использовать включать в себя директива для этого.

Файл 2:

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

Файл 1:

<?php 

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

?>

Другие советы

Вы должны различать две вещи:

  • Вы хотите зафиксировать результат (echo, print, ...) включенного файла и использовать выходные данные в переменной (string)?
  • Вы хотите вернуть определенные значения из включенных файлов и использовать их в качестве переменной в вашем ведущий сценарий?

Локальные переменные в ваших включенных файлах всегда будут перемещены в текущую область вашего ведущий скрипт - это следует отметить.Вы можете объединить все эти функции в одну:

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-функция особенно удобна при использовании файлов конфигурации.

config.php

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

app.php

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

Редактировать

Чтобы ответить на ваш вопрос о снижении производительности при использовании выходных буферов, я просто провел небольшое тестирование.1 000 000 итераций ob_start() и соответствующий $o = ob_get_clean() на моем компьютере с Windows это займет около 7,5 секунд (возможно, не лучшая среда для PHP).Я бы сказал, что влияние на производительность следует считать довольно небольшим...

Если бы вам нужен был только контент echo()судя по прилагаемой странице, вы могли бы рассмотреть возможность использования буферизации вывода:

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

Видишь http://php.net/ob_start

Я всегда стараюсь избегать ob_ функции.Вместо этого я использую:

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

"На самом деле я просто смотрел, есть ли какой-либо метод возвращаемого типа, который может напрямую выдать мне значение" - Вы только что ответили на свой собственный вопрос.

Видишь http://sg.php.net/manual/en/function.include.php, Пример №5

file1.php:

<? return 'somevalue'; ?>

file2.php:

<?

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

?>

Вы можете использовать выходные буферы, которые будут хранить все, что вы выводите, и не будут распечатывать это, если вы явно не укажете это, или не завершите / не очистите буферы к концу пути выполнения.

// 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();

Если вы хотите охватить весь сайт, используйте

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

Пожалуйста, попробуйте этот код

myfile1.php

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

myfile2.php

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

Если вы хотите вернуть выходные данные из кода в файле, просто выполните для него вызов RESTful API.Таким образом, вы можете использовать один и тот же файл кода для вызовов ajax, REST API или для вашего внутреннего PHP-кода.

Для этого требуется установить cURL, но без выходных буферов или без включений, просто страница выполняется и возвращается в виде строки.

Я дам вам код, который я написал.Он работает практически с каждым REST / веб-сервером (и даже работает с Equifax).:

$return = PostRestApi($url);

или

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

Вот эта функция:

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

    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top