包含具有相同ID的PHP代码

时间:2014-05-28 15:40:16

标签: php include

我的问题是include()在此示例中不起作用:

... 

$lang = $_GET["lang"];
$id = $_GET["id"];

if ($lang == "fr"){
    include ('indexFr.php?id='.$id);
}
else if ($lang == "ar"){
    include ('indexFr.php?id='.$id);
} 
else if ($lang == "en"){
    include ('indexFr.php?id='.$id);
} 

...

我使用这个:

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

switch ($lang){
    case "fr":
        header("Location: indexFr.php?id=".$id);
        break;
    case "ar":
        header("Location: indexAr.php?id=".$id);
        break;
    case "en":
        header("Location: indexEn.php?id=".$id);
        break;        
    default:
        header("Location: indexEn.php?id=".$id);
        break;
}

但是,如果我想要包含其他内容(不是语言页面),我认为这是正确的代码,但它不起作用:

include ('www.monsite.com/indexFr.php?id='.$id);

我该怎么做?

2 个答案:

答案 0 :(得分:0)

如果您的$_GET数组已经有id的值,那么如果您正在执行include,则最后不需要该查询字符串。它将使用您已有的$_GET数组并获得相同的$_GET['id']值。

include实际上是将外部文件的代码放入已经运行的PHP代码中。因此,例如,如果您有此文件:

<强>的index.php?ID = 5

echo $_GET['id'];
include "otherfile.php";

然后是另一个文件:

<强> otherfile.php

echo $_GET['id'];

输出将是:

55

因为您正在有效地创建如下所示的文件:

echo $_GET['id'];
echo $_GET['id'];

include标记不适用于查询字符串,因为它是本地文件,因此不使用查询字符串。

如果要包含来自其他域的文件,可以尝试:

include ('http://www.monsite.com/indexFr.php?id='.$id);

也就是说,包括跨域文件被认为是不好的做法,可能只包括生成的HTML而不是PHP。如果您要包含本地文件系统中的文件,那么您真的应该只使用已存在的$_GET变量。

答案 1 :(得分:-1)

您需要指定一个完整的网址才能生效。您指定的内容将在您的本地文件系统上查找名为indexFr.php?id=123的文件,而这不是您尝试执行的操作。你需要一个http://或https://,所以它知道要通过一个web服务器,它会传递你的参数。

http://www.php.net/manual/en/function.include.php

实际上,他们提供的示例案例与您的情况非常接近:

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';

// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';