php
2011-02-26 85 views 25 likes 
25

當我使用這個:如何通過php的require()或include()函數傳遞變量?

require("diggstyle_code.php?page=$page_no"); 

的警告:未能打開流:C中沒有錯誤:\ XAMPP \ htdocs中\ 4ajax \ gallery_core.php上線198

和錯誤是:

Failed opening required 'diggstyle_code.php?page=1' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\4ajax\gallery_core.php on line 198 

預先收集變量$page_no的值。

但是,如果我從require函數的參數中省略'?page=$page_no part',則不會顯示錯誤或警告。

當我使用require()函數時,需要傳遞變量。

+0

@Tomalak Geret'kal,我是新的。請澄清你說的話。 – 2011-02-26 17:41:24

+0

請閱讀常見問題解答(http://stackoverflow.com/faq),尤其是「我如何在此提問?」標題下的部分。 – 2011-02-26 18:41:13

回答

45

require()include()將打開與它們接收的路徑/名稱對應的文件。

這意味着,在您的代碼中,您必須在磁盤上有一個名爲diggstyle_code.php?page=1的文件。顯然不是這樣,所以它失敗了。

引述Variable scope頁面PHP手冊的:

變量的範圍即它被定義的上下文。大多數情況下,所有PHP變量只有一個範圍。 這個單一的範圍跨越包括和必需的文件。

就你而言,你不需要傳遞變量。如果您當前的腳本中有變量,它也會存在於您所包含的腳本中,以外的函數,它們各自具有自己的作用域

在主腳本,你應該有:

$page_no = 10; 
require 'diggstyle_code.php'; 

而且在diggstyle_code.php

echo $page_no; 
// Or work with $page_no the way you have to 

請記住,包括/需要的文件是完全一樣的複製粘貼其內容在它所需的線路上。

+0

非常感謝。 – 2011-02-26 17:06:38

+0

不客氣:-)玩得開心! – 2011-02-26 17:11:32

+1

這隻適用於auto_globals開啓的代碼。通過查詢字符串傳入的變量位於超全局'$ _GET'數組(或者'$ _REQUEST') – knittl 2011-02-26 18:19:43

8

這應該工作,但它是一個相當骯髒的黑客:

$_GET['page'] = $page_no; 
require('diggstyle_code.php'); 

你可能要重構代碼使用的功能和/或對象,並從你的文件給他們打電話,而不是包括他們的(意大利麪條代碼警報)

+0

+1「從你的文件中調用它們而不是包含它們」 – chelmertz 2011-02-26 16:34:42

+0

1)'重構你的代碼' - 這是什麼意思? 2)'從你的文件中調用它們' - 你的意思是? 3)'意大利麪代碼提醒' - 代碼變得笨拙? – 2011-02-26 17:42:42

+1

@sof_user:1)重構你的代碼,使其更好的可用性和可維護性,而不會改變行爲2)創建函數,包含它們,然後在需要的地方從你的其他文件調用它們3)代碼變得難以維護並且巨大的混亂(像意大利麪) – knittl 2011-02-26 18:18:47

1

require不會從Web服務器上拉出文件 - 它應該引用文件系統上的文件。

調用includerequire只是告訴PHP將給定文件的內容粘貼到代碼中的這個地方,無非就是如此。

1

require()不發起HTTP呼叫。它所做的只是從磁盤打開文件並將代碼包含在通話的位置。所以簡單的局部變量就足夠了。

0

require,require_once,include和include_once嘗試在當前文件中包含文件系統中的文件。

由於沒有名爲diggstyle_code.php?page = 1的文件,PHP無法找到它是完全合乎邏輯的。

您不能以這種方式傳遞值,但是,當前文件中聲明的任何變量都可以在包含的文件中訪問。

1

如果您的變量是全局變量,則不需要「通過」它,它已經存在: PHP variable scope

答案就是,不要做任何事情,如果在您調用require()的文件中存在$ page_no,它將在包含的文件中可用。

-1

我有這個問題,我注意到,如果你使用http://你的網址,然後它不工作

0

,如果我理解正確的話,你需要的是調用文件diggstyle_code.php傳遞參數,所以沒有人可以調用該文件並使其工作,而不是您的主文件。我對嗎?

因此假設你的 「main.php」 有行

require("diggstyle_code.php?page=$page_no"); 

這意味着: 如果有人稱之爲 「main.php」 得到diggstyle_code.php運行。 但是,如果有人以任何方式直接致電diggstyle_code.php,他/她應該得到什麼。

如果我是對我的理解,這是一種實現這一目標,是要加入到主文件中的變量或常量,將由diggstyle_code.php

因此,例如將範圍界定:「main.php」

<?php 
define("_VERIFICATION_", "y"); 
require("diggstyle_code.php"); 
?> 

現在diggstyle_code.php

<?php 
if (_VERIFICATION_ == "y") { 
//Here the code should be executed 
} else { 
// Something else 
} 
?> 
0

儘管這個問題是舊的有,我用另一種選擇是從這個THR失蹤元首。您可以從它接受要沿着傳遞參數所需的文件恢復功能:

return function(array $something) { 
    print_r($something); 
} 

並與參數來調用它,當你require它:

require('file.php')(['some', 'data']); 

// or: 

$context = require('file.php'); 
$context(['some', 'data']); 
相關問題