Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

fwrite pone el texto al principio del archivo

Estas en el tema de fwrite pone el texto al principio del archivo en el foro de WordPress en Foros del Web. Hola, Bueno tengo un problema resulta que quiero modificar un archivo mediante un form y en el xampp (localhost) no tengo problemas pero al subirlo ...
  #1 (permalink)  
Antiguo 08/03/2013, 12:16
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
fwrite pone el texto al principio del archivo

Hola,
Bueno tengo un problema resulta que quiero modificar un archivo mediante un form y en el xampp (localhost) no tengo problemas pero al subirlo al hosting para probarlo me encuentro que el texto aparece en el principio del archivo.
Comento antes que nada que ese archivo una vez echo un request a cualquier pagina es el segundo archivo que se llama y define constans, etc...
Lo comento porque pienso que puede estar hay el problema.
Código PHP:
    public function wpvl_write_function$wpvl_text = array() ){ 
        if( !
file_exists$this->conf_backup ) ){ 
            
copy$this->conf_original$this->conf_backup ); 
            
$conf file$this->conf_original );
            
$i 0;
            foreach ( 
$conf as $line => $text ) {
                if ( 
substr$text8) === 'WP_DEBUG' ){
                    
$x $i;
                    
$conf[$line] = '';
                    break;
                }
                
$i++;    
            }
            
array_splice$conf$x0$wpvl_text );
            
$new_conf fopen$this->conf_original'w' );
            foreach( 
$conf as $line ) {
                
fwrite$new_conf$line );
            }
            
fclose$new_conf );
            
chmod$this->conf_original0644 );
        }
    } 
$wpvl_text es el texto que quiero introducir, hago un foreach sobre el archivo para buscar la linea exacta donde quiero remplazar el texto y luego con array_splice añado los arrays de $wpvl_text acto seguido abro el archivo ha editar y con un foreach escribo todo el archivo de nuevo con mis lineas.

Se os ocurre que puede pasar?
  #2 (permalink)  
Antiguo 08/03/2013, 12:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 11 meses
Puntos: 51
Respuesta: fwrite pone el texto al principio del archivo

Podrias usar la funcion fseek o creo que con w+ en el open posiciona el puntero al final del archivo ( creo )

fseek($archivo, 0, SEEK_END);
  #3 (permalink)  
Antiguo 08/03/2013, 12:21
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: fwrite pone el texto al principio del archivo

siempre es bueno mirar el manual

Cita:
Iniciado por manual de php
-'w' Apertura para sólo escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear.

-'a' Apertura para sólo escritura; coloca el puntero al fichero al final del fichero. Si el fichero no existe se intenta crear.

-'a+' Apertura para lectura y escritura; coloca el puntero al fichero al final del fichero. Si el fichero no existe se intenta crear.
fuente http://www.php.net/manual/es/function.fopen.php
ahora ve cual es la forma que te conviene hacer el fopen y saca tus propias conclusiones, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 08/03/2013, 13:07
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: fwrite pone el texto al principio del archivo

Gracias por contestar pero no considero que el problema sea por el fopen y si lo hago asi es porque es para un plugin y quiero asegurarme que no borro nada que este definido con anterioridad. Solo elimino una linea y añado otras.

Pensais que lo estoy haciendo mal?
  #5 (permalink)  
Antiguo 08/03/2013, 13:45
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: fwrite pone el texto al principio del archivo

leíste la referencia que deje?? responde estas preguntas:
-si haces modo w como lo tienes que hace según el manual??
-si lo hicieras con modo a que hace según el manual??
-si lo haces con modo a+ que hace según el manual??

con probar no pierdes nada, pero el manual es muy claro, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 08/03/2013, 15:52
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: fwrite pone el texto al principio del archivo

Hola, dare mas detalles.
Yo quiero sobreescribir un archivo y por eso uso w.
Antes de crear el codigo mire las opciones de fopen, fwrite.

Carlos si mire lo que pusistes pues la respuesta es si.

1 sobreescribir el archivo.
2 y 3 añaden el texto al final del archivo.

Lo que no entiendo es porque en local funciona sin problemas y en mi hosting si que me lo edita pero lo añade al principio del archivo.
  #7 (permalink)  
Antiguo 08/03/2013, 19:32
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: fwrite pone el texto al principio del archivo

hace bastante creo que mas de un año yo recuerdo haber tenido que trabajar sobre archivos y cree una micro lib

https://github.com/carlosbelisario/FileManager

en su tiempo me sirvió, la clase principal fue esta

https://github.com/carlosbelisario/F...ileManager.php

recuerdo que lo actualizaba y todo, pero tengo tiempo sin tocarla, lo que no le hice fue autoload por flojera no tiene otro nombre pero me sirvio en el momento verifica a ver si te sirve para lo que quieres, porque creo que me perdí un poco en tu problema, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 08/03/2013, 21:02
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: fwrite pone el texto al principio del archivo

Te lo agradezco, le echare un vistazo pero haciendo pruebas veo que la var $x esta vacia con lo cual array_splice inserta el codigo al principio y no es problema de fwrite.
  #9 (permalink)  
Antiguo 09/03/2013, 06:25
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: fwrite pone el texto al principio del archivo

En el fichero que estás leyendo, WP_DEBUG sólo aparece una vez? Creo que tu algoritmo así lo cree..Pero podría ser que hubiera varias.
  #10 (permalink)  
Antiguo 09/03/2013, 09:05
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: fwrite pone el texto al principio del archivo

Hola, WP_DEBUG es una constante que se define en el archivo con lo que solo esta una vez, y si te fijas la elimino para luego poner mi constante y otros codigos.
  #11 (permalink)  
Antiguo 09/03/2013, 10:53
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: fwrite pone el texto al principio del archivo

Me fijo, pero tu código no controla que esté más de una vez.Es más, ni comprueba que exista *alguna* vez.
Qué valor tiene $x si no existe el define en el fichero? Porque la usas en array_splice, sin saber si está inicializada..
  #12 (permalink)  
Antiguo 09/03/2013, 11:59
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: fwrite pone el texto al principio del archivo

Como te comente antes en ese archivo existe si o si viene por defecto y por eso no me preocupo de si esta, solo me preocupo de eliminar y con $x que es igual a $i le digo al array_splice donde tiene que añadir mis arrays para crear de nuevo el archivo.
Y repito en local me funciona sin problemas pero en el hosting no.
  #13 (permalink)  
Antiguo 09/03/2013, 22:04
Avatar de 23r9i0  
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 16 años
Puntos: 33
Respuesta: fwrite pone el texto al principio del archivo

Encontre el error, el problema era que en mi archivo en local no tenia espacios y en mi hosting si con lo cual substr nunca era igual a WP_DEBUG y por lo tanto $x nunca se definia.
Creo que seguire el ultimo comentario de @dashtrash y me asegurale al 100% antes de escribir el archivo
@dashtrash te pido disculpas por mi tajante respuesta anterior esta convencido que no tendria problemas pero como es para un plugin de wordpress y no puedo estar seguro como comente mas arriba me asegurare.

Etiquetas: fwrite, php, principio
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 04:09.