Добрый вечер, у меня сайт с двумя языками, реализован с помощью $_SESSION["lan"] и настроечных файлов для меню и пр. В начале каждого файла подключается PHP: include_once(dirname ( __FILE__, 2 ) . DIRECTORY_SEPARATOR . 'globalincluds/GLOBAL_INCLUDS.php') Его содержание: PHP: @session_start(); include_once( dirname ( __FILE__, 1 ) . DIRECTORY_SEPARATOR . 'classes/dbmsql.php'); include_once("FUNCTIONS.php"); include_once("FUNCTION_Rock.php"); statistic_site_insert($dbmsql); // Die Sprache ist ermittelt // $lan = ""; if (!isset($_SESSION["lan"])) { $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; $lan = str_replace(strstr($lang, ','), '', $lang); $lan = substr( $lan,0,2); $_SESSION["lan"] = $lan; } if (isset($_REQUEST["lan"])) { $lan = $_REQUEST["lan"]; $_SESSION["lan"] = $lan; } if ($lan == "") $lan = $_SESSION["lan"]; /* if (!isset($_SESSION["lan"])) echo '<br>NO $_SESSION '; else echo '<br>SESSIONS existiert !!!';*/ if ($lan == "" || ($lan != "de" && $lan != "ru")) $lan = "de"; $_SESSION["lan"] = $lan; include_once("text_menu_".$lan.".php"); Все работает, за исключением одного файла: https://www.rock-classic.com/www/kind-of-rockmusic.php- То есть, если на другой странице русский установил и потом перешел на этот файл, то он вызывается на немецком Переходя на другие страницы язык становится снова русским НЕ ПОНИМАЮ ВООБЩЕ, так как у меня на локальном сервере, дома все прекрасно правильно фурычит... Вот этот файл. PHP: // FILE kind-of-rockmusic.php include_once(dirname ( __FILE__, 2 ) . DIRECTORY_SEPARATOR . 'globalincluds/GLOBAL_INCLUDS.php'); if ($_SESSION["lan"] == 'de') $seite_titel = 'Rockmusik-Genre'; if ($_SESSION["lan"] == 'ru') $seite_titel = 'Жанры рок-музыки'; include_once('inc/head.php'); ?> <div style="padding-left:15px;"> <!--top:500px;width:auto;">--> <img class="img_first" src="img/Egmond_S_17_061.jpg" alt="Muse"/> <img class="img_next" src="img/Last_tree_0036f.jpg" alt="Last tree"/> <?php if ($_SESSION["lan"] == 'de') { ?> <h2>Genre von Rockmusik - ein Beispiel</h2> <span class="span_b">Weiter eine Klassifikation von<a href="http://www.hardharderheavy.de" target="_blank"> Rock- und Metal - Online-Magazin</a> </span><br /><br /> <?php } if ($_SESSION["lan"] == 'ru') { ?> <h2>Пример классификации жанров рок-музыки</h2> <span class="span_b">Ниже вариант, предложенный на сайте <a href="http://www.hardharderheavy.de" target="_blank"> Rock- und Metal - Online-Magazin</a> </span><br /><br /> <?php } ?> Есть какие-то соображения? Спасибо.
Вместо PHP: $seite_titel не лучше создать в одном месте массив, который можно в любое время изменить? Ведь легче будет работать. Например: PHP: $parse_lang = array ( 'ru' => array ( 'title' => 'Жанры рок-музыки', 'description' => 'description', 'keywords' => 'keywords' ), 'de' => array ( 'title' => 'Rockmusik-Genre', 'description' => 'description', 'keywords' => 'keywords' ) ); PHP: $_REQUEST тебе все равно откуда придут данные? Я думаю это не так. Полный пример ниже, думаю разберешься и добавишь текст. PHP: <?php //- Если пользователь выбрал язык сайта сам. if ( isset ( $_GET["lang"] ) and in_array ( $_GET["lang"], array ( 'ru', 'de' ) ) ) { $_SESSION["lang"] = $_GET["lang"]; } //- Предпочтительный язык пользователя preg_match('/^\w{2}/',$_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); switch ( strtolower( $matches[0] ) ) { //- Русский case "ru": $accept_lang = "ru"; break; //- Немецкий case "de": $accept_lang = "de"; break; //- По дефолту default: $accept_lang = "ru"; break; } //- Ранее определенный язык сайта из $_SERVER['HTTP_ACCEPT_LANGUAGE'] $lang = $accept_lang; //- Данные о выборе языка есть в сессии if ( isset( $_SESSION["lang"] ) ) { $lang = $_SESSION["lang"]; } //- Выбор языка $html = ' <div> <a href="?lang=ru" style="color:'.($lang == 'ru' ? 'red' : '' ).'">Русский</a> <a href="?lang=de" style="color:'.($lang == 'de' ? 'red' : '' ).'">Немецкий</a> </div> '; //- $parse_lang = array ( 'ru' => array ( 'title' => 'Жанры рок-музыки', 'description' => 'description', 'keywords' => 'keywords' ), 'de' => array ( 'title' => 'Rockmusik-Genre', 'description' => 'description', 'keywords' => 'keywords' ) ); ?> Код (Text): <!DOCTYPE html> <html lang="<?=$lang?>"> <head> <meta charset="UTF-8"> <title > <?=$parse_lang[$lang]['title']?> </title> </head> <body> <?=$html?> TEST <?=$parse_lang[$lang]['title']?> </body> </html>
@Vladchucha, кто тебя научил собак по коду разбрасывать, а потом жаловаться, что у тебя что-то не работает, а ты не знаешь почему? @session_start()
Ок, спасибо, поищу еще, поэкпериментирую,однако, все равно не врубаюсь: есть где-то ошика, но почему она никак не проявляетя но моем сервере, и проявляется там, в облаках...?
Абстрактно конечно логичый ответ, но что конкретно влияет, пока ума не проложу, видимо придется на Сервере ловить. Собак, кошек убрал, $_SESSIONS проверил, пока у меня на локальном говорит, что все хорошо и жизнь хороша.... --- Добавлено --- Да, так лучше, спасибо !!
@Vladchucha попробуй почистить все куки домена. Куки они такие коварные, их может быть больше чем нужно.
Сам разок на этот "прекрасный" момент попался, с чем связано? Со стороны все идентично выглядело) --- Добавлено --- Так что не работает то? Добавь вначале страницы. Может у тебя выводится что-то перед стартом сессии. Код (Text): error_reporting(E_ALL); ini_set("display_errors","1"); ini_set("display_startup_errors","1"); лог ошибок изучи
Так что не работает то? error_reporting(E_ALL); и т.д ничего не дает, куков нет, все работает,кроме: переходя на одну (и только с ней проблема) страницу https://www.rock-classic.com/www/kind-of-rockmusic.php произвольно (само) меняется знчение $_SESSIONS[lan] с русского на нем. язык. Переходя на другую страницу русский восстанавливаетя. Если я на немецком смотрю сайт и эту страницу, то все работает штатно. НО !! На моем лок. сервере этого бага нет !!!, все OK, 2 раза уже все файлы по новой загрузил "наверх", результат тот же. Надо видимо виски выпить побольше....
чувак, вот это правильное направление. ты молодец! теперь потрать ещё немного времени на отладку и наблюдение. идентификатор сессии на "правильных" страницах будет стабилен — на то она и сессия. а на проблемной он вероятно будет отличаться. если это так, значит скрипт в этом месте не может получить сессионную куку или наоборот установить её. проверь это. ты ошибаешся. сессия живёт благодаря сессионной куке.
Итак, этот единственный паршивый файл не видит (не принимает) SESSIONS ID. НО только там, наверху. На моем сервере все хорошо. Ошибка состояла в том, что в этом файле был пробел переl началом PHP, то есть перед <?php . Пробел убрал, все нормально стало. Всем огромное спасибо. P.S. Все же очень странно для меня это, это в каких.то настройках определяется ?
Скачай и редактируй все файлы одним нормальным редактором. UTF8 без BOM. Погуглить можешь, всяко найдешь для себя что-то новое
Есть настройка буферизированного вывода по умолчанию, не помню, как называется. Ваш пробел - это вывод, а после вывода не работает session_start(). Но если вывод идёт в буфер, а не сразу в ответ, то работает. Вообще, не понимал назначения этой настройки, сделали бы либо одно либо другое. Я никогда на неё не рассчитываю. PhpStorm пробелов не ставит. Но я пишу MVC, даже когда без фреймворка