problema con include.

Iniciado por kondrag_X1, 27 Octubre 2015, 22:55 PM

0 Miembros y 1 Visitante están viendo este tema.

kondrag_X1

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:

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 (php) [Seleccionar]

<?php
/**
 * Provee las constantes para conectarse a la base de datos
 * Mysql.
 */
define("HOSTNAME""localhost");// Nombre del host
define("DATABASE""IoTBLE"); // Nombre de la base de datos
define("USERNAME""carmen"); // Nombre del usuario
define("PASSWORD""45kb-Ahu-eop-3dL"); // Nombre de la constraseña
define("SET NAMES"."UTF-8")//Tipo de codificacion de la BD
?>



Database.php
Código (php) [Seleccionar]

<?php
/**
 * Clase que envuelve una instancia de la clase PDO
 * para el manejo de la base de datos
 */

require_once 'webService/mysql_login.php';


class 
Database
{

    
/**
     * Única instancia de la clase
     */
    
private static $db null;

    
/**
     * Instancia de PDO
     */
    
private static $pdo;

    final private function 
__construct()
    {
        try {
            
// Crear nueva conexión PDO
            
self::getDb();
        } catch (
PDOException $e) {
            
// Manejo de excepciones
        
}


    }

    
/**
     * Retorna en la única instancia de la clase
     * @return Database|null
     */
    
public static function getInstance()
    {
        if (
self::$db === null) {
            
self::$db = new self();
        }
        return 
self::$db;
    }

    
/**
     * Crear una nueva conexión PDO basada
     * en los datos de conexión
     * @return PDO Objeto PDO
     */
    
public function getDb()
    {
        if (
self::$pdo == null) {
            
self::$pdo = new PDO(
                
'mysql:dbname=' DATABASE .
                
';host=' HOSTNAME .
                
';port:63343;',
                
USERNAME,
                
PASSWORD,
                array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
            );

            
// Habilitar excepciones
            
self::$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        }

        return 
self::$pdo;
    }

    
/**
     * Evita la clonación del objeto
     */
    
final protected function __clone()
    {
    }

    function 
_destructor()
    {
        
self::$pdo null;
    }
}

?>



arqueta.php
Código (php) [Seleccionar]

require '/home/carmen/public_html/webService/Database.php';

class Arqueta
{
   function __construct()
   {
   }

   /**
    * Retorna en la fila especificada de la tabla 'arqueta'
    *
    * @param $idArqueta Identificador del registro
    * @return array Datos del registro
    */
   public static function GetAll()
   {
       $consulta = "SELECT * FROM arqueta";
       try {
           // Preparar sentencia
           $comando = Database::getInstance()->getDb()->prepare($consulta);
           // Ejecutar sentencia preparada
           $comando->execute();

           return $comando->fetchAll(PDO::FETCH_ASSOC);

       } catch (PDOException $e) {
           return false;
       }
   }

   /**
    * Obtiene los campos de una arqueta con un identificador
    * determinado
    *
    * @param $idArqueta Identificador de la arqueta
    * @return mixed
    */
   public static function GetById($idArqueta)
   {
       // Consulta de la arqueta
       $consulta = "SELECT *
                            FROM arqueta
                            WHERE id = ?";

       try {
           // Preparar sentencia
           $comando = Database::getInstance()->getDb()->prepare($consulta);
           // Ejecutar sentencia preparada
           $comando->execute(array($idArqueta));
           // Capturar primera fila del resultado
           $row = $comando->fetch(PDO::FETCH_ASSOC);
           return $row;

       } catch (PDOException $e) {
           // Aquí puedes clasificar el error dependiendo de la excepción
           // para presentarlo en la respuesta Json
           return -1;
       }
   }

   /**
    * Actualiza un registro de la bases de datos basado
    * en los nuevos valores relacionados con un identificador
    *
    * @param $idArqueta      
    * @param $insert_time    
    * @param $nombre_arqueta
    * @param $direccion_arqueta    
    * @param $uuid_sensor1  
    * @param $uuid_sensor2
    * @param $uuid_sensor3
    */
   public static function Update(
       $idArqueta,
       $insert_time,
       $nombre_arqueta,
       $direccion_arqueta,
       $uuid_sensor1,
       $uuid_sensor2,
       $uuid_sensor3
   )
   {
       // Creando consulta UPDATE
       $consulta = "UPDATE arqueta" .
           " SET insert_time=?, nombre_arqueta=?, direccion_arqueta=?, uuid_sensor1=?, uuid_sensor2=?, uuid_sensor3=? " .
           "WHERE id=?";

       // Preparar la sentencia
       $cmd = Database::getInstance()->getDb()->prepare($consulta);

       // Relacionar y ejecutar la sentencia
       $cmd->execute(array($insert_time, $nombre_arqueta, $fdireccion_arqueta, $uuid_sensor1, $uuid_sensor2, $uuid_sensor3, $idArqueta));

       return $cmd;
   }

   /**
    * Insertar una nueva arqueta
    *
    * @return PDOStatement
    */
   public static function Insertar(
       $insert_time,
       $nombre_arqueta,
       $direccion_arqueta,
       $uuid_sensor1,
       $uuid_sensor2,
       $uuid_sensor3
   )
   {
       // Sentencia INSERT
       $comando = "INSERT INTO arqueta ( " .
           " insert_time," .
           " nombre_arqueta," .
           " direccion_arqueta," .
           " uuid_sensor1," .
           " uuid_sensor2," .
           " uuid_sensor3)" .
           " VALUES( ?,?,?,?,?,? )";

       // Preparar la sentencia
       $sentencia = Database::getInstance()->getDb()->prepare($comando);

       return $sentencia->execute(
           array(
               $insert_time,
               $nombre_arqueta,
               $direccion_arqueta,
               $uuid_sensor1,
               $uuid_sensor2,
               $uuid_sensor3
                   )
       );

   }

   /**
    * Eliminar el registro con el identificador especificado
    *
    * @param $idArqueta identificador de la arqueta
    * @return bool Respuesta de la eliminación
    */
   public static function Delete($idArqueta)
   {
       // Sentencia DELETE
       $comando = "DELETE FROM arqueta WHERE id=?";

       // Preparar la sentencia
       $sentencia = Database::getInstance()->getDb()->prepare($comando);

       return $sentencia->execute(array($idArqueta));
   }
}
?>


Obtener_arquetaById.php
Código (php) [Seleccionar]

<?php
//obtenemos un arqueta por id.
require "Arqueta.php";

if(
$_SERVER['REQUEST_METHOD'] == 'GET')
{
if(isset($_GET['idArqueta']))
{
$idArqueta $_GET['idArqueta'];
$arqueta Informes::getById($idArqueta);

if($arqueta)
{
$datos['estado']  = 1;
$datos['arqueta'] = $arqueta;
print json_encode($datos);
}
else
{
$datos['estado']  = 2;
$datos['mensaje'] = 'Ha ocurrido un error.';
print json_encode($datos);
}
}
else
{
$datos['estado']  = 3;
$datos['mensaje'] = 'Se necesita un identificador.';
print json_encode($datos);
}
}

?>



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

MinusFour

Estas tratando de incluir:


/home/carmen/public_html/webService/webService/mysql_login.php


Cuando en realidad quieres incluir:


/home/carmen/public_html/webService/mysql_login.php


Entonces:

Código (php) [Seleccionar]
require_once 'mysql_login.php';

kondrag_X1

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?


MinusFour

Cita de: 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?



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).

Pablo Videla

Uff esto es un problema enorme en proyectos grandes, yo te recomiendo usar namespaces en PHP, es una solución muy pero muy comoda.