include_once在url中未传递变量时给出错误

时间:2012-04-24 14:52:23

标签: php arrays include warnings

的index.php

<?php include_once 'lang.php'; ?>

lang.php

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if (isSet($_GET['lang'])) {
    $lang = $_GET['lang'];
    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if (isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if (isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}
switch ($lang) {
    case 'en':
        $lang_file = 'lang.en.php';
        break;
    case 'pl':
        $lang_file = 'lang.pl.php';
        break;
}
include_once 'languages/' . $lang_file;
?>

lang.en.phplang.pl.php中,我有包含内容的数组。

首次打开网站时,我收到两条警告:

  

警告:include_once(languages /)[function.include-once]:无法打开流:第37行的blah / blah / blah / lang.php中没有这样的文件或目录

     

警告:include_once()[function.include]:无法打开包含的'languages /'(include_path ='。:/ usr / local / lib / php-5.2.17 / lib / php')in blah / blah第37行/blah/lang.php

然后,当我在网页上选择一种语言,并在网址中传递变量“lang”(例如index.php?lang=en)时,一切正常。如何解决?

2 个答案:

答案 0 :(得分:1)

如果您没有定义语言,它会尝试加载“languages /”(目录)。您的switch语句中应该有一个默认值。如果您希望默认语言为“en”,例如:

switch ($lang) {
  case 'pl':
  $lang_file = 'lang.pl.php';
  break;
  default: // en will fall here, too
  $lang_file = 'lang.en.php';
  break;
}

否则$lang_file未定义,当然无法加载。

答案 1 :(得分:0)

也许只需为default添加switch部分:

switch($lang){
  case 'en':
    $lang_file='lang.en.php';
    break;
  case 'pl':
    $lang_file='lang.pl.php';
    break;
  default:
    // This will set a default language file.
    $lang_file='lang.en.php';
}
include_once 'languages/'.$lang_file;

这次,当$lang未设置为'en''pl'时,交换机将返回将$lang_file设置为lang.en.php。但是,如果您希望默认设置pl,则可以更改它。