Comunidad de diseño web y desarrollo en internet online

Joomla, include(), sesiones, PHP, AYUDA!!!

Citar            
MensajeEscrito el 02 Mar 2012 01:32 am
Hola a todos, espero me puedan ayudar.

Bien primero comienzo por explicar que estoy tratando de insertar información en la tabla jos_content de joomla, con el siguiente script que se llama inserta.php

Código :

// Le decimos que estamos en Joomla
define('_JEXEC', 1);

// Definimos la constante de directorio actual y el separador de directorios (windows server: \ y linux server: /)
define('JPATH_BASE', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);

// Cargamos los ficheros de framework de Joomla 1.5, y las definiciones de constantes (IMPORTANTE AMBAS LÍNEAS)
require_once(JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once(JPATH_BASE . DS . 'includes' . DS . 'framework.php');

// Iniciamos nuestra aplicación (site: frontend)
$mainframe = &JFactory::getApplication('site');

$title = $titulo_noticia;
$alias = $titulo_noticia;
$introtext = $cuerpo_noticia;
$fulltext = $cuerpo_noticia;
$state = 1;
$sectionid = 6;
$catid = 36;
$created = date("Y-m-d h:i:s");
$created_by = 62;

$object->title = $title;
$object->alias = $alias;
$object->introtext = $introtext;
$object->fulltext = $fulltext ;
$object->state = $state;
$object->sectionid = $sectionid;
$object->catid = $catid;
$object->created = $created;
$object->created_by = $created_by;

$table = '#__content';

$db = &JFactory::getDBO();

$db->insertObject($table, $object, 'id');

echo $object->id;

echo " Se insertó noticia correctamente. <br>";

esto funciona de maravillas.

Ahora bien, en otro archivo tengo una función que me ejecuta según el valor de una variable varios include(), cada uno de estos include() me llama a un archivo de estos que me inserta los datos en la tabla de joomla.
Pero como esta función esta dentro de un ciclo puede suceder que se ejecuten uno o todos los inlcude(), cada include() me inserta datos en un sitio web diferente.

Código :

switch($myvariable)
            {
               case 1:
                  include("../sitioweb1/inserta.php");
                  break;
               case 2:
                    include("../sitioweb2/inserta.php");                 
      break;
               case 3:
                  include("../sitioweb3/inserta.php");
                  break;
            }

El problema esta dado que al pasar la primera vez por ejemplo: por el case1 el inserta bien los datos, pero cuando la variable toma el valor 2 al insertar me inserta en el primer sitio no en el segundo, asi sucede con el valor 3, se inserta 3 veces en el primer sitio, es como si se quedara alguna sesión abierta en cache del primero.

Esto sucede solo con las rutas relativas.

Si le pongo rutas absolutas funciona bien aquí lo muestro:

Código :

switch($myvariable)
            {
               case 1:
                  include("http://misitioweb1.com/inserta.php");
                  break;
               case 2:
                include("http://misitioweb2.com/inserta.php"); 
               break;
               case 3:
                  include("http://misitioweb3.com/inserta.php");
                  break;
            }

Pero esto es un problema porque hay que activar en el servidor la opción que permita que el include() ejecute direcciones absolutas y esto no es aconsejable.

Mi pregunta es: ¿como puedo solucionar este problema?

Aclarar que estos tres sitios se encuentran dentro de un mismo server, por eso puedo llamar desde dentro de uno la unit de inserta.php que se encuentra en otro.

Actualmente he realizado varios cambios en el código, por ejemplo la ruta del include la puse así:
include("C:\\xampp\htdocs\sitioweb\inserta.php");

es una ruta absoluta a nivel de directorios, le hice un echo a la variable del switch para ver cuando cambiara de valor y si pasaba por la ruta y me devuelve el siguiente error:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\sitioweb\inserta.php:65) in C:\xampp\htdocs\sitioweb\libraries\joomla\session\session.php on line 423

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\sitioweb\inserta.php:65) in C:\xampp\htdocs\sitioweb\libraries\joomla\session\session.php on line 423

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sitioweb\inserta.php:65) in C:\xampp\htdocs\sitioweb\libraries\joomla\session\session.php on line 426


estuve buscando en la red y todos hablan de espacios y caracteres especiales y mis script no tienen nada de eso, el problema me parece a mi que esta en el header que tienen los archivos inserta.php que se envian 3 veces, alguien sabe como solucionar esto???

este es el header que tiene cada archivo inserta.php

Código :

define('_JEXEC', 1);
define('JPATH_BASE', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);
require_once(JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once(JPATH_BASE . DS . 'includes' . DS . 'framework.php');
$mainframe = &JFactory::getApplication('site');


alguna idea...???

Por rgraptor00

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Mar 2012 04:26 am
el problema es que usas "include" sabes la diferencia entre include y require??
:) pocos lo sabemos, es una explicacion algo larga, y es tarde , bueno pruba con esta solucion universal , pero poco eficiente

Código PHP :

switch($myvariable)
            {
               case 1:
                  include(dirname(__FILE__)."/../sitioweb1/inserta.php");
                  break;
               case 2:
                    include(dirname(__FILE__)."/../sitioweb2/inserta.php");                 
      break;
               case 3:
                  include(dirname(__FILE__)."/../sitioweb3/inserta.php");
                  break;
            }

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 Mar 2012 03:07 pm
require() es idéntico a include() excepto que en caso de fallo producirá un error fatal de nivel E_COMPILE_ERROR. En otras palabras, éste detiene el script mientras que include() sólo emitirá una advertencia (E_WARNING) lo cual permite continuar el script.

Creeme ya e intentado de muchas formas, el problema no es la ruta, el problema me parece que es le header que se carga cada vez que se llama a un inserta.php, porque cada uno tiene el mismo header, sabes como puedo manipular la session que supuestamente se crea al enviar un header dentro de joomla???

Por rgraptor00

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2012 08:16 pm
sip y no a la vez :),mira
supongamos estos 3 archivos
/carpeta/funciones/contar.php
/carpeta/funciones/sumar.php
//index.php

que cuando haces un "require" digamos tienes en
/carpeta/funciones/contar.php

Código PHP :

//contar.php
require('sumar.php');


y luego tienes en index.php
/index.php

Código PHP :

//contar.php
include ('/carpeta/funciones/contar.php');

todo marcha bien sin problemas ahora haremos un ligero cambio
----------------------------------
cambiamos require por include
/carpeta/funciones/contar.php

Código PHP :

//contar.php
include('sumar.php');

una vez echo eso probamos en el
/index.php
y wala , un error del tipo warning "archivo no encontrado"

eso se debe a que cuando se usa include en un archivo le indicas que ese no se cargara hasta que el parser termine de parsear los demas archivos que se relacionan con el script
cuando usas require le dices al parser que cargue el archivo en cuestion , y no esperar hasta el final del parseo del script,
espero haberme echo entender,

lo de sessiones no es por esto??

Código PHP :


echo $object->id;

echo " Se insertó noticia correctamente. <br>";

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.