2011-11-28 77 views
3

在PHP中,我構建了一個使用include()加載網站部分的網頁。 不過,我現在遇到了類似的問題: 當我使用像一個網址:data-openov-storingen.php?type=actueel 它給我這個錯誤:PHP - 包含()文件不工作時變量放在URL?

Warning: include(data-storingen.php?type=actueel): failed to open stream: No such file or directory in blablabla 

它甚至有可能通過GET變量在include()網址是什麼?

+5

1.如果你閱讀錯誤,你會明白你的問題是什麼。所以不要* bla bla *。 2.在您輸入問題的'textarea'下面的預覽是有原因的:幫助我們幫助您(通過使您的問題格式正確並**清除**) – Nasreddine

+1

我已經爲您編輯了問題。請在下次正確格式化您的問題。用90代表你會希望知道如何編輯一個問題。 –

+0

@Nacereddine:的確,我確實知道發生了什麼問題,但這就是我問到這個問題的原因。我想更多地瞭解細節。 – laarsk

回答

5

include()函數不通過HTTP訪問文件,它通過操作系統自己的文件系統訪問文件。所以GET變量不計算在內。 (因爲它們不是文件名的一部分)。

通俗地說,include的要點是將文件中的所有內容「複製/粘貼」到文件中的另一個文件上,這樣就不會有一個巨大的文件,而是一些較小的,更易維護的文件。

+0

Thansk的信息,我會重寫那段代碼,謝謝! – laarsk

+0

但是,它不會像你說的那樣複製/粘貼。我知道,因爲我有一個雙重include(一個包含文件,其中包含一個包含),並且雙重包含文件不能從主文件訪問一個函數...編輯:我的不好,它可以訪問該函數。 – laarsk

+0

包含的文件被視爲一個函數。它可以從外部(全局)訪問變量,但外部(包括文件)不能訪問裏面的變量(很像應用程序無法訪問函數作用域變量)。 –

7

include這種方式不會抓取一個URL,它從文件系統中獲取一個文件,所以沒有查詢字符串這樣的東西。

你可以做到這一點,雖然:

$_GET['type'] = 'actueel'; 
include('data-storingen.php'); 
+0

這是什麼工作呢?那麼現在你只是設置get變量?哈哈很好:D – laarsk

3

除非你在地址有一個完全合格的URL,與protocol://,PHP會解釋你傳遞什麼到包括()/ require()則作爲LOCAL文件,這意味着它正在尋找驅動器上的文件名稱爲data-storingen.php?type=actueel,而您只有data-storingen.php

由於您正在處理本地文件,因此不支持查詢字符串,並且必須從您傳遞給include()的「文件名」中除去該字符串。

2

你可以/應該總是設置變量之外,因爲你無法通過URL做到這一點....

$_GET['type'] = "actueel"; 
include("data-storingen.php"); 

然後被包含的文件可以訪問的變量(假設你在使用$_GET['type']包含文件)

2

不,不可能傳遞這樣的變量。不過,只要在包含語句之前的頁面中聲明它,就可以使用data-storingen.php中的變量actueel

認爲將包含文件中的代碼複製粘貼到當前文件中。所以,你可以有一個文件:

$actueel = 'abc'; 
include(data-storingen.php); 

然後你在data-storingen.php

echo $actueel; 

,它將輸出 'ABC'。