Disculpa si dudo de lo que argumentas pero por que dices que no puede estar session_start() dentro de alguna funcion o script, que yo entienda después que su llamada este al inicio del código no debe haber ningún problema:
index.php
Código PHP:
Ver original/*incluciones de codigo del core php y las clases mediate uso de constantes*/
require_once("config/index.config.php");
//instanciamos las clases
$sesion = new Session();
$language = new Language();
$sesion -> iniciarSession();//iniciamos sesion
$lang = $language->getLanguage(@$_POST['lang']);//obtenemos lenguaje y actualisamos
config/index.config.php
Código PHP:
Ver original<?php
//Directorio del nucleo de PHP
$APP_PHPCORE_DIR=$_SERVER['DOCUMENT_ROOT'] . '/phpcore';
//Lenguaje por defecto
$DEFAULT_LANGUAGE = 'es';
$LANGUAGE_DIR='/lang';
//Cargamos todos los archivos del núcleo php que se utilizaran
require_once $APP_PHPCORE_DIR . '/' . 'class.constants.php';
require_once $APP_PHPCORE_DIR . '/' . SESSION_CLASS;
require_once $APP_PHPCORE_DIR . '/' . LANGUAGE_CLASS;
require_once $APP_PHPCORE_DIR . '/' . CHARGETPL_CLASS;
require_once $APP_PHPCORE_DIR . '/' . MERGETPL_CLASS;
require_once $APP_PHPCORE_DIR . '/' . PRINTTPL_CLASS;
?>
class.constants.php
Código PHP:
Ver original<?php
/*definimos las Constantes de la pagina web*/
define("SESSION_CLASS" ,"class.session.php"); define("LANGUAGE_CLASS" ,"class.language.php"); define("CHARGETPL_CLASS" ,"class.chargTPL.php"); define("MERGETPL_CLASS" ,"class.mergeTPL.php"); define("PRINTTPL_CLASS" ,"class.printTPL.php"); ?>
class.session.php
Código PHP:
Ver original<?php
class Session{
function iniciarSession(){
// Turn on all error reporting
}
}
?>
class.language.php
Código PHP:
Ver original<?php
class Language {
// Method to detect user language
function detectLanguage() {
global $DEFAULT_LANGUAGE;
if ($_SERVER['HTTP_ACCEPT_LANGUAGE']) {
$this->languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$this->language = substr($this->languages,0,2); echo "si acepta HTTP_ACCEPT_LANGUAGE<br>";
return $this->language;
}else{
echo "no acepta HTTP_ACCEPT_LANGUAGE<br>";
if ($_SERVER['HTTP_USER_AGENT']) {
echo "si acepta HTTP_USER_AGENT<br>";
$this->user_agent = explode(";" , $_SERVER['HTTP_USER_AGENT']); for ($i=0; $i < sizeof($this->user_agent); $i++) { $this->languages = explode("-",$this->user_agent[$i]); if (sizeof($this->languages) == 2) { $size = sizeof($this->language); $this->language[$size]=trim($this->languages[0]); }
}
}
return $this->language[0];
}else{
echo "no acepta HTTP_USER_AGENT<br>";
$this->language = $DEFAULT_LANGUAGE;
return $this->language;
}
}
}
// Method to check if a language exists
function checkLanguage($language = null) {
global $LANGUAGE_DIR;
echo "verificamos si existen los archivos de lenguaje <br>";
$language = $LANGUAGE_DIR."/".$language.".inc.php";
return TRUE;
}else{
return FALSE;
}
}
//Method to set language
function setLanguage($language = null){
echo "asignacion de lenguaje <br>";
global $DEFAULT_LANGUAGE;
if ($language){ $_SESSION['LANGUAGE'] = $language;}
if (@!$_SESSION['LANGUAGE']){ $_SESSION['LANGUAGE'] = $this->detectLanguage();}
if ($this->checkLanguage($_SESSION['LANGUAGE'])) {
$lang = $_SESSION['LANGUAGE'];
return $lang;
}else{
return $DEFAULT_LANGUAGE;
}
}
//Method to get the language configuration
function getLanguage($language = null) {
echo "obtenemos la configuracion del lenguaje <br>";
global $LANGUAGE_DIR;
$lang = $this->setLanguage($language);
include_once $LANGUAGE_DIR."/".$lang.".inc.php";
return $language = $lang;
}
}
?>
problema resuelto. esto es MVC y POO, si alguien tiene algún aporte o sugerencia pues la tomare en cuenta.