Foros del Web » Programando para Internet » PHP »

No consigo que funcione siempre

Estas en el tema de No consigo que funcione siempre en el foro de PHP en Foros del Web. Pues mi problema basicamente es que en algunos hosting de pago este codigo si va bien, pero en hosting gratuitos o locales (xampp, wampp, appserver) ...
  #1 (permalink)  
Antiguo 16/09/2011, 11:32
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
No consigo que funcione siempre

Pues mi problema basicamente es que en algunos hosting de pago este codigo si va bien, pero en hosting gratuitos o locales (xampp, wampp, appserver) no hay forma, era para saber si alguno ve la razon de esto ya que no se si esta en el codigo.


Esto seria el archivo principal que he llamado "test.php"
Código:
<html>
	<head>
		<title> Proyecto </title>
		<meta name="Generator" content="EditPlus">
		<meta name="Author" content="">
		<meta name="Keywords" content="">
		<meta name="Description" content="">
	</head>
	<body>
		<table width="343" border="0">
			<tr>
				<td>Seleccionar ubicación del archivo</td>
			</tr>
			<tr>
				<td>
					<form action="upload.php" method="post" enctype="multipart/form-data">
						<input name="archivo" type="file" size="35" />
						<input name="enviar" type="submit" value="Upload File" />
						<input name="action" type="hidden" value="upload" />     
					</form>
				</td>
			</tr>
		</table>
	</body>
</html>
Y este seria el que realiza la upload del archivo y luego extrae el codigo que busco en el archivo xml que se sube:

Código:
<?php
			$status = "";
			if ($_POST["action"] == "upload") {
				// obtenemos los datos del archivo
				$tamano = $_FILES["archivo"]['size'];
				$tipo = $_FILES["archivo"]['type'];
				$archivo = $_FILES["archivo"]['name'];  //nombre del archivo con extension
				if ($archivo != "") {
					// guardamos el archivo a la carpeta Reports
					$destino =  "reports/".$archivo;
					if (copy($_FILES['archivo']['tmp_name'],$destino)) {
						$status = "Archivo <b>".$archivo."</b> subido al servidor";
					} else {
						$status = "Error al subir el archivo";
					}
				} else {
					$status = "Error al subir archivo";
				}
				echo $status;
			}
 
			//Extraer los datos del XML
 
 			$xml = simplexml_load_file($archivo);
			echo "<br>aqui llego 1";
			foreach ($xml->Page as $Page){
				echo "aqui llego 2";
				if ($Page->Group->Item->Title == "Total") {
					echo "aqui llego 3";
					echo $Page->Group->Item->Value.''."<br>";
				}
			}
		?>
el problema esque el codigo se queda en el punto "aqui llego 1" y no sigue mas y no se ver porque.
  #2 (permalink)  
Antiguo 16/09/2011, 11:36
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: No consigo que funcione siempre

Como es un servidor gratuito puede que no tenga habilitada la opción simplexml_load_file
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 16/09/2011, 11:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No consigo que funcione siempre

¿La configuración de PHP es la misma que la del hosting?

Por ahí deberías comenzar a ver.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 16/09/2011, 11:44
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

El problema esque no tengo manera de saberlo, solo se 1 cosa que este codigo ha funcionado en un hosting de pago de un colega, pero claro, no puedo hacer prueba ninguna en casa porque en casa no va, ademas creo que a partir de la 5.1 de php ya tiene habilitada el simplexml de serie creo, por eso voy tan perdido
  #5 (permalink)  
Antiguo 16/09/2011, 11:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No consigo que funcione siempre

Si hay forma de hacer, solo ejecuta phpinfo() en ambos servidores y compara la configuración.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 16/09/2011, 11:55
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Cita:
Iniciado por pateketrueke Ver Mensaje
Si hay forma de hacer, solo ejecuta phpinfo() en ambos servidores y compara la configuración.
El problema esque no puedo ejecutar eso en el server de pago. Conoceis algun server para montar localmente que funcione normalmente bien?
  #7 (permalink)  
Antiguo 16/09/2011, 12:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No consigo que funcione siempre

En windows puedes usar XAMPP o EasyPHP; en sistema *nix es aún mas sencillo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 16/09/2011, 12:35
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Probare easyphp porque xampp me falla xD
  #9 (permalink)  
Antiguo 16/09/2011, 12:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: No consigo que funcione siempre

También puedes usar Zend server CE, funciona bastante bien en Linux y Windows

http://www.zend.com/en/products/server-ce/downloads

Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #10 (permalink)  
Antiguo 16/09/2011, 12:42
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Bueno almenos en easyphp SI me dice donde falla, aunque no se solucionarlo, es precisamente donde deciais, en el simplexml_load_file
  #11 (permalink)  
Antiguo 16/09/2011, 12:56
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: No consigo que funcione siempre

imprime algún tipo de error?

coloca esto donde está el punto uno y copia el contenido. Al menos una parte.

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r($xml);
  3. echo '</pre>';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #12 (permalink)  
Antiguo 16/09/2011, 13:20
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Cita:
Iniciado por andresdzphp Ver Mensaje
imprime algún tipo de error?

coloca esto donde está el punto uno y copia el contenido. Al menos una parte.

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r($xml);
  3. echo '</pre>';
esto es lo que sale en pantalla

Código:
Archivo test.xml subido al servidor
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "test.xml" in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\upload.php on line 24

aqui llego 1
Notice: Trying to get property of non-object in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\upload.php on line 27

Warning: Invalid argument supplied for foreach() in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\upload.php on line 27
  #13 (permalink)  
Antiguo 16/09/2011, 13:35
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: No consigo que funcione siempre

failed to load external entity "test.xml"

No se puede cargar ese archivo test.xml.

prueba obtener el XML con file_get_contents y luego pasarlo a SimpleXML y comenta los resultados.

o sino reemplaza esta linea
Código PHP:
Ver original
  1. $xml = simplexml_load_file($archivo);

por esta otra:

Código PHP:
Ver original
  1. $xml = new SimpleXMLElement($archivo, null, true);
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #14 (permalink)  
Antiguo 16/09/2011, 13:55
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Encontre parte del fallo y era que en vez de $archivo tenia que usar $destino ya que guarda la ruta completa, con lo que el codigo queda asi

Código:
<?php
			$status = "";
			if ($_POST["action"] == "upload") {
				// obtenemos los datos del archivo
				$tamano = $_FILES["archivo"]['size'];
				$tipo = $_FILES["archivo"]['type'];
				$archivo = $_FILES["archivo"]['name'];  //nombre del archivo con extension
				if ($archivo != "") {
					// guardamos el archivo a la carpeta Reports
					$destino =  "reports/".$archivo;
					if (copy($_FILES['archivo']['tmp_name'],$destino)) {
						$status = "Archivo <b>".$archivo."</b> subido al servidor";
					} else {
						$status = "Error al subir el archivo";
					}
				} else {
					$status = "Error al subir archivo";
				}
				echo $status;
			}
 
			//Extraer los datos del XML
 
			//Extraer los datos del XML
			//$xmlinicio = file_get_contents($destino);
			//$xml = new SimpleXMLElement($xmlinicio, null, true);
 			$xml = simplexml_load_file($destino);
			echo "<br>aqui llego 1";
			foreach ($xml->Page as $Page){
				if ($Page->Group->Item->Title == "Total") {
					echo $Page->Group->Item->Value.''."<br>";
					//mysql_query("INSERT INTO equipos (slots) VALUES ($Group->Item->Value.)")");
				}
			}
?>

Ahora bien, me da este error:

Código:
Archivo test.xml subido al servidor
aqui llego 1
Notice: Trying to get property of non-object in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\upload.php on line 30
4095 MB
por cierto pasarlo por file_get_content y simplexmlelement me ha ido de coña para ver el fallo
  #15 (permalink)  
Antiguo 16/09/2011, 14:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: No consigo que funcione siempre

Notice: Trying to get property of non-object

ahora si necesitas hacer esto, coloca una parte del resultado de print_r

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r($xml);
  3. echo '</pre>';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #16 (permalink)  
Antiguo 16/09/2011, 14:20
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Cita:
Iniciado por andresdzphp Ver Mensaje
Notice: Trying to get property of non-object

ahora si necesitas hacer esto, coloca una parte del resultado de print_r

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r($xml);
  3. echo '</pre>';

Un trozo asi?

Código:
[3] => SimpleXMLElement Object
                (
                    [Title] => Memoria
                    [Icon] => 50
                    [MenuTitle] => Motherboard
                    [MenuIcon] => 42
                    [Group] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [Title] => Memoria fÃ*sica
                                    [Icon] => 50
                                    [Item] => Array
                                        (
                                            [0] => SimpleXMLElement Object
                                                (
                                                    [Title] => Total
                                                    [Icon] => 50
                                                    [Value] => 4095 MB
                                                )

                                            [1] => SimpleXMLElement Object
                                                (
                                                    [Title] => Usada
                                                    [Icon] => 50
                                                    [Value] => 1967 MB
                                                )

                                            [2] => SimpleXMLElement Object
                                                (
                                                    [Title] => Libre
                                                    [Icon] => 50
                                                    [Value] => 2127 MB
                                                )

                                            [3] => SimpleXMLElement Object
                                                (
                                                    [Title] => Uso
                                                    [Icon] => 50
                                                    [Value] => 48 %
                                                )

                                        )

                                )
  #17 (permalink)  
Antiguo 16/09/2011, 14:27
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: No consigo que funcione siempre

Si te fijas en el resultado de print_r el group tiene varios item como un array. Tienes que recorrer también item. Para encontrar al Total o poner su indice cero.

Item[0]->Title ... == 'total'

y para los Value necesitas un foreach.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #18 (permalink)  
Antiguo 16/09/2011, 14:33
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Cita:
Iniciado por andresdzphp Ver Mensaje
Si te fijas en el resultado de print_r el group tiene varios item como un array. Tienes que recorrer también item. Para encontrar al Total o poner su indice cero.

Item[0]->Title ... == 'total'

y para los Value necesitas un foreach.
Quiza lo entiendo mal la lectura de los xml pero con esto
Código:
foreach ($xml->Page as $Page){
				if ($Page->Group->Item->Title == "Total")
No deberia recorrer todas las "page" por un title que contubiese el "Total" y de encontrarlo realizar el contenido del if??, que de hecho lo consigue pero dando un error por el camino:

Código:
Notice: Trying to get property of non-object in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\upload.php on line 33
4095 MB
  #19 (permalink)  
Antiguo 16/09/2011, 14:41
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: No consigo que funcione siempre

Intenta colocando el índice a ver si se va ese error: Item[0]... que bueno sería conocer los XML cuando aparecen estos errores para no estar de adivino.

Prueba así

Código PHP:
Ver original
  1. foreach ($xml->Page as $Page) {
  2.     if ($Page->Group->Item[0]->Title == "Total") {
  3.         echo $Page->Group->Item[0]->Value . "<br>";
  4.     //mysql_query("INSERT INTO equipos (slots) VALUES ($Group->Item->Value.)")");
  5.     }
  6. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 16/09/2011 a las 14:55
  #20 (permalink)  
Antiguo 16/09/2011, 15:02
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Cita:
Iniciado por andresdzphp Ver Mensaje
Intenta colocando el índice a ver si se va ese error: Item[0]... que bueno sería conocer los XML cuando aparecen estos errores para no estar de adivino.

Prueba así

Código PHP:
Ver original
  1. foreach ($xml->Page as $Page) {
  2.     if ($Page->Group->Item[0]->Title == "Total") {
  3.         echo $Page->Group->Item[0]->Value . "<br>";
  4.     //mysql_query("INSERT INTO equipos (slots) VALUES ($Group->Item->Value.)")");
  5.     }
  6. }
Nada, si con el indice se queja de lo mismo....
  #21 (permalink)  
Antiguo 17/09/2011, 02:01
 
Fecha de Ingreso: septiembre-2011
Ubicación: Sant Marti de Centelles
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No consigo que funcione siempre

Bueno creo que he arreglado el problema con el foreach, parece ser que como el xml estaba hecho con 2 grupos de etiquetas grandes daba problemas haciendo solo 1 recorrido, asi que he hecho 2

Código:
$xml = simplexml_load_file($destino);
echo "<br>aqui llego 1<br>";
foreach ($xml->Page as $Page){
	foreach ($Page->Group as $Group){
		if ($Group->Item->Title == "Total") {
			echo $Group->Item->Value.''."<br>";
			return;
			//mysql_query("INSERT INTO equipos (slots) VALUES ($Group->Item->Value.)")");
		}
	}
}
De esta forma si que me funciona sin problemas, gracias a todos los que habeis ayudado/aportado algo a que esto sea posible

Etiquetas: html, siempre
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:26.