Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: kondrag_X1 en 27 Octubre 2015, 22:55 pm



Título: problema con include.
Publicado por: kondrag_X1 en 27 Octubre 2015, 22:55 pm
Hola,

antes que nada queria decir que llevaba años sin tocar php y me he topado con un proyecto que he empezado pero me esta dando un fallo en el include y no sé como solventarlo.

EL sistema de directorios es el siguiente:

public_html-->webService --> Database.php
                                      |
                                      --> mysql_login.php
                                      |
                                      --> arqueta(DIR) --> arqueta.php
                                                               |
                                                                --> Obtener_arquetaById.php

cuando compruebo si funciona con:

http://105.5.10.222/~carmen/webService/arqueta/Obtener_arquetaById.php?idArqueta=1

el error es el siguiente:
Código:
Warning: require_once(webService/mysql_login.php) [function.require-once]: failed to open stream: No such file or directory in /home/carmen/public_html/webService/Database.php on line 7

Fatal error: require_once() [function.require]: Failed opening required 'webService/mysql_login.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/carmen/public_html/webService/Database.php on line 7

y los ficheros:

mysql_login.php
Código
  1. <?php
  2. /**
  3.  * Provee las constantes para conectarse a la base de datos
  4.  * Mysql.
  5.  */
  6. define("HOSTNAME", "localhost");// Nombre del host
  7. define("DATABASE", "IoTBLE"); // Nombre de la base de datos
  8. define("USERNAME", "carmen"); // Nombre del usuario
  9. define("PASSWORD", "45kb-Ahu-eop-3dL"); // Nombre de la constraseña
  10. define("SET NAMES"."UTF-8")//Tipo de codificacion de la BD
  11. ?>
  12.  

Database.php
Código
  1. <?php
  2. /**
  3.  * Clase que envuelve una instancia de la clase PDO
  4.  * para el manejo de la base de datos
  5.  */
  6.  
  7. require_once 'webService/mysql_login.php';
  8.  
  9.  
  10. class Database
  11. {
  12.  
  13.    /**
  14.      * Única instancia de la clase
  15.      */
  16.    private static $db = null;
  17.  
  18.    /**
  19.      * Instancia de PDO
  20.      */
  21.    private static $pdo;
  22.  
  23.    final private function __construct()
  24.    {
  25.        try {
  26.            // Crear nueva conexión PDO
  27.            self::getDb();
  28.        } catch (PDOException $e) {
  29.            // Manejo de excepciones
  30.        }
  31.  
  32.  
  33.    }
  34.  
  35.    /**
  36.      * Retorna en la única instancia de la clase
  37.      * @return Database|null
  38.      */
  39.    public static function getInstance()
  40.    {
  41.        if (self::$db === null) {
  42.            self::$db = new self();
  43.        }
  44.        return self::$db;
  45.    }
  46.  
  47.    /**
  48.      * Crear una nueva conexión PDO basada
  49.      * en los datos de conexión
  50.      * @return PDO Objeto PDO
  51.      */
  52.    public function getDb()
  53.    {
  54.        if (self::$pdo == null) {
  55.            self::$pdo = new PDO(
  56.                'mysql:dbname=' . DATABASE .
  57.                ';host=' . HOSTNAME .
  58.                ';port:63343;',
  59.                USERNAME,
  60.                PASSWORD,
  61.                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
  62.            );
  63.  
  64.            // Habilitar excepciones
  65.            self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  66.        }
  67.  
  68.        return self::$pdo;
  69.    }
  70.  
  71.    /**
  72.      * Evita la clonación del objeto
  73.      */
  74.    final protected function __clone()
  75.    {
  76.    }
  77.  
  78.    function _destructor()
  79.    {
  80.        self::$pdo = null;
  81.    }
  82. }
  83.  
  84. ?>
  85.  

arqueta.php
Código
  1. require '/home/carmen/public_html/webService/Database.php';
  2.  
  3. class Arqueta
  4. {
  5.    function __construct()
  6.    {
  7.    }
  8.  
  9.    /**
  10.      * Retorna en la fila especificada de la tabla 'arqueta'
  11.      *
  12.      * @param $idArqueta Identificador del registro
  13.      * @return array Datos del registro
  14.      */
  15.    public static function GetAll()
  16.    {
  17.        $consulta = "SELECT * FROM arqueta";
  18.        try {
  19.            // Preparar sentencia
  20.            $comando = Database::getInstance()->getDb()->prepare($consulta);
  21.            // Ejecutar sentencia preparada
  22.            $comando->execute();
  23.  
  24.            return $comando->fetchAll(PDO::FETCH_ASSOC);
  25.  
  26.        } catch (PDOException $e) {
  27.            return false;
  28.        }
  29.    }
  30.  
  31.    /**
  32.      * Obtiene los campos de una arqueta con un identificador
  33.      * determinado
  34.      *
  35.      * @param $idArqueta Identificador de la arqueta
  36.      * @return mixed
  37.      */
  38.    public static function GetById($idArqueta)
  39.    {
  40.        // Consulta de la arqueta
  41.        $consulta = "SELECT *
  42.                             FROM arqueta
  43.                             WHERE id = ?";
  44.  
  45.        try {
  46.            // Preparar sentencia
  47.            $comando = Database::getInstance()->getDb()->prepare($consulta);
  48.            // Ejecutar sentencia preparada
  49.            $comando->execute(array($idArqueta));
  50.            // Capturar primera fila del resultado
  51.            $row = $comando->fetch(PDO::FETCH_ASSOC);
  52.            return $row;
  53.  
  54.        } catch (PDOException $e) {
  55.            // Aquí puedes clasificar el error dependiendo de la excepción
  56.            // para presentarlo en la respuesta Json
  57.            return -1;
  58.        }
  59.    }
  60.  
  61.    /**
  62.      * Actualiza un registro de la bases de datos basado
  63.      * en los nuevos valores relacionados con un identificador
  64.      *
  65.      * @param $idArqueta      
  66.      * @param $insert_time    
  67.      * @param $nombre_arqueta
  68.      * @param $direccion_arqueta    
  69.      * @param $uuid_sensor1  
  70.      * @param $uuid_sensor2
  71.      * @param $uuid_sensor3
  72.      */
  73.    public static function Update(
  74.        $idArqueta,
  75.        $insert_time,
  76.        $nombre_arqueta,
  77.        $direccion_arqueta,
  78.        $uuid_sensor1,
  79.        $uuid_sensor2,
  80.        $uuid_sensor3
  81.    )
  82.    {
  83.        // Creando consulta UPDATE
  84.        $consulta = "UPDATE arqueta" .
  85.            " SET insert_time=?, nombre_arqueta=?, direccion_arqueta=?, uuid_sensor1=?, uuid_sensor2=?, uuid_sensor3=? " .
  86.            "WHERE id=?";
  87.  
  88.        // Preparar la sentencia
  89.        $cmd = Database::getInstance()->getDb()->prepare($consulta);
  90.  
  91.        // Relacionar y ejecutar la sentencia
  92.        $cmd->execute(array($insert_time, $nombre_arqueta, $fdireccion_arqueta, $uuid_sensor1, $uuid_sensor2, $uuid_sensor3, $idArqueta));
  93.  
  94.        return $cmd;
  95.    }
  96.  
  97.    /**
  98.      * Insertar una nueva arqueta
  99.      *
  100.      * @return PDOStatement
  101.      */
  102.    public static function Insertar(
  103.        $insert_time,
  104.        $nombre_arqueta,
  105.        $direccion_arqueta,
  106.        $uuid_sensor1,
  107.        $uuid_sensor2,
  108.        $uuid_sensor3
  109.    )
  110.    {
  111.        // Sentencia INSERT
  112.        $comando = "INSERT INTO arqueta ( " .
  113.            " insert_time," .
  114.            " nombre_arqueta," .
  115.            " direccion_arqueta," .
  116.            " uuid_sensor1," .
  117.            " uuid_sensor2," .
  118.            " uuid_sensor3)" .
  119.            " VALUES( ?,?,?,?,?,? )";
  120.  
  121.        // Preparar la sentencia
  122.        $sentencia = Database::getInstance()->getDb()->prepare($comando);
  123.  
  124.        return $sentencia->execute(
  125.            array(
  126.                $insert_time,
  127.                $nombre_arqueta,
  128.                $direccion_arqueta,
  129.                $uuid_sensor1,
  130.                $uuid_sensor2,
  131.                $uuid_sensor3
  132.                    )
  133.        );
  134.  
  135.    }
  136.  
  137.    /**
  138.      * Eliminar el registro con el identificador especificado
  139.      *
  140.      * @param $idArqueta identificador de la arqueta
  141.      * @return bool Respuesta de la eliminación
  142.      */
  143.    public static function Delete($idArqueta)
  144.    {
  145.        // Sentencia DELETE
  146.        $comando = "DELETE FROM arqueta WHERE id=?";
  147.  
  148.        // Preparar la sentencia
  149.        $sentencia = Database::getInstance()->getDb()->prepare($comando);
  150.  
  151.        return $sentencia->execute(array($idArqueta));
  152.    }
  153. }
  154. ?>
  155.  

Obtener_arquetaById.php
Código
  1. <?php
  2. //obtenemos un arqueta por id.
  3. require "Arqueta.php";
  4.  
  5. if($_SERVER['REQUEST_METHOD'] == 'GET')
  6. {
  7. if(isset($_GET['idArqueta']))
  8. {
  9. $idArqueta = $_GET['idArqueta'];
  10. $arqueta = Informes::getById($idArqueta);
  11.  
  12. if($arqueta)
  13. {
  14. $datos['estado']  = 1;
  15. $datos['arqueta'] = $arqueta;
  16. print json_encode($datos);
  17. }
  18. else
  19. {
  20. $datos['estado']  = 2;
  21. $datos['mensaje'] = 'Ha ocurrido un error.';
  22. print json_encode($datos);
  23. }
  24. }
  25. else
  26. {
  27. $datos['estado']  = 3;
  28. $datos['mensaje'] = 'Se necesita un identificador.';
  29. print json_encode($datos);
  30. }
  31. }
  32.  
  33. ?>
  34.  

A que se debe el error?
PD: datos de la base de datos, contraseñas son ficticios.


Título: Re: problema con include.
Publicado por: MinusFour en 27 Octubre 2015, 23:03 pm
Estas tratando de incluir:

Código:
/home/carmen/public_html/webService/webService/mysql_login.php

Cuando en realidad quieres incluir:

Código:
/home/carmen/public_html/webService/mysql_login.php

Entonces:

Código
  1. require_once 'mysql_login.php';


Título: Re: problema con include.
Publicado por: kondrag_X1 en 27 Octubre 2015, 23:20 pm
muchísimas gracias gracias llevabas razón ha sido cambiarlo y listo.

pero ahora tengo una duda cual es la diferencia entre require and require_once?



Título: Re: problema con include.
Publicado por: MinusFour en 27 Octubre 2015, 23:25 pm
muchísimas gracias gracias llevabas razón ha sido cambiarlo y listo.

pero ahora tengo una duda cual es la diferencia entre require and require_once?



Require e Include ambos tratan de incluir un archivo las veces que sean necesarias. require_once e include_once solo incluyen el archivo una sola vez, como su nombre lo indica. La diferencia entre Require e Include es que Require lanza un error si falla al incluir el archivo (el script se detiene) mientras que Include solo lanza una advertencia (y el script continua).


Título: Re: problema con include.
Publicado por: Pablo Videla en 28 Octubre 2015, 15:37 pm
Uff esto es un problema enorme en proyectos grandes, yo te recomiendo usar namespaces en PHP, es una solución muy pero muy comoda.