Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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:

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.
Título: Re: problema con include.
Publicado por: MinusFour en 27 Octubre 2015, 23:03 PM
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';
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
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).
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.