abrir, obtener datos , modificarlos , y crar nuevo archivo

Iniciado por Pirat3net, 13 Mayo 2013, 17:05 PM

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

Pirat3net

bueno tengo un codigo complejo, que resulta un poco engorroso ponerlo todo aqui pero voy a intentar plantear la duda

tengo un codigo que lo que hace es abrir un .html con
fopen()
guarda el contenido en una variable
printeo la variable para ver si va bien
todo perfecto
modifico mi variable con el contenido
la printeo
perfecto tambien
cierro el documento con fclose
cierra perfecto
borro el documento con unlink()
perfecto el documento desaparece
y el fallo aparece cuando intento volver a crear un
documento html con el mismo nombre que el anterior,
uso exactamente el mismo fopen() para crearlo, pero que no hay manera,
no se que puede ser, si se necesita el codigo lo posteo, pero es larguillo


muchas gracias

#!drvy

Pon el código en pastebin y deja el link. Asegúrate de usar los parámetros del fopen indicados como w+ para reescribir el archivo y que si no existe... lo crea.

PD: Cuando pasan esas cosas, se suele poner el error que te da para que te podamos ayudar mejor ...

Saludos

Pirat3net

http://pastebin.com/Kq2FB71x

borre una pequeña parte del codigo para reducirlo un poco, lo que borre funciona perfecto y es irrelevante


aqui los mensajes que procesa $_SESSION['mensajeerror] y $_SESSION['mensaje exito para que veais lo que se ejecuta y no]

error escribiendo 2archivo
su modificacion ha sido enviada satisfactoriamente, gracias por colaborar con InsaneProgrammers.fichero de modificacion abierto correctamente
mensaje

todo el mensaje

finmensaje

Pirat3net

añadir que este codigo esta incluido mediante include()en otro codigo, sin embargo, el codigo padre funciona perfectamente

#!drvy

Estas cerrando $abrirHtml antes de escribir nada en el.

Lineas 45 a 52 del codigo que has dejado en pastebin.

Código (php,2) [Seleccionar]
$abrirHtml = fopen("../articulos/" . $idPost . ".php", "w+");
if (!(fclose($abrirHtml))) {
   $_SESSION['mensajeError'] .= "error cerrando fichero";
}
unlink("../articulos/" . $idPost . ".php");
if($abrirHtml) {
   $_SESSION['mensajeExito'] .= "fichero de modificacion abierto correctamente";
   $arch = fwrite($abrirHtml , $nuevoarchivo);
}


Si te fijas, cierras $abrirHtml y luego intentas escribir sobre el mismo handle. PHP debería retornarte un error del tipo:
Warning: fwrite(): 3 is not a valid stream resource

Saludos

Pirat3net

GRACIAS POR TU RESPUESTA!!

pero ahi esta el tema , como bien dices, cierro  $abrirHtm para poder borrarlo dos lineas mas abajo con unlink (esto lo hago porsiacaso no me deje borrarlo estando abierto)
el tema es que inmediatamente en la siguiente linea vuelvo a abrirlo en el
if ($abrirHtml) {...
o acaso ahi no se abre???
esta claro que no se abre porque me salta el error xD, lo que no se es que hago mal

PD: lo que hago es cerrar el archivo, borrarlo y crear un archivo con el mismo nombre con el nuevo contenido, simplemente porque no se abrir el archivo , dejarlo en blanco y reescribir lo que yo quiera xD, esto se puede hacer??


gracias

#!drvy

Cita de: Pirat3net en 13 Mayo 2013, 22:53 PMel tema es que inmediatamente en la siguiente linea vuelvo a abrirlo en el
if ($abrirHtml) {...
o acaso ahi no se abre???
esta claro que no se abre porque me salta el error xD, lo que no se es que hago mal

Lo que haces ahí, es comprobar si la variable esta declarada. No vuelves a abrir el archivo ni nada de eso. Para ello tienes que volver a ejecutar fopen... es mas, la variable $abrirHtml la sobre escribes con el estado de fclose...


CitarPD: lo que hago es cerrar el archivo, borrarlo y crear un archivo con el mismo nombre con el nuevo contenido, simplemente porque no se abrir el archivo , dejarlo en blanco y reescribir lo que yo quiera xD, esto se puede hacer??

Con fopen y el atributo w+ es precisamente lo que haces. Abrir el archivo (exista o no) y reescribirlo todo dando igual lo que haya habido antes dentro.

Saludos