Foros del Web » Programando para Internet » PHP »

Puntero a archivo

Estas en el tema de Puntero a archivo en el foro de PHP en Foros del Web. Buenas señores, hace mas bien poco que empezé con php, cosa de 4 meses, estoy programando ahora en C y Visual Basic mas que nada. ...
  #1 (permalink)  
Antiguo 20/02/2010, 15:54
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Exclamación Puntero a archivo

Buenas señores, hace mas bien poco que empezé con php, cosa de 4 meses, estoy programando ahora en C y Visual Basic mas que nada.

He estado mirando por internet sobre la manipulacion de archivos con php pero de poco me ha servidor y una vez mas recurro a este foro en el que casi siempre que he acudido a el me han ayudado con gran rapidez y eficacia.

Elogios aparte, estoy trabajando en la instalacion de un mini-CMS y necesito escribir los datos que el cliente aporte sobre su base de datos MySQL (Usuario, Contraseña y HOST) para una crear las tablas que contendran todos los datos y posteriormente cargando ese archivo poder acceder a esos datos desde cualquier sitio en el que me sea preciso hacer una consulta a DB.

Como el archivo settings.php ya estara creado antes de que el usuario llegue a instalar el mini-CMS, necesitaria saber como mover el puntero al abrir el archivo con la funcion fopen y abriendo el archivo en modo "a" (append).

Pongamos como ejemplo esto:
Archivo settings.php virgen:

Código PHP:
<?php
$user 
"";
$pass "";
$host  "";
$db "";
?>
Archivo settings.php editado por la instalacion:

Código PHP:
<?php
$user 
"root";
$pass "root";
$host  "localhost";
$db "prueba";
?>
Agradeceria respuestas logicas, nada de algoritmos rebuscados.
Gracias de antemano.

Última edición por bNd170; 20/02/2010 a las 17:20
  #2 (permalink)  
Antiguo 20/02/2010, 16:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Tema movido desde PHP orientado a objetos a PHP
  #3 (permalink)  
Antiguo 20/02/2010, 16:56
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

No haria falta dirigir el puntero a ese archivo, ya que no se si serviria del todo para lo que vos necesitas. Me parece mas sencillo usar sesiones, asi:

Código PHP:
session_start();

# Este es el archivo en el que se reciben
# los datos luego de q el usuario los ingresa

$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
$_SESSION['host'] = $_POST['host'];
$_SESSION['dbName'] = $_POST['dbName'];

# redirigis al archivo donde estan los datos de conexion
header('location:datos.php'); 
Y en tu archivo "datos.php"

Código PHP:
session_start();

$user $_SESSION['user'];
$pass $_SESSION['pass'];
$host $_SESSION['host'];
$dbName $_SESSION['dbName'];

# redireccionas al archivo de instalacion
header('location:install.php'); 
Y finalmente en el archivo de instalacion
Código PHP:
include('datos.php');

# instalas 
Se entendio?
__________________
HV Studio
Diseño y desarrollo web
  #4 (permalink)  
Antiguo 20/02/2010, 17:16
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

Cita:
Iniciado por jackson666 Ver Mensaje
No haria falta dirigir el puntero a ese archivo, ya que no se si serviria del todo para lo que vos necesitas. Me parece mas sencillo usar sesiones, asi:

Código PHP:
session_start();

# Este es el archivo en el que se reciben
# los datos luego de q el usuario los ingresa

$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
$_SESSION['host'] = $_POST['host'];
$_SESSION['dbName'] = $_POST['dbName'];

# redirigis al archivo donde estan los datos de conexion
header('location:datos.php'); 
Y en tu archivo "datos.php"

Código PHP:
session_start();

$user $_SESSION['user'];
$pass $_SESSION['pass'];
$host $_SESSION['host'];
$dbName $_SESSION['dbName'];

# redireccionas al archivo de instalacion
header('location:install.php'); 
Y finalmente en el archivo de instalacion
Código PHP:
include('datos.php');

# instalas 
Se entendio?
Agradezco el intento pero no es lo que busco, la sesion solo guarda datos mientras tenga el usuario su navegador abierto, quiero guardar datos de cara al servidor.
  #5 (permalink)  
Antiguo 20/02/2010, 17:20
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Y como instalarian el CMS con el navegador cerrado? :
Si te hace falta, grabalo en un txt, o crea una tabla (una vez instalado) que contenga esos datos y ya...
__________________
HV Studio
Diseño y desarrollo web
  #6 (permalink)  
Antiguo 20/02/2010, 17:35
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

En caso de crear una table, como accedo a los datos?? Sin tenerlos para acceder a dicha base de datos?

Un txt es vulnerable, cualquiera podria ver los datos.

Alguna sugerencia mas?
  #7 (permalink)  
Antiguo 20/02/2010, 18:53
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Con fopen() y fwrite() no vas a poder, te va a escribir texto como si fuese un txt, aunq lo guardes con extension php...

Si queres podes crear un txt de la forma que te propuse y hacer un htaccess para restringir el acceso.

Si no, no se me ocurre otra solucion.
__________________
HV Studio
Diseño y desarrollo web
  #8 (permalink)  
Antiguo 21/02/2010, 11:31
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

Esque es unicamente texto lo que quiero guardar en dicho archivo, no son binarios ni ningun formato especial, es puro texto.

Y repito, quiero que los datos se guarden permanentemente en un fichero en el servidor
  #9 (permalink)  
Antiguo 21/02/2010, 11:37
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Ok, entonces hacelo con fopen() y fwrite() y hacete un htaccess despues, asi:

Código PHP:
$string "localhost\nroot\ncontrasena";

# Te conviene este modo asi sobreescribis
$fp fopen('archivo.txt','w+');
fwrite($fp,$string);
fclose($fp);

# Para leerlo
$lines file('archivo.txt');
echo 
$lines[0].'<br />';
echo 
$lines[1].'<br />';
echo 
$lines[2].'<br />'
__________________
HV Studio
Diseño y desarrollo web
  #10 (permalink)  
Antiguo 21/02/2010, 11:54
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

Código PHP:
$cont= '<? 
$host
=$_GET['host']; 
$user=$_GET['root']; 
$pass=$_GET['root'];
$dbName=$_GET['dbName']; 
?>'; 
$archivo="archivo.php"; 
$fichero=fopen($archivo,'w+'); 
fwrite($fichero,$cont); 
fclose($fichero);
Era algo asi, salvo por el pequeño detalle que esto, crea el archivo, no lo edita.

Jasckson, agradezco tus ganas de ayudar, pero como bien dije antes, no quiero guardar datos tan comprometedores en un .txt ya que desde el mismo navegador se podrian ver, si los meto en un .php dentro de unas variables, ademas de estar protegidos los datos son mas accesibles haciendo un require_once('settings.php'); y usando las mismas variables en funciones de llamadas a mysql_connect, etc.
  #11 (permalink)  
Antiguo 21/02/2010, 12:01
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Te pido mil disculpas! Cuando yo trate de hacerlo a tu forma, lo hice exactamente igual solo que sin los tags de php! Que idiota!

Disculpa por la perdida de tiempo, y gracias a vos!
__________________
HV Studio
Diseño y desarrollo web
  #12 (permalink)  
Antiguo 21/02/2010, 12:31
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

Cita:
Iniciado por jackson666 Ver Mensaje
Te pido mil disculpas! Cuando yo trate de hacerlo a tu forma, lo hice exactamente igual solo que sin los tags de php! Que idiota!

Disculpa por la perdida de tiempo, y gracias a vos!
Nada tranquilo, la ignorancia no tiene porque ser siempre mala. :D

Aver si algun otro usuario me solventa la duda de si es posible o no mover punteros en php haciendo busqueda en el mismo hasta encontrar un string y escribir justo despues de dicho string.
  #13 (permalink)  
Antiguo 21/02/2010, 13:14
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Ahora que entendi un poco mas, voy a tratar de ayudarte.
Empecemos que en PHP no hay lo que son los punteros en si, solo hay referencias...
Lo que necesitas son expresiones regulares, expresiones PCRE.

Para buscar la posicion de un string en un archivo, podes usar strpos(), para reemplazar podes usar preg_replace()...

No se si sera eso lo que necesitas, pense que tu problema era solamente escribir un php con los datos de conexion...
__________________
HV Studio
Diseño y desarrollo web
  #14 (permalink)  
Antiguo 21/02/2010, 13:16
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

Esto se acerca mas a lo que necesitaba, probaré esta noche y te comento, gracias jackson.
  #15 (permalink)  
Antiguo 21/02/2010, 13:20
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Si me explicas bien que es lo que necesitas, te podria ayudar!
__________________
HV Studio
Diseño y desarrollo web
  #16 (permalink)  
Antiguo 21/02/2010, 14:46
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 10 años, 3 meses
Puntos: 13
Respuesta: Puntero a archivo

Pues hombre, creí haberlo hecho ya.

Paso a exponer sin escatimar detalle mi problema.


La instalacion del mini-CMS se hará desde un formlario simple en HTML, una vez lanzados los datos al servidior, mediante una funcion se comprobarán si son validos, si lo son avanzamos y es en este momento en el que necesito guardar dichos datos en un archivo .php (¿Porque .php? por simples motivos de seguridad) por ejemplo _mysql.php en el cual de serie vendra con codigo implementado el cual expongo a continuación:

Código PHP:
<?php
$host 
"";
$user "";
$pass "";
$dbName "";
?>
Sabiendo esto, necesito que despues de las primeras comillas de cada linea, mi codigo escriba los datos recibidos por el formulario en dicho archivo, quedando como ejemplo algo así:

Código PHP:
<?php
$host 
"localhost";
$user "root";
$pass "root";
$dbName "ejemplo_db";
?>
Una vez instalado el mini-CMS, necesito poder acceder a la informacion de el archivo _mysql.php para hacer las querys necesarias en las funciones de inserccion, borrado, actualizacion y lectura de datos del servidor de MySQL.

Haber si explicado asi puedes entenderme.
Gracias nuevamente.
  #17 (permalink)  
Antiguo 22/02/2010, 08:04
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Claro te entiendo perfectamente, pero a lo que iba desde antes... para que necesitas tener el archivo ya creado, si lo podes crear en el momento?? Mira

1) De tu formulario, recibes los datos de conexion que escribio el usuario

Entonces:

Código PHP:

# Comprobas que los datos de conexion sean verdaderos

$string = '<?php';
$string .= '
$user '.$_POST['user'].';';
$string .= '
$pass '.$_POST['pass'].';';
$string .= '
$host '.$_POST['host'].';';
$string .= '
$dbName '.$_POST['dbName'].';';
$string .= '
?>';

$fp = fopen('file.php', 'w+');
fwrite($fp, $string);
fclose($fp);

# Redireccionas al archivo de conexion
header('location:link.php');
2) En el archivo "link.php" ya tenias incluido el archivo "file.php", asi:

Código PHP:
<?php
include('file.php');
$link mysql_connect($host,$user,$pass);
mysql_select_db($dbName,$link);

#bla bla bla
?>
Se entiende? Ya se que tenias esta idea vos antes, pero pensa, para que querrias reemplazarlo?

Si en algun momento se cambian los datos de conexion, el archivo va a ser sobreescribido (w+)
__________________
HV Studio
Diseño y desarrollo web
  #18 (permalink)  
Antiguo 22/02/2010, 11:15
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 10 años, 7 meses
Puntos: 50
Respuesta: Puntero a archivo

Creo que los punteros y las referencias son lo mismo... (sáquenme de la duda por favor). Por otro lado, sí se puede mover el "manejador" del archivo: fseek. De todos modos, nunca tuve claro si escribir en un archivo n bytes sobreescribe o no los n bytes siguientes en el archivo (según el puntero) o los "desplaza". Supongo (basado en cómo se almacenan en los discos duros los archivos) que los sobreescribe. De todos modos, eso no debe ser una gran molestia cuando tratas de escribir un archivo tan corto. Simplemente lo escribes de una vez y listo, como bien dice Jackson666. Espero que se me haya entendido algo ¡Suerte!
  #19 (permalink)  
Antiguo 22/02/2010, 11:19
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Aclaro tu duda dggluz

Referencias y punteros no es lo mismo: la prueba

Código PHP:
<?php
$a 
5;
$b =& $a;

$b++;

echo 
$a// imprime 6
echo $a// imprime 6

unset($b);

echo 
$a// imprime 6
echo $b// no imprime nada
?>
__________________
HV Studio
Diseño y desarrollo web
  #20 (permalink)  
Antiguo 22/02/2010, 11:25
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 10 años, 7 meses
Puntos: 50
Respuesta: Puntero a archivo

¡Gracias Jackson! (¿y las variables variables no son punteros?)
  #21 (permalink)  
Antiguo 22/02/2010, 11:36
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: Puntero a archivo

Creo que el mismo ejemplo que di antes te contesta (adaptado a variables variables), sino mira:

Código PHP:
<?php

$a 
"hola";
$
$a "mundo";

echo 
$a." ".$hola."<br />"// imprime 'hola mundo'

unset($a);

echo 
$hola// imprime 'mundo'

?>
__________________
HV Studio
Diseño y desarrollo web

Etiquetas: puntero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:09.