New question

Question:

 
  0  
 
Date: 12-09-2019 22:51:47 (In Spanish)

Problemas al requerir mi archivo con require_once en mi servidor goddady, estoy usando MVC[Resolved]

Hola, subí mi proyecto a mi servidor en godaddady y no funciona no muestra nada, pero cuando estoy en el servidor local si funciona sin problemas mi codigo. La codificación esta echa implementando MVC, he detectado que el problema esta en ala hora de evaluar las condicionales if, pasa algo en el servidor remoto que no me muestra los archivos requeridos con require_once pero en local si los muestra y si evalua la condicion if , espero puedan orientarme la vdd no veo cual es el error.
Esta esta estructura de mi proyecto en el servidor local comparto link de la imagen ya que no se como agregar imágenes aquí una disculpa, esta es la imagen de la estructura de mi proyecto Estructura en Servidor Local y esta es la estructura en mi servidor remoto Estructura Servidor Remoto vació el contenido en la carpera public_html , por el momento solo estoy trabajando con los controladores para solo mostrar las vistas no uso bd por ahora.

Este es el código de mi index.php, el cual controla todo pero no muestra nada en el servidor de godaddy y en local si
funciona.., pero en el servidor es como si no evaluara las condiciones if para mostrar el controlador requerido
  
<?php
require_once 'autoload.php';
require_once 'config/parameters.php';
require_once 'helpers/utils.php';
require_once 'views/layout/header.php';


function show_error(){
  $error = new errorController();
  $error->index();
}

if (isset($_GET['controller'])) {
  // code...
  $nombre_controlador=$_GET['controller'].'Controller';

}elseif(!isset($_GET['controller']) && !isset($_GET['action'])){
  // code...
  $nombre_controlador=controller_default;
}else {
  require_once 'views/layout/header.php';
  show_error();
    exit;
}



if (class_exists($nombre_controlador)) {
  // a este codigo sele conoce como controlladpor frontal

  $controlador = new $nombre_controlador();



        if (isset($_GET['action']) && method_exists($controlador,$_GET['action'])) {
          // code...
          $action=$_GET['action'];
          $controlador->$action();

          }elseif(!isset($_GET['controller']) && !isset($_GET['action'])){
              $action_default=action_default;
              $controlador->$action_default();
        }else {
          show_error();
        }




}else {

  show_error();
}
require_once 'views/layout/footer.php';

 


Este es el codigo de mi autoload.
<?php

  function controllers_autoload($className){// cargando la sclasees
    require_once 'controllers/'.$className.'.php';
  }


  spl_autoload_register('controllers_autoload');// se pasa como parametro la clase que va cargar, se aplica aun directorios



Por otra parte cuando elimino las condiciones if, para que mi codigo este de forma estático, el código si me funciona de esta manera en el servidor remoto de godaddy, pero no es optimo ya que de esta forma no me permite que mi pagina sea dinámica cuando pongo de esta manera el código carga todo sin problemas:

<?php
require_once "autoload.php";
require_once "config/parameters.php";
require_once "helpers/utils.php";
require_once "views/layout/header.php";


require_once 'views/contacto/contacto.php';

//
// if(isset($_GET["controller"])){
//   // code...
//   $nombre_controlador=$_GET["controller"]."Controller";
//
// }else if(!isset($_GET["controller"]) && !isset($_GET["action"])){
//   // code...
//   $nombre_controlador=controller_default;
// }else {
//   require_once "views/layout/header.php";
//   show_error();
//     exit;
// }
//
//
//
// if(class_exists($nombre_controlador)){
//   // a este codigo sele conoce como controlladpor frontal
//
//   $controlador = new $nombre_controlador();
//
//
//
//         if(isset($_GET["action"]) && method_exists($controlador,$_GET["action"])){
//           // code...
//           $action=$_GET["action"];
//           $controlador->$action();
//
//           }else if(!isset($_GET["controller"]) && !isset($_GET["action"])){
//             $action_default=action_default;
//             $controlador->$action_default();
//         }else{
//           show_error();
//         }
//
//
//
//
// }else{
//
//   show_error();
// }
// function show_error(){
//   $error = new errorController();
//   $error->index();
// }
require_once "views/layout/footer.php";




Este es el codigo de mis Constantes.
<?php

define("base_url","http://".$_SERVER["SERVER_NAME"]."/");
define("controller_default","homeController");
define("action_default","index");


Este es el codigo de mi Controllador home que es el controlador por defecto que se debe ejecutar, están en la carpeta Controllers.

<?php

class homeController{


public function index(){
    require_once 'views/home/home.php';
}


}



Este es el codigo de mi Controllador contacto que es el controlador por defecto que se debe ejecutar, están en la carpeta Controllers, he probado poniendo require_once __Dir__.'/views/contacto/contacto.php'; peor me marca error en esta parte, como lo mencione en mi servidor local funciona sin problemas pero el problema es cuando subo mi proyecto al servidor es como si no encontrar los archivos amostrar y si inspecciono mi pagina no carga el body solo el head espero me puedan ayudar saludos estoy empezando en esto de php.
<?php

class contactoController{
  public function index(){
    require_once 'views/contacto/contacto.php';
  }
}



Este es el codigo de mi archivo .htaccess
<IfModule mod_rewrite.c>

#activar el rewrite

RewriteEngine on
ErrorDocument 404 http://www.mg-solutions.com/error/

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(.*)/(.*) index.php?controller=$1&action=$2
</IfModule>

Tags: PHP - PHP Advanced Votes: 0 - Answers: 3 - Views: 11 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 13-09-2019 11:35:10 El principal problema que da segun la configuracion es que ocupas la constante:
    __DIR__
    y esta te regresa diferente informacion depende donde fue llamada, en tu caso por ejemplo:
    si la llamas, en
    includes/archivo.php
    y en:
    index.php
    La respuesta sera diferente, por ello en algunos te servira y en otro no.
    Si es mejor que definas tu propia constante (en archivo de variables/constante o configuracion) y de ahi "incluyes" los archivos con base a esa direccion, ejemplo:
    define("direccionDeControl",__DIR__);
    Suponiendo que tu archivo de constantes esta en la carpeta raiz.
    Asi donde llames seria

    include_once('rutarchivo/archivovariables.php');
    require_once direccionDeControl.'views/contacto/contacto.php';

    O algo similar, ya que tu problema es que la misma constante, al ser llamada de diferentes lugares toma diferentes valores y esto hace que no "encuentre" los lugares.

    Ejemplo:

    __DIR__ puede tomar el valor de:

    httpsdocs
    httpsdocs/includes
    httpsdocs/core/
    httpsdocs/core/includes
    httpsdocs/autoupload

    Etcétera...

    Saludos Terricola.

    Stryfe™
      Votes: 0 - Link answer
     
  •  
      0  
     
    Date: 13-09-2019 21:10:03 Hola, muchas gracias por ayudar, he descubierto que la parte que no funciona en el servidor remoto es donde esta el archivo index.php de mi proyecto, es como si no existiera las condiciones para mandar a requerir mi controlador con require_once, pero esto solo sucede en el servidor remoto en el local funciona de maravilla, he echo pruebas al poner los archivos de forma directa sin los if y si me los muestra con require_once pero cuando dejo las condiciones no muestra nada.   Votes: 0 - Link answer
     
  • Date: 18-09-2019 19:10:21 Puede ser que el servidor no utilice htaccess. Checa.   Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com