.phpファイルの内容を他のページの変数に取得したい。
2つのファイル、myfile1.php
およびmyfile2.php
。
myfile2.php
<?PHP
$myvar="prashant"; //
echo $myvar;
?>
ここで、myfile2.phpによってmyfile1.phpの変数にエコーされた値を取得したいので、次の方法を試しましたが、phpタグ()を含むすべてのコンテンツを取得します。
<?PHP
$root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true);
?>
PHPファイルから、別のPHPファイルで定義された変数に、ファイルから返されたコンテンツを取得する方法を教えてください。
ありがとう
include ディレクティブを使用してこれを行うことができます。
ファイル2:
<?php
$myvar="prashant";
?>
ファイル1:
<?php
include('myfile2.php');
echo $myvar;
?>
次の2つを区別する必要があります。
echo
、print
、...)をキャプチャして、変数(文字列)で出力を使用しますか?インクルードファイルのローカル変数は、常にHostスクリプトの現在のスコープに移動されます-これは注意が必要です。これらの機能をすべて1つに組み合わせることができます。
_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
- featureは、特に構成ファイルを使用する場合に便利です。
_config.php
_
_return array(
'Host' => 'localhost',
....
);
_
_app.php
_
_$config = include 'config.php'; // $config is an array
_
[〜#〜]編集[〜#〜]
出力バッファを使用する際のパフォーマンスの低下に関する質問に答えるために、簡単なテストをいくつか行いました。 ob_start()
および対応する$o = ob_get_clean()
の1,000,000回の反復には、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;
?>
ファイルのコードから出力を返したい場合は、RESTful APIを呼び出すだけです。このようにして、同じコードファイルをajax呼び出し、REST API、または内部のPHPコードに使用できます。
CURLをインストールする必要がありますが、出力バッファーやインクルードはなく、ページが実行されて文字列に返されるだけです。
私が書いたコードをお渡しします。ほとんどすべてのREST/Webサーバーで動作します(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;
}
}
このコードを試してください
myfile1.php
<?php
echo file_get_contents("http://domainname/myfile2.php");
?>
myfile2.php
<?PHP
$myvar="prashant";
echo $myvar;
?>