Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con require_once

Estas en el tema de Problema con require_once en el foro de PHP en Foros del Web. Tengo la siguiente disposición de carpetas y ficheros en el servidor. httpdocs index.php (require_once('views/html_public.php')) callback.php (require_once('models/config.php') y require_once('models/clases.php')) admin (carpeta) adminapp.php (require_once ('html_admin.php')) controller_admin.php (require_once ...
  #1 (permalink)  
Antiguo 23/09/2013, 14:56
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Problema con require_once

Tengo la siguiente disposición de carpetas y ficheros en el servidor.

httpdocs
  • index.php (require_once('views/html_public.php'))
  • callback.php (require_once('models/config.php') y require_once('models/clases.php'))
  • admin
    (carpeta)
    • adminapp.php (require_once ('html_admin.php'))
    • controller_admin.php (require_once ('../models/clases.php'))
    • html_admin.php (require_once('controller_admin.php'))
  • control
    (carpeta)
    • controller_public.php (require_once('models/clases.php'))
  • views
    (carpeta)
    • html_public.php (require_once('control/controller.php'))
  • models
    (carpeta)
    • clases.php (require_once('config.php') y require_once ('twitteroauth/twitteroauth.php') )
    • config.php
  • twitteroauth
    (carpeta)
    • oauth.php
    • twitteroauth.php

Entonces el problema está en que si un usuario entra en index.php y en el documento clases.php está establecido el require_once de twitteroauth.php así

Código PHP:
Ver original
  1. require_once('twitteroauth/twitteroauth.php');

El usuario no experimentará ningún problema, pero el admin tendrá el siguiente error en pantalla

Cita:
Warning: require_once(twitteroauth/twitteroauth.php): failed to open stream: No such file or directory in /var/www/vhosts/videosfav.com/httpdocs/models/clases.php on line 4 Fatal error: require_once(): Failed opening required 'twitteroauth/twitteroauth.php' (include_path='.:') in /var/www/vhosts/videosfav.com/httpdocs/models/clases.php on line 4
La línea 4 de clases.php es el require_once recién descrito a twitteroauth.


En cambio, si lo soluciono escribiendo en clases.php el siguiente require_once

Cita:
require_once('../twitteroauth/twitteroauth.php');
El admin no experimenta ningún problema pero el usuario sí.

Se que esto se debe a que los require_once del lado del usuario han ido escogiendo como directorio raíz la situación del index.php y que por eso el primer require_once no da problemas, pero para el admin sí.

¿Cómo puedo solucionar esto?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 23/09/2013, 16:03
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problema con require_once

Yo suelo colocar las clases o librerías dentro de una carpeta /lib y el index es el mismo para usuarios normales y para el admin, pero con tu estructura no veo que sea problema que dependiendo de dónde se encuentra el script o del nivel del usuario se carguen los archivos de una u otra carpeta, o bien que se carguen o no dependiendo del usuario o script.
  #3 (permalink)  
Antiguo 23/09/2013, 20:08
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema con require_once

Lo mejor que puedes hacer es...

Código PHP:
Ver original
  1. <?php
  2. require_once($_SERVER['DOCUMENT_ROOT'].'/twitteroauth/twitteroauth.php');

Recuerda que DOCUMENT_ROOT siempre apunta a la raíz del servidor....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 23/09/2013, 20:53
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con require_once

Seguramente tenes establecido en algún lado el nivel del usuario. Podes solucionarlo con un simple if.

Si tenes el nivel de usuario establecido por ejemplo en una variable de sesion:

Código PHP:
<?php
if( $_SESSION'permisos' ] == 'admin' ) {
     require_once( 
'../twitteroauth/twitteroauth.php' );
} else {
     require_once( 
'twitteroauth.php' );
}
?>
  #5 (permalink)  
Antiguo 23/09/2013, 23:28
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Problema con require_once

con lo que dice mariuch debe ser suficiente pero el problema si quieres saber cual es... te diria que la direccion para carpetas te esta dando problemas

directorios Raices:

archivo.php

subdirectorios:

../carpeta/archivo.php

require once solo te llama una ves los archivos y si falla te saldra el error..
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #6 (permalink)  
Antiguo 24/09/2013, 01:59
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Problema con require_once

Muchas gracias a todos por su ayuda. Por orden de aparición probé la solución de Nemutagk y efectivamente se solucionó el problema. Aunque creo que igualmente hubiera servido la solución de Mariuch.

Muchas gracias!!! :D
__________________
Ayúdame a hacerlo por mi mismo.
  #7 (permalink)  
Antiguo 24/09/2013, 17:02
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema con require_once

Cita:
Iniciado por Mariuch Ver Mensaje
Seguramente tenes establecido en algún lado el nivel del usuario. Podes solucionarlo con un simple if.

Si tenes el nivel de usuario establecido por ejemplo en una variable de sesion:

Código PHP:
<?php
if( $_SESSION'permisos' ] == 'admin' ) {
     require_once( 
'../twitteroauth/twitteroauth.php' );
} else {
     require_once( 
'twitteroauth.php' );
}
?>
Solo como dato, una aplicación no puede tener ese comportamiento, si se va a incluir el archivo en todos los roles (invitado, usuario, admin, etc) no tiene porque hacerse ese tipo de comprobación, si da error es porque esta mal la ruta indicada, si van a cambiar los niveles (en el árbol de archivos) dependiendo el rol lo que se hace es apuntar a la raíz del sitio y no tener que estar generando código de mas, que al final solo complica el código original....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 24/09/2013, 18:30
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con require_once

Cita:
Iniciado por Nemutagk Ver Mensaje
Solo como dato, una aplicación no puede tener ese comportamiento, si se va a incluir el archivo en todos los roles (invitado, usuario, admin, etc) no tiene porque hacerse ese tipo de comprobación, si da error es porque esta mal la ruta indicada, si van a cambiar los niveles (en el árbol de archivos) dependiendo el rol lo que se hace es apuntar a la raíz del sitio y no tener que estar generando código de mas, que al final solo complica el código original....
Disculpa pero no estoy de acuerdo con tu afirmación. Esto no es código de más. Son 4 líneas que hacen la comprobación necesaria para rutear como corresponde según si el usuario es administrador o de cualquier otro tipo.

Esta instrucción hace exactamente lo mismo que vos sugeriste a través de un if, y no veo que perjudique o afecte en absolutamente nada el comportamiento de la aplicación.
  #9 (permalink)  
Antiguo 24/09/2013, 18:38
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema con require_once

Cita:
Iniciado por Mariuch Ver Mensaje
Esta instrucción hace exactamente lo mismo que vos sugeriste a través de un if, y no veo que perjudique o afecte en absolutamente nada el comportamiento de la aplicación.
Lo siento, pero discrepo, el código que deje no hace ningún tipo de comprobación por lo cual obtienes un código mas ligero y menos complejo, tu código tendría lógica si hubiera algún otro cambio pero no lo hay, lo único que cambia es el nivel en el árbol de archivos, por lo tanto al apuntar a la raíz del sitio no importa en que nivel se encuentre, el sistema siempre encontrará dicho archivo...

No quiero polemizar si esta bien o mal hecho, los comentarios que dejo es para fomentar mejores practicas, ambas formas se obtienen los mismos resultados y las diferencias en cuanto uso de memoria y procesador (tiempo para procesar dichos comandos) son insignificantes, pero cuando se trata de aplicaciones muy grandes, muy especializadas o con muchísimo trafico donde se debe optimizar lo mas posible es donde realmente se debe tomar en cuenta, en un sito X no tiene mayor importancia...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 24/09/2013, 18:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con require_once

Cita:
Iniciado por Mariuch Ver Mensaje
[...] no veo que perjudique o afecte en absolutamente nada el comportamiento de la aplicación.
Si la funcionalidad correspondiente por nivel/rol de usuario está "encapsulada" a nivel del sistema de archivos, o bien, acceder los mismos recursos es dependiente de la "profundidad" del código en ejecución yo veo algo bien claro: un mal diseño de software, no más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 24/09/2013, 20:12
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con require_once

Cita:
Iniciado por Nemutagk Ver Mensaje
Lo siento, pero discrepo, el código que deje no hace ningún tipo de comprobación por lo cual obtienes un código mas ligero y menos complejo, tu código tendría lógica si hubiera algún otro cambio pero no lo hay, lo único que cambia es el nivel en el árbol de archivos, por lo tanto al apuntar a la raíz del sitio no importa en que nivel se encuentre, el sistema siempre encontrará dicho archivo...

No quiero polemizar si esta bien o mal hecho, los comentarios que dejo es para fomentar mejores practicas, ambas formas se obtienen los mismos resultados y las diferencias en cuanto uso de memoria y procesador (tiempo para procesar dichos comandos) son insignificantes, pero cuando se trata de aplicaciones muy grandes, muy especializadas o con muchísimo trafico donde se debe optimizar lo mas posible es donde realmente se debe tomar en cuenta, en un sito X no tiene mayor importancia...
En todo caso vale aclarar entonces, que lo que estás diciendo es que preferís tu código sobre el mío.
Como bien dijiste, las diferencias en tiempo de procesamiento son insignificantes y los dos códigos hacen exactamente lo mismo. Y te aclaro por si cabe alguna duda, que yo nunca dije que lo tuyo estuviera mal o que fuera peor ni mejor que lo mío. Simplemente compartí una manera de resolver el problema.

Por suerte hay muchas formas de programar la misma cosa y todas pueden ser válidas.

Que tu código sea más corto no significa que el mío esté equivocado. Me parece que cuando los códigos son correctos, acá no se trata de polemizar y enredarse en cuestiones personales. Cosas como estas quitan las ganas de participar en el foro, que está hecho justamente para compartir opiniones y ayudar a los demás y no para corregir hasta el cansancio cosas que no lo necesitan.
  #12 (permalink)  
Antiguo 25/09/2013, 09:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con require_once

Cita:
Iniciado por Mariuch Ver Mensaje
Por suerte hay muchas formas de programar la misma cosa y todas pueden ser válidas.
Bien dicho, que sea válido no implica que sea correcto, eso te lo enseñan en clases de filosofía.

La única diferencia entre el código de Nemutagk y el tuyo es simple: tu código es redundante, y el de Nemutagk no.

¿Qué pasaría si cambia la estructura de archivos?

Entonces tendrías que modificar tu código, mientras que Nemutagk no.

¿Notas la sutil diferencia?

Cita:
Iniciado por Mariuch Ver Mensaje
Cosas como estas quitan las ganas de participar en el foro, que está hecho justamente para compartir opiniones y ayudar a los demás y no para corregir hasta el cansancio cosas que no lo necesitan.
Calma, ¿si sabes que estamos en un foro de discusión?

No debes tomarte nada a nivel personal, el que se enoja pierde.

Estoy de acuerdo que para gustos hay colores, pero las buenas practicas son para todos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 25/09/2013, 09:17
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con require_once

Cita:
Iniciado por pateketrueke Ver Mensaje
Bien dicho, que sea válido no implica que sea correcto, eso te lo enseñan en clases de filosofía.

La única diferencia entre el código de Nemutagk y el tuyo es simple: tu código es redundante, y el de Nemutagk no.

¿Qué pasaría si cambia la estructura de archivos?

Entonces tendrías que modificar tu código, mientras que Nemutagk no.

¿Notas la sutil diferencia?



Calma, ¿si sabes que estamos en un foro de discusión?

No debes tomarte nada a nivel personal, el que se enoja pierde.

Estoy de acuerdo que para gustos hay colores, pero las buenas practicas son para todos.
La diferencia entre Nemutagk y yo, es que yo jamás dije que su código fuera malo o peor que el mío.
Yo simplemente sugerí una solución al problema que funciona correctamente más allá de que si en el futuro se cambia la estructura de archivos habría que cambiarlo.

La crítica a mi planteo está basada en conjeturas a futuro que de momento no tienen razón de ser. Y no me parece acertado decir que mi código es incorrecto porque funciona bien.

Y lo que irrita, más que la correción en sí, es que siempre hay más gente dispuesta a corregir una respuesta que a solucionar un problema.

Saludos.
  #14 (permalink)  
Antiguo 25/09/2013, 09:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con require_once

Cita:
Y lo que irrita, más que la correción en sí, es que siempre hay más gente dispuesta a corregir una respuesta que a solucionar un problema.
Si el "solucionar" un problema implica dar la respuesta más rápida que puedas formular, sin pensar en las consecuencias, ni sugerir buenas practicas, ¿entonces que tiene de solución?

Ya, en serio, he releído la respuesta de Nemutagk y no la veo mal, discrepar no es malo, y en ningún momento te está atacando.

Una solución verdadera al problema actual sería "por favor, rediseña la manera en que cargas tus scripts por tal y tal razón", en lugar de brindar un código que solo parcha el problema, al menos así lo hubiera hecho yo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 25/09/2013, 10:05
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con require_once

Cita:
Iniciado por pateketrueke Ver Mensaje
Si el "solucionar" un problema implica dar la respuesta más rápida que puedas formular, sin pensar en las consecuencias, ni sugerir buenas practicas, ¿entonces que tiene de solución?

Ya, en serio, he releído la respuesta de Nemutagk y no la veo mal, discrepar no es malo, y en ningún momento te está atacando.

Una solución verdadera al problema actual sería "por favor, rediseña la manera en que cargas tus scripts por tal y tal razón", en lugar de brindar un código que solo parcha el problema, al menos así lo hubiera hecho yo.
Yo no lo dije únicamente por esta publicación. Estoy hablando en general. Y en cuanto a tu respuesta, yo doy la mejor solución que se me ocurre planteada de la mejor manera que puedo. Disculpame por no ser tan grosa como vos...

Etiquetas: html
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 08:18.