Foros del Web » Programando para Internet » PHP »

Problema raro con Explode

Estas en el tema de Problema raro con Explode en el foro de PHP en Foros del Web. ¿Por que me funciona un explode en local host y luego en mi servidor no me funciona? $partes0 = explode("<!-- Coge de Aqui// -->", $t); ...
  #1 (permalink)  
Antiguo 23/08/2006, 22:28
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Problema raro con Explode

¿Por que me funciona un explode en local host y luego en mi servidor no me funciona?

$partes0 = explode("<!-- Coge de Aqui// -->", $t);
echo $partes0['1'];

Donde $t es toda la variable con todo mi texto que quiero coger.

El problema es que en localhost si me va y me lo divide pero en mi servidor es como si no reconociera <!-- Coge de Aqui// -->

En cambio si le doya ver codigo fuente desde mi servidor a mi pagina y copio dandole a copiar <!-- Coge de Aqui// --> y luego lo pego en mi php si me va en el servidor, pero no me va en localhost y asi sucesivamente, y el tema esta en que no varia absolutamente nada.

¿Que podra ser?


Un Saludo

Última edición por Taurus427; 23/08/2006 a las 22:48
  #2 (permalink)  
Antiguo 24/08/2006, 09:01
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
¿Se os ocurre e motivo por que funciona en localhost y en el servidor no?

Espero me puedan ayudar.

Un Saludo
  #3 (permalink)  
Antiguo 24/08/2006, 09:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. si "no funciona" . .obtienes algún mensaje de error?. Intenta mostrar todo el código que usas en su contexto. Si $t tiene ciertos datos . .expón una muestra o ejemplo de ellos.

Aplicar un:

print_r($partes0);

Revisa que estructura de array o variable obtienes.

Un saludo,

PD: no menciones "localhost" . .más bien habla de "tú" sevidor y de "otro" sevidor . .uno funciona bajo tal S.O. y usa PHP tal versión y otro tal S.O. y tal versión de PHP .. Eso es lo "importante" realmente para ver si hay algún detalle sobre configuración que pueda afectar. Por cierto, la configuración de ambos (php.ini) puede afectar (lo que no sé que directiva podría afectar).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 24/08/2006, 09:38
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Voy a preparar el ejemplo del codigo y lo posteo para ver si me pueden ayudar a descubrir el motivo.

Un saludo y gracias
  #5 (permalink)  
Antiguo 24/08/2006, 09:39
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
En realidad no obtengo ningun menaje de error es como si no reconociera en el explode <!-- Coge de Aqui// --> y no me la encuentra en el codigo fuente y por lo tanto no me muestra nada en el arry, sin embargo si copio <!-- Coge de Aqui// -->
desde el codigo fuente y lo pego si funciona, pero es que es exactamente el mismo texto.


Un saludo y gracias
  #6 (permalink)  
Antiguo 24/08/2006, 09:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Taurus427 Ver Mensaje
En realidad no obtengo ningun menaje de error es como si no reconociera en el explode <!-- Coge de Aqui// --> y no me la encuentra en el codigo fuente y por lo tanto no me muestra nada en el arry, sin embargo si copio <!-- Coge de Aqui// -->
desde el codigo fuente y lo pego si funciona, pero es que es exactamente el mismo texto.


Un saludo y gracias
Realmente no sé por qué cuesta tanto que proporcionen todos los antecedentes del problema; me refiero al -código completo- que usas (y datos tal vez que puedas manejar) para que -otros- (nosostros) lo evaluen en lugar de "intentar" tu mismo sacar conclusiones.

Esto no quiere decir que poniendo el código que usas completo ahí esté el problema y alguien pueda darte una solución .. pero por lo menos estará -casi- en las mismas condiciones que tú que puedes ver el código completo y ejecutarlo en los servidores que te dá problemas como para intentar dar algún tipo de respuesta o realizar mas preguntas para llegar a una solución.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 24/08/2006, 10:09
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Código PHP:
<?php
ob_start
();
show_source("pagina.html );
$t = ob_get_contents();
ob_end_clean();
$Reemplazar="
<br />"; 
$CadenaNueva="
n"; 
$CadenaMod=ereg_replace($Reemplazar,$CadenaNueva,$t); 
$t= html_entity_decode($CadenaMod);

$partes0 = explode('<!-- Inicio de fila// -->', $t);
$result = count($partes0)-1;
echo "
Se han encontrado $result Filas";

?>
pagina.html contiene muchos codigos html pero tiene etiquetas:

<!-- Inicio de fila// -->

aqui codigo
<!-- Inicio de fila// -->
aqui otra fila
<!-- Inicio de fila// -->
aqui otra fila
<!-- Inicio de fila// -->
aqui otra fila


Ese es el codigo a ver si hay algo que hago mal que en windows lo pilla de una forma y en winwos de otra, es decir en mi server y en localhost

Un Saludo

Última edición por Cluster; 24/08/2006 a las 10:20
  #8 (permalink)  
Antiguo 24/08/2006, 10:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y tu has hecho algunas pruebas?

Haces muchos procesos con el archivo que abres (URL) .. Debes ir comprobando "hasta donde llegas" correctamente con lo que esperas .. Es decir:

* Si obtienes el URL y su "código fuente" correctamente (un echo a $t) ..

* Ver también como pasa $CadenaMod la expresión regular que usas ... Que por otro lado con un str_replace() te debería sobrar .. TU no usas expresion regular ahí!! (eso puede ser un problema).

* La susticición de <br /> con /n .. podrías usar: $CadenaNueva="\r\n"; (pues el salto de línea en S.O. es diferente ...). No sé si será esto el problema . .pero es otra cosa más que probar.

Otro detalle, .. por qué no usas expresiones regulares para todo el proceso? .. Me refiero a usar:

preg_match_all()
http://www.php.net/manual/en/functio...-match-all.php

Con la expresión regular correspondiente (no me preguntes eso por qué no son mi fuerte ;()

Un saludo,

PD: Te dás cuenta todos los "detallitos" que han salido de ver tu código completo? .. Tomalo en cuenta para próximas preguntas .. así obtendras respuestas más rápido.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 24/08/2006, 10:54
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
El problema lo tengo localizado:

$partes0 = explode('<!-- Inicio de fila// -->', $t);

esa linea es la que falla, parece que tengo que copiar desde el codigo fuente que obtiene de html <!-- Inicio de fila// --> y luego pegarlo, pero tanto desde localhost como de mi servidor, es como si no reconociera los caracteres o los reconociera de forma distinta.

Pero en realidad no cambia ni un espacio.

preg_match_all no hace la misma funcion que explode verdad? yo necesito dividir el codigo fuente desde <!-- Inicio de fila// -->

Pero parece que no hay forma.
Y creeme he hecho muchisimas pruebas. pero nada.

Un Saludo
  #10 (permalink)  
Antiguo 24/08/2006, 11:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
preg_match_all no hace la misma funcion que explode verdad? yo necesito dividir el codigo fuente desde <!-- Inicio de fila// -->
No sólo se trata de usar esa función "tal cual" sino de que uses "Expresiones regulares" (es es un psduo-lenguaje en sí y con PHP lo puedes "usar" con funciones como erg_xxx() y la mencionada por decir algunas .. Son expresiones regualres tipo "Perl" compatibles ..)

En concreto la función mencionada te entrega un array con lo que se encuentre de tu patrón dado (ya te comenté que soy malo para las expresiones regulares) .. pero en "una" línea de código (con la expresión regular adecuada) podrías tener lo que buscas .. Ojalá alguien "versado" en expresiones regulares te pueda orientar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 24/08/2006, 11:14
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
A ve si hay alguien y me lo puede aclarar con un ejemplo.

UN Saludo y Gracias
  #12 (permalink)  
Antiguo 24/08/2006, 11:18
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.653
Antigüedad: 12 años, 5 meses
Puntos: 88
Código PHP:
$partes0 explode("<!-- Coge de Aqui// -->"$t);
echo 
$partes0['1']; 
para empezar empezar cuando haces referencia a la posicion de un arreglo pones el número pero sin comillas
Código PHP:
echo $partes0[1]; 
.
luego, en el código que pones posteriormente no veo esa parte y ademas te falta la " final
Código PHP:
show_source("pagina.html ); 
y por último puedes usar el error_reporting para ayudarte con errores que a veces existen pero no suelen mostrarse como errores de índice en los arreglos
Código PHP:
<?php
error_reporting
(E_NOTICE);//también puedes remplazar el E_NOTICE por E_ALL
ob_start();
show_source("pagina.html");
$t ob_get_contents();
ob_end_clean();
$Reemplazar="<br />"
$CadenaNueva="n"
$CadenaMod=ereg_replace($Reemplazar,$CadenaNueva,$t); 
$thtml_entity_decode($CadenaMod);

$partes0 explode('<!-- Inicio de fila// -->'$t);
$result count($partes0)-1;
echo 
"Se han encontrado $result Filas";

?>
espero que te sirva algo de esto.
salu2 y suerte.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #13 (permalink)  
Antiguo 24/08/2006, 11:25
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Gracias, por el codigo pero no me devuelve errores, he probado poniendo las comillas y tampoco me funciona.

Creo que puede ser debido a la codificacion de la pagina dependiendo de como el servidor me devuelva el codigo fuente
no se me ocurre otra cosa.
A ver si puede ser eso y me indicais alguna solución para indicarle la codificacion al codigo fuente cuando hago un show_source

Un Saludo y gracias por la ayuda.
  #14 (permalink)  
Antiguo 24/08/2006, 11:43
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.653
Antigüedad: 12 años, 5 meses
Puntos: 88
por lo que he leido el show_source es un alias de highlight_file() y sirve para resaltar los codigos de php. a lo mejor no funciona con html(no estoy seguro) pero puedes leer esto http://mx.php.net/manual/es/function.highlight-file.php a lo mejor te sirve.

__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #15 (permalink)  
Antiguo 24/08/2006, 11:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ahora que lo veo bien ...

show_suorce() sólo funciona con rutas absolutas .. NO para una ruta relativa tipo: http://www.tal.tal

(por eso en "local" te funcionaba tal vez .. por que la referencia de la página era absoluta).

En lugar de esa función haz un include() o readfile() (si es que tienes permitidos los accesos remotos a archivos).

A todo esto .. esa "pagina" que intentas obtener en una variable su código fuente .. está en tu servidor o en otro? .. es decir . .usas rutas absolutas o relativas para llamarlo?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 24/08/2006, 11:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por eits Ver Mensaje
por lo que he leido el show_source es un alias de highlight_file() y sirve para resaltar los codigos de php. a lo mejor no funciona con html(no estoy seguro) pero puedes leer esto http://mx.php.net/manual/es/function.highlight-file.php a lo mejor te sirve.

Eso es cierto .. De hecho esa función metería "HTML" para "adornar" el código PHP/HTML que pudiera existir ..

Con las otras funciones que aplica posteriormente .. parece que ese HTML extra estaría de más? ...

Cual es el objetivo de esos procesos?.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 24/08/2006, 11:57
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Os explico loq ue tengo que hcer para que funcione.

1º Sube el archivo que me muestra el código. Desde internet explorer le doy a ver codigo fuente y buusco la cadena de texto la cual quiero usar para separar el codigo.

2º Copio dicha cadena que es <!-- Coge de Aqui// --> y la uso en el explode

Luego vuelvo a subir el php con esa cadena escrita y funciona.

Pero si ejecuto esa mismo codigo en localhost ya es como si <!-- Coge de Aqui// --> no me lo reconociera, pero esta en el codigo fuente exactamente igual. Y para que me funcione tengo que coger y repetir el paso 1 y 2 pero en localhost, por eso digo que el problema esta en la parte:

$partes0 = explode("<!-- Coge de Aqui// -->", $t);

Es decir que funcionar me funciona pero no a la vez en locahost y en mi servidor.

Espero haver aclarado un poco mejor el problema

Un Saludo
  #18 (permalink)  
Antiguo 24/08/2006, 12:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
mmmm, creo si tu problema viene al usar el show_source, esto es porque el codigo se "adorna", es decir < se traduce como &lt;.

Esto que hace?, que si tu le dices al explode que parta en <!-- Coge de Aqui// -->

explode va a buscar el string pero no va a encontrarlo puesto que ahora en tu variable $t esta asi: &lt;-- Coge de Aqui// -- &gt;

Esto pues no es lo mismo y por ende no funciona.
  #19 (permalink)  
Antiguo 24/08/2006, 12:04
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Si, eso me paso en un principio pero use html_entity_decode para solucionarlo y el problema esta en mi me mensaje anterior que tengo que hacer esos pasos bastante raros para que funcione.

Un Saludo
  #20 (permalink)  
Antiguo 24/08/2006, 12:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Yo ya me perdí .. pero bueno .. podría ser algún problema con los "saltos de línea" que maneja windows y los que maneja Linux (tu servidor está bajo Linux?) ..

Los saltos de "línea" como código no los ves pero están ahí (los \n y \r\n .. ) .. tal vez sea ese el problema .. pero realmente no sé más.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #21 (permalink)  
Antiguo 24/08/2006, 12:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Esque para que usas html_entity_decode, mejor usa file_get_contents() y ya con eso puedes leer tu archivo tal y como es, y asi te quitas de esos problemas.
  #22 (permalink)  
Antiguo 24/08/2006, 12:08
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Pero no tiene sentido por que por ejemplo la cadena que divide es esta
<!-- Coge de Aqui// --> que no esta ni con <br> ni con saltos de linea. Y fijate lee esto que tengo que hacer para que funcione:

Os explico loq ue tengo que hcer para que funcione.

1º Sube el archivo que me muestra el código. Desde internet explorer le doy a ver codigo fuente y buusco la cadena de texto la cual quiero usar para separar el codigo.

2º Copio dicha cadena que es <!-- Coge de Aqui// --> y la uso en el explode

Luego vuelvo a subir el php con esa cadena escrita y funciona.

Pero si ejecuto esa mismo codigo en localhost ya es como si <!-- Coge de Aqui// --> no me lo reconociera, pero esta en el codigo fuente exactamente igual. Y para que me funcione tengo que coger y repetir el paso 1 y 2 pero en localhost, por eso digo que el problema esta en la parte:

$partes0 = explode("<!-- Coge de Aqui// -->", $t);

Es decir que funcionar me funciona pero no a la vez en locahost y en mi servidor.

Por que creo que debe de estar la clave en esa zona.

Un Saludo
  #23 (permalink)  
Antiguo 24/08/2006, 12:10
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Cita:
Iniciado por GatorV Ver Mensaje
Esque para que usas html_entity_decode, mejor usa file_get_contents() y ya con eso puedes leer tu archivo tal y como es, y asi te quitas de esos problemas.
Si, pero el problema es que es una web externa y quiero coger solo una parte del codigo y no creo que funcione file_get_contents

Un saludo
  #24 (permalink)  
Antiguo 24/08/2006, 12:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Taurus427 Ver Mensaje
Si, pero el problema es que es una web externa y quiero coger solo una parte del codigo y no creo que funcione file_get_contents

Un saludo
Pero esa "web" externa la llamarás por http://www.tal.tal/nose.html ? (es decir, no estará en tu servidor?)

Ya que "capturas" el buffer de salida de PHP deberías usar readfile() en lugar de show_source()

Con "readfile()" lees el archivo sin más "HTML" que el própio que pueda tener o sin alterarlo si es texto plano puro (como hace "show_source()" y que luego tienes que andar con html_entity_decode() para dejarlo como es originalmente.

(independiente del problema puntual que tengas).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #25 (permalink)  
Antiguo 24/08/2006, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Ah, y como dices hasta ahora es una web externa, el problema puede ser que no puedes abrir archivos por http, por lo que tendras que usar sockets, y abrir tu archivo y leerlo de la forma "dificil".
  #26 (permalink)  
Antiguo 24/08/2006, 12:42
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
La web externa la llamo asi www.lawebexterna.com/tablas/ sin index.html ni index.php ni nada por el estilo
Siigue sin ir, el tema es que Si Funciona, pero tengo que hacer triquiñuelas extrañas sin sentiedo como ya he explicado.

cone el show_source funciona pero algo debe de tener que no me lo reconoce igual en windows y linux. y a la vista mediante ver codigo fuente de ie se ve exactamente igual.

Un Saludo
  #27 (permalink)  
Antiguo 24/08/2006, 18:45
 
Fecha de Ingreso: agosto-2003
Mensajes: 398
Antigüedad: 14 años, 3 meses
Puntos: 0
Solucionado como os comente el problema estaba localizado pero no sabia la solucion asi que me he dado cuenta que quizas el problema estaba en lo que no se veia y eso eran los espacios.

Y para solucionarlo he añadido esta linea de codigo:
$Reemplazar=" ";
$CadenaNueva="&nbsp;";
$CadenaMod=ereg_replace($Reemplazar,$CadenaNueva,$ t);
$t= html_entity_decode($CadenaMod);

Y ya me coge tanto en localhost como en el servidor los resultados del explode. Y dado que siempre me transcribe cualquier espacio al tipico &nbsp; y luego lo deja en espacio en blanco con html_entity_decode funciona en cualquier lado.

Os doy las gracias a todos los que me habeis intentado ayudar

Un Saludo
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 22:08.