2011-08-01 122 views
8

我希望能夠通過file_get_contents()向文件發送一些變量。PHP將變量發送到file_get_contents()

這是firstfile.php:

<?php 
$myvar = 'This is a variable'; 
// need to send $myvar into secondfile.php 
$mystr = file_get_contents('secondfile.php'); 
?> 

這是secondfile.php:

The value of myvar is: <?php echo $myvar; ?> 

我希望變量$mystr等於'The value of myvar is: This is a variable'

是否有任何其他的功能,將讓你在PHP中這樣做?

+0

的[什麼是加載(與變量)多個文件的最好方法可能重複內容轉換爲字符串?](http://stackoverflow.com/questions/6905364/what-would-be-the-best-way-to-load-with-variables-multiple-files-content-into-a) – Phil

回答

15
ob_start(); 
include 'secondfile.php'; 
$myvar = ob_get_clean(); 

即使被告知:很多ob_start的在你的代碼通常是一個標誌,你應該定義哪些返回字符串,然後你就可以選擇呼應與否的功能。

+0

+1有關回聲的好處。 – Nicole

15

有得到一個文件運行腳本內容之間有很大的區別:

  • include —這個PHP指令運行指定文件作爲腳本 ,範圍與調用include的範圍相同。因此,要將變量「傳遞」給它,只需在調用include之前定義它們即可。 include只能在本地使用(只能包含與PHP服務器相同文件系統上的文件)。

  • file_get_contents —當獲取文件本地,這只是檢索包含在文件中的文本。沒有PHP處理完成,所以沒有辦法「傳遞」變量。如果您在上面的示例中檢查$myvar,則會看到它包含確切的字符串「<?php echo $myvar; ?>」—它尚未執行。

    但是,PHP通過允許file_get_contents將互聯網地址的「遠程」文件—的內容拉入一些東西有些困惑。在這種情況下,概念是相同的— PHP只是在該地址—包含任何東西的原始結果,但PHP,Java,Ruby或任何其他運行在該遠程服務器可能已執行的東西產生這樣的結果。

    在這種情況下,您可以根據URL的規範(如果它是API或類似的)「傳遞」URL中的變量(稱爲GET請求參數)。無法傳遞您選擇的變量,這些變量未被指定爲在該遠程服務器將處理的腳本中處理。

    注:「遠程服務器」簡稱MAY是你自己的服務器,但要小心,因爲這會混淆的東西,甚至更多,如果你真的不知道它是如何工作(就變成了第二,完全獨立的請求)。通常沒有很好的理由這樣做,而不是使用include,儘管他們可以完成類似的結果。

+0

對於OP的好解釋,我沒有精力做到這一點,+1。 – Wrikken

+0

完美,謝謝!:) – Mike

1

下面的代碼片段展示了一個簡單的方法如何使用PHP函數的file_get_contents發送一個HTTP POST請求:

<?php 

$url = 'http://url.com/path'; 
$data = array('param1' => 'value1', 'param2' => 'value2') 

// use key 'http' even if you send the request to https://... 
$options = array('http' => array(
    'method' => 'POST', 
    'content' => http_build_query($data) 
)); 

$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

print_r($result); 

OR Passing variable in a URL (php) & file_get_contents()

0

您可以使用sprintf函數,例如: firstfile.txt

The value of my var is: %s 

s econdfile.php

<?php 
$f = file_get_contents("firstfile.txt"); 
$var = "some"; 
echo sprintf($f, $var); 

結果將是

我var的值是:一些