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
<?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
<?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_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$pdo;
}
/**
* Evita la clonación del objeto
*/
final protected function __clone()
{
}
function _destructor()
{
self::$pdo = null;
}
}
?>
arqueta.php
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
<?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.
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:
require_once 'mysql_login.php';
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?
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).
Uff esto es un problema enorme en proyectos grandes, yo te recomiendo usar namespaces en PHP, es una solución muy pero muy comoda.