Foros del Web » Programando para Internet » PHP »

Consejo sobre include

Estas en el tema de Consejo sobre include en el foro de PHP en Foros del Web. hola a tod@s estoy implementando el modulo multilenguaje a mi web y he llegado a un problema que me esta dejando sin fuerzas.. tengo esta ...
  #1 (permalink)  
Antiguo 09/11/2011, 13:17
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Consejo sobre include

hola a tod@s estoy implementando el modulo multilenguaje a mi web y he llegado a un problema que me esta dejando sin fuerzas..

tengo esta clase.
Código PHP:
class mi_clase {

var 
$str_leng = array();

//Inicia la clase
function mi_clase() {
    
$this->cargar_lenguaje();
}

//Obtenemos el lenguaje del usuario
private function obtener_lenguaje() {
$str_len_temp $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lenguaje explode(',',$str_len_temp);
$lenguaje explode('-',$lenguaje[0]);
$lenguaje strtoupper($lenguaje[0]);

return 
$lenguaje;
}

//Establecemos las cadenas del lenguaje de acuerdo al lenguaje del usuario
function cargar_lenguaje() {
$leng_usuario $this->obtener_lenguaje();
include 
"lenguajes/$leng_usuario/cadenas.php";    
$this->str_leng $str_leng// $str_leng es una matrix establecida en cadenas.php
}

}
//clase 
Esa clase incluye los archivos necesarios para el idioma del usuario que esta visitando la web.

funciona correcto cuando la incluyo en un archivo: ejmplo index.php
Código PHP:
require "clases/mi_clase.php";

$objeto_clase = new mi_clase();

echo 
$objeto_clase->str_leng['llave']; 
ahora, el problema viene cuando ejecuto la clase dentro de un archivo que es llamado mediante ajax, es decir tengo un archivo llamado post_ajax.php, este archivo contiene funciones que se ejecutan mediante ajax y parametros.

post_ajax.php llama a la clase mi_clase y obviamente al crearse la clase se ejecuta la funcion cargar_lenguaje() y muestra el siguiente error.

Warning: mi_clase::include(lenguajes/ES/cadenas.php) [mi_clase.include]: failed to open stream: No such file or directory.

El error anterior lo solucione agregando esto a la hora de incluir los archivos del idioma
Código PHP:
include "../lenguajes/$leng_usuario/cadenas.php"
es decir que al ejecutar post_ajax.php con ajax no muestra el error, pero aqui es donde comienza mi nuevo error, al agregar los dos puntos a la cadena del archivo a incluir, le dije a php que el archivo a incluir estaba una carpeta atras del archivo que ejecuto la clase por lo tanto me tira el mis error anterior al ejecutarse en cualquier otro script que no sea post_ajax.php

Warning: mi_clase::include(lenguajes/ES/cadenas.php) [mi_clase.include]: failed to open stream: No such file or directory.

Como puedo solucionar este problema?

Espero me hayan entendido y Gracias!
  #2 (permalink)  
Antiguo 09/11/2011, 14:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Consejo sobre include

Simple, usa una ruta directa al archivo. Recuerda que las rutas, con include, require, fopen, etc. son relativas al archivo PHP actual, es por eso que si estas en un archivo en un directorio X funciona y si lo mueves a un directorio Y, deja de funcionar.

Lo que debes de hacer es definir una constante que sea la ruta directa a tu proyecto y de ahí hacer los includes, p.e.:

Código PHP:
Ver original
  1. define('APP_PATH', 'C:/proyectos/miapp');
  2.  
  3. include APP_PATH . '/includes/lang.php';
  4. include APP_PATH . '/includes/utilities.php';
  5. include APP_PATH . '/includes/etc.php';

Así no importa en que directorio estes, la constante APP_PATH siempre será correcta y por ende el include no te dará problemas.

Saludos.
  #3 (permalink)  
Antiguo 09/11/2011, 14:17
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consejo sobre include

Pero supongo que para ello debo activar allow_url_include?
  #4 (permalink)  
Antiguo 09/11/2011, 14:45
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consejo sobre include

La verdad es que sigo con el mismo problema y no quiero usar allow_url_include (El cual no soluciono mi problema) porque lei que es muy inseguro
  #5 (permalink)  
Antiguo 09/11/2011, 14:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Consejo sobre include

No, no tiene nada que ver con allow_url_include, es simplemente definir la ruta hacía el script, es lo mismo que si hicieras:
Código PHP:
Ver original
  1. include 'C:/php/proyecto/archivo.php';

Recuerda que lo que le pasas a include es la ruta física al archivo, no es la URL.

Saludos.
  #6 (permalink)  
Antiguo 09/11/2011, 18:10
Avatar de ColdFusion  
Fecha de Ingreso: octubre-2008
Ubicación: Tocoa, Colon Honduras C.A.
Mensajes: 419
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consejo sobre include

Ok, entendí. :) .. Gracias GatorV!
Utilizé $_SERVER['DOCUMENT_ROOT']

So long!
  #7 (permalink)  
Antiguo 09/11/2011, 18:43
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Consejo sobre include

ColdFusion utiliza mejor las constantes como te dice GATOR. Y allow_url_include es para incluir (include, require (_once) ) archivos remotos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Etiquetas: consejo, include, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:57.