Foros del Web » Programando para Internet » PHP »

Instalador a base de fopen() fwrite()

Estas en el tema de Instalador a base de fopen() fwrite() en el foro de PHP en Foros del Web. Wooolas Miren, cree un tagboard y ahora lo que quiero es crearle un instalador , entonces me cree un script que deberia revisar si todos ...
  #1 (permalink)  
Antiguo 13/01/2003, 11:32
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
Exclamación Instalador a base de fopen() fwrite()

Wooolas

Miren, cree un tagboard y ahora lo que quiero es crearle un instalador , entonces me cree un script que deberia revisar si todos los campos del formulario se rellenaron, luego comprobar si el archivo config.php existia dentro del path enviado en el form, luego arbrirlo, escribirlo y crear las tablas, pero no me funciona lo de escribir el archivo.

miren el codigo esta aquí codigo del instalador


si alguien lo revisar y me dijera que es lo que esta mal seria de gran ayuda



Gracias de antemano
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #2 (permalink)  
Antiguo 13/01/2003, 11:41
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años
Puntos: 5
si indicases el error seriamas sencillo, veo que en el fwirte le indicas 5 parametros, cosa k no admite :P ya que son dos los que le debes de pasar, asi que revisa eso.
__________________
Usuario registrado de Linux #288725
  #3 (permalink)  
Antiguo 13/01/2003, 11:46
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
Bueno el error que me da es que.......... NO ME DA ERROR simplemete no me escribe el archivo y no me crea la tabla


A ver epplestun me dices que el fwrite no acepta 5 parametros y entonces como hago para escribir esos 5 parametros

es que la idea es escribir en ese archivo los datos necesarios para conectarse a la bd del usuarios y asi poner en el resto del code del tagboard solo un include("config.php"); y asi conectarse mas facilmente a la BD.


ME das alguna otra idea de como hacerlo?
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #4 (permalink)  
Antiguo 13/01/2003, 12:01
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años
Puntos: 5
Debes concatenar, para ello se usa el . es decir
Código PHP:

fwrite
($file,$dato1.$dato2.$dato3.$dat4); 
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 13/01/2003, 12:09
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
Pero al concatenar los datos no se escribiran juntos en el archivo y no como quiero

que se escriban como variables para poder utilizarlas en la conexion a la BD

osea que se escriban asi:

$host="Localhost";
o por lo menos asi

$conex=mysql_connect("localhost"....

y eso
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #6 (permalink)  
Antiguo 13/01/2003, 13:23
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años
Puntos: 5
Antes de escribir en el archivo crea una varaible que contenga los datos del archivo y lo metes, es lo mas sencillo
__________________
Usuario registrado de Linux #288725
  #7 (permalink)  
Antiguo 13/01/2003, 13:35
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
te refieres a tenre una variable que tenga todas las otras
Código PHP:
$variable=$h;
$variable.=$u;
$variable.=$p;
$variable.=$d;
$variable.=$i;
$variable.=$pa;

fwrite($fp,$varible); 
eso quieres decir o como

para que en el otro archivo se escriban las variables necesarias para la conexion

el ootro archivo debe llavar algo o como se escribiran las variables, de que forma quedan escritas.


*Gracias de antemano
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #8 (permalink)  
Antiguo 13/01/2003, 14:45
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Tu lo que quieres es tener un config.php que tenga este formato:
Código PHP:
<?php
$var1
='valor';
$var2='valor';
$var3='valor';
?>
Entonces en el fwrite() debes pasar la cadena de texto que quieres escribir. En tu caso algo como:
Código PHP:
$cadena="<?phpn";
$cadena.="
$var1='valor';n";
$cadena.="
$var2='valor';n";
$cadena.="
$var3='valor';n";
$cadena.="
?>\n";
fwrite($fp,$cadena);
Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 13/01/2003, 17:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Esto que significa?:
$cadena.="$var1='valor';n";

un eval() ya aplicado ?¿ o no tiene nada q ver? ...

Un saludo,
  #10 (permalink)  
Antiguo 13/01/2003, 18:19
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
Gracias josemi ahora lo probare
seria entonces algo asi
Código PHP:
$h="localhost";
$p="password";
$u="user";
$d="db";

$v="$host=$h";
$v.="$pass=$p";
$v.="$user=$u";
$v.="$db=$d";
$v.="$conex=mysql_connect($host,$user,$pass);";
$v.="mysql_select_db($db,$conex);";

$fp=fopen("archivo","w");
fwrite($fp,$v);
fclose($fp); 

Esta bien eso?
se supone que esto entonces estari bien no?install.phps
gracias de antemano
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 13/01/2003 a las 18:39
  #11 (permalink)  
Antiguo 13/01/2003, 20:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
El secreto de todo esto parece estar en el uso de las comillas simples (que no evalua nada PHP dentro de comillas simples) y del salto de linea como codigo ASCII (13) ...

Sería:

Código PHP:
<?
$h
="localhost";
$p="password";
$u="user";
$d="db";

$v  ='<?php'.chr(13);
$v .='$host="'.$h.'";'.chr(13);
$v .='$user="'.$u.'";'.chr(13);
$v .='$pass="'.$p.'";'.chr(13);
$v .='$db="'.$d.'";'.chr(13).chr(13);
$v .='$conex=mysql_connect($host,$user,$pass);'.chr(13);
$v .='mysql_select_db($db,$conex);'.chr(13);
$v .='?>';

$fp=fopen("config.inc.php","w");
fwrite($fp,$v);
fclose($fp);
?>
Date cuenta que donde hay q presentar una $variable ... dicho nombre (codigo PHP de vairiable) está entrecomillado simple '$variable' .. con esto PHP no entra a ese string a evaluarlo e intentar asignarle valor a esa posible variable .. Las variables que necesites usar .. concatenalas como de constumbre ...

El salto de linea (codigo ASCII 13) usado es el equivalente a \n .. si tubieras problemas con el \n y necesitas \r o \n\r .. busca el ascii correspondiente a \r .

Un saludo,
  #12 (permalink)  
Antiguo 13/01/2003, 22:29
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
Pregunta

Aver , hice lo que me dijiste pero......... no funciona osea no escribe el archivo ni crea las tablas........ por que sera?

Lo peor es que no da error ni nada, simplemente no funciona ni muestra nada en pantalla.


Por que sera??? alguien me puede decir que hacer en este caso


aqui les dejo el codigo intall.phps

no lo pego aqui por que creo que es mucho o mejor lo pongo aqui?


bueno gracias de antemano


Chau!
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #13 (permalink)  
Antiguo 13/01/2003, 22:50
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 11 meses
Puntos: 2
hola intenta esto......

esto
Código PHP:
if($fp=true
cambialo por esto
Código PHP:
if($fp
y si no en vez de fwrite() usa fputs()...... podria ser.

o sino prueba asi..... esto.

Código PHP:
$v  ="<?phpn";
$v .="
$host="".$h."\"\n";
$v .="$user=\"".$u."\"\n";
$v .="$pass=\"".$p."\"\n";
$v .="$db=\"".$d."\"\n";
$v .="$conex=mysql_connect($host,$user,$pass);";
$v .="mysql_select_db($db,$conex);\n";
$v .="?>";
o asi

Código PHP:
$v = <<< html
<?php
$host
="$h";
$user="$u";
$pass="$p";
$db="$d";
$conex=mysql_connect($host,$user,$pass);
mysql_select_db($db,$conex);
?>
html;
prueba-............. varias ideas.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #14 (permalink)  
Antiguo 13/01/2003, 23:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
El código que puse estrictamente en su contexto (tal cual está) funciona (yo lo probé tal cual está) ..

Integrado en tu resto de script .. no se .. no lo he mirado

pero ese if ($fp=true) no es correcto .. en comparación es == dobre igual if ($fp==true) .. pero en este caso sobra con if($fp) .. mas no he mirado.

Prueba el codigo q puse así como está para q veas q funciona.

Un saludo,
  #15 (permalink)  
Antiguo 14/01/2003, 01:02
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
ok, deberia funcionar pero no lo hace.


pero yo tengo esto

Código PHP:
if(file_exists($HTTP_POST_VARS["path"],"/config.php"))
        {
        
$fp=fopen($HTTP_POST_VARS["path"],"/config.php","w");
           if(
$fp).......................... 

y se supone que en el form enviar la url completa de la carpeta donde se encuentra este archivo (config.php) sera eso que esta mal?

o que

por fa mirar el code y decirme que pasa por que no trabaja

install


gracias de antemano
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #16 (permalink)  
Antiguo 14/01/2003, 15:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

En path no debes pasar la URL (http://loquesea) sino el path (/carpeta/loquesea/ en unix o c:/carpeta/loque sea en Windows). Puedes pasarle solo el path desde la raiz del sitio y luego usar $DOCUMENT_ROOT para concatenarlo y obtener el path completo.

Cluster, lo del ;n es que los ordenadores no me comprenden y manipulan lo que yo escribo. Era \n.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #17 (permalink)  
Antiguo 15/01/2003, 00:33
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 11 meses
Puntos: 2
capaz ke sea ese el error..........
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #18 (permalink)  
Antiguo 15/01/2003, 22:54
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
LO e intentado de las 2 formas con http:// y con el path de las carpetas dentro del server /carpeta/archivo o ../carpeta/archivoç

Y con niguna me escribe el archivo ni me crea las tablas
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #19 (permalink)  
Antiguo 20/03/2003, 04:47
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años
Puntos: 5
Yo tb tengo problemas a la hora de escrbir en un archivo de texto.

En realidad lo que quiero es guardar un array en un fichero de texto. Mi función que hace eso es la siguiente:

Código PHP:
function array2Fichero (&$array$nombreFichero) {
    
print_r($array);
    
$pf fopen($nombreFichero,'w+');
    
$cadenaArray "array(";
    while(list(
$key,$value) = each($array)) { 
        
$cadenaArray $cadenaArray."\"".trim($key)."\" => ".$value.",";
    } 
    
$cadenaArray substr($cadenaArray,0,strlen($cadenaArray)-1);
    
$cadenaArray $cadenaArray.");";
    
fwrite($pf,$cadenaArray);
    
fclose($pf);

Si el fichero no existe, me lo crea nuevo y me inserta perfectamente $cadenaArray que contiene el código php correspondiente a mi array, pero si el fichero ya existe lo que quiero es que me lo abra y machaque el valor que contenía con mi nueva cadena (mi nuevo array). Pero no lo hace .. no llega a escribir en el fichero... No se modifica ni siquiera la fecha de modificación de mi txt y siempre contiene el valor antiguo.

He comprobado que el array que quiero insertar es el correcto y no es siempre el mismo ... Lo he llegado a imprimir por pantalla y todo correcto en ese aspecto, así que los parámetros los paso correctamente.

He probado con

$pf = fopen($nombreFichero,'w');

y con

$pf = fopen($nombreFichero,'w+');

sin obtener ninguna diferencia.

No uso

$pf = fopen($nombreFichero,'a');

porque quiero sobreescribir el contenido.

¿alguna idea?

Gracias

Un beso
  #20 (permalink)  
Antiguo 20/03/2003, 05:07
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años
Puntos: 5
Vaya.. a lo tonto.. lo he solucionado yo sola...


Era una cuestión de permisos en el servidor . El archivo en concreto no tenía permisos de escritura, entonces al ya existir y no tener esos permisos pues no escribía sobre él.

Entonces mi pregunta es... en el caso de que no exista el fichero, te lo crea automáticamente pero.. cómo puedo yo además de que me lo cree que me ponga permisos de escritura para la siguiente vez que vaya a sobreescribir sobre él??

Por cierto, el error lo he descubierto activando la línea

Código PHP:
error_reporting(2047); 
Eso fuerza a mostrarte no sólo errores sino tb warnings.. lo digo porque me pareció leer que alguien de este post no le mostraba errores ni nada.

Un beso
  #21 (permalink)  
Antiguo 20/03/2003, 09:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En Lycos por ejemplo tienen desactivados todo mensaje de error de PHP ..

No sé ahora el código de error de nº 2047 .. pero usando las constantes de PHP .. sería equivalente a:

Código PHP:
error_reporting(E_ALL); 
E_ALL ..= Mostrar todos los errores: Warning, Fatal error y Notices ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 21:18.