2012-01-08 67 views
0

我有2個簡單的PHP文件:使用GET在需要

test.php的

<?php 
$a=10; 
require "use.php?c=$a"; 
?> 

use.php:

<?php 
$test=$_GET['c']; 
echo $test; 
?> 

但它沒有返回。

有什麼不對?

回答

1

include()require()不發出HTTP請求,除非你提供一個完整的URL,他們的本地文件系統上工作。 $_GET和朋友在填充時使用URL參數。您的代碼不應該起作用,因爲您正在嘗試require()一個名爲use.php?c=$a的文件,而不是名爲use.php的文件將值$a傳遞給參數c,這正是您想要的。

這將工作:

test.php的

<?php 
$a=10; 
require "use.php"; 
?> 

use.php

<?php 
echo $a; 
?> 

如果你沒有得到任何輸出,您應該啓用錯誤報告:

error_reporting(-1); 
ini_set('display_errors',1); 
5

這不是您想要使用的方式require:您通常使用它來包含文件系統路徑,該路徑不適用於GET參數。 GET參數只能在HTTP URL中使用。 (HTTP請求很慢,因此幾乎從不想通過URL包含任何東西。)

代碼require d被執行,就好像它是當前腳本的一部分一樣。

所以,你可以這樣做:

<?php 
$a=10; 
require "use.php"; 
?> 

use.php

<?php 
$test=$a; 
echo $test; 
?> 
+0

我明白了。但是,我將不得不在文件之間保留變量名稱。有沒有一種方法不需要變量名是相同的? – David19801 2012-01-08 16:41:05

+1

@大衛首先你想做什麼?也許如果你詳細說明,有人可以提出一個好建議 – 2012-01-08 16:41:34

+0

只是玩PHP,並很好奇它爲什麼沒有按預期工作... – David19801 2012-01-08 16:49:11

0

要求?也許你的位置在找什麼:

$a=10; 
header("Location: use.php?c=$a") ; 
-1

你可以試試下面的代碼:

$oldget = $_GET; 
$_GET = array('c'=>'a'); 
require "use.php"; 
$_GET = $oldget; 

但我認爲,你應該改變你的架構