Foros del Web » Programando para Internet » PHP »

Probador de código php

Estas en el tema de Probador de código php en el foro de PHP en Foros del Web. Hola: Acabo de hacerlo, y es más fácil de lo que suponía... Basta que en una página haya un formulario con un textarea de name=datos ...
  #1 (permalink)  
Antiguo 26/10/2005, 03:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Probador de código php

Hola:

Acabo de hacerlo, y es más fácil de lo que suponía...

Basta que en una página haya un formulario con un textarea de name=datos (por ejemplo), un fichero en blanco en la misma carpeta que se llame temporal.php (también por ejemplo)... El formulario se envía por el método post a la página crearPhp.php...

Y el cóntenido de crearPhp.php sea:

Código:
<?php
	$datos = stripslashes($_POST["datos"]);
	chmod("temporal.php", 0777);
	$volcado = fopen("temporal.php", "w");
	rewind($volcado);
	fwrite($volcado, $datos, strlen($datos));
	fclose($volcado);
//	header("Location: temporal.php")	
?>
<html>
<META HTTP-EQUIV="refresh" CONTENT="1; url=temporal.php"> 
<html>
He probado con esto en el textarea:

Código:
<html>
<body>
<?php
// variables de entorno
$vars = $_SERVER;
foreach($vars as $clave => $valor)
 echo "\$_SERVER[$clave] = $valor<br />";
?>
</body>
</html>
y con el famoso phpinfo() y en mi localhost funcionó muy bien...

Creo que no lo voy a subir porque me parece algo peligroso.
Si puede hacerse mejor, me gustaría que me lo dijeran. Intente redireccionar con header y no salió bien...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 26/10/2005 a las 08:51 Razón: Había puesto códogo y dificultaría las búsquedas
  #2 (permalink)  
Antiguo 26/10/2005, 06:16
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola caricatos

Interesante tu probador. Me va a venir bien para facilitarme la tarea de probar mis escasas líneas de código en PHP.

Saludos,

Última edición por JavierB; 26/10/2005 a las 09:11
  #3 (permalink)  
Antiguo 26/10/2005, 06:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Como bien dices .. es altamente peligroso usar dicho código (usa algúna protección para que sólo lo ejecutes bajo algún logín autentificado .. ).

Faltaría algunos detalles .. sobre todo verificar si usas "magic_quote_gpc" (en tu php.ini) para ver si necesitarías aplicar stripslashes() o no a la hora de ejecutar tu código.

Lo de ejecutar el código inmediatamente redireccionando tu navegador hacia el script recien creado .. debería funcionar con el "header()" de "Location" .. (que servidor HTTP usas? .. no será IIS? .. por ahí tenía problemas si no usabas rutas relativas: http://www.tusito.tal/temporal.php .. pruebalo así).

Un saludo,
  #4 (permalink)  
Antiguo 26/10/2005, 08:39
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Me agrada saber que pueda ser útil a alguien... yo estoy empezando a probarlo, y la verdad es que no tener que crear documentos nuevos para pruebas sencillas y que luego iban a parar a la papelera me parece un gran avance.

JavierB: Las veces que mis torpes "dedacos" habrán escrito cosas raras... Lo voy a arreglar tan solo para que se pueda buscar bien (aunque estas cosillas creo que le dan cierto encanto a estos foros y a toda internet...)

Cluster: Mi servidor es apache (tanto en localhost como en las pocas páginas que tengo subidas)... y creo que no voy a subirlo porque mi nivel es bastante pobre y la intención es que se trate de una ayuda en local...
No tengo idea sobre el uso de "magic_quote_gpc", pero ya que tengo mi magnífico probador php (ya lo tenía para javascript), voy a verlo... Con phpinfo() aparece en On... no sé si está bien, pero en una página que ya tenía encontraba errores cuando no lo usaba...

Gracias por los comentarios.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 26/10/2005, 10:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La directiva de php.ini "magic_quote_gpc" lo que hace (a ON) es añadirte el caracter de escape (\) a toda comilla doble y algunos caracteres más que pasean por el URL (desde tu formulario o links hacia tu script PHP).

Si está a ON . .automáticamente se "escapan" cosas como
echo "algo";

quedando en
echo \"algo\";

Por otro lado está la misma directiva pero que afecta a la generación de archivos: magic_quote_runtime .. que por defecto está a OFF .. En general todo esto afecta como veras a como se genera el archivo.

Ahora, .. viendolo desde otro punto de vista .. si tienes pequeños scripts que probar .. no es necesario ni que generes un archivo (y llenar tu servidor de esos archivos + tener que ir a borrarlos luego a mano despues de ver su ejecución). Puedes ejecutar tu código directamente sin pasar por la generación de tu archivo usando:

eval()
www.php.net/eval
(igual que existe una función equivalente para Javascript).

Un saludo,
  #6 (permalink)  
Antiguo 26/10/2005, 10:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Gracias Cluster, como siempre dando lecciones magistrales :

Ya veo que debo seguir usando stripslashes en localhost... aunque el tema del eval no lo tengo muy claro (por cierto, cada vez le encuentro menos utilidad al eval en javascript) pero si quiero poner una página completa (parte html/javascript y parte php) no sé si ayudaría mucho el eval de php... como el ejemplo que puse en el primer mensaje...

Bueno, por hoy lo dejo y muchas gracias.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 26/10/2005, 11:33
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
parar variar.. una vez mas no me entero de que hablais..
a que te refieres con probador de codigo?
que hace ese codigo?
  #8 (permalink)  
Antiguo 26/10/2005, 11:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Imagina un ejemplo:

Yo aquí en el foro te pongo cierto código:
Código PHP:
<?
echo "Hola mundo";
?>
tu .. estás en tu trabajo/casa y no dispones de tu servidor "editor de código" .. ni de tu cliente FTP para "subir" .. crear ese archivo y ejecutarlo en tu servidor.

Bueno, para eso .. simplemente creas ese pequeño script, tu código (el que sea) lo pegas ahí .. en tu "textarea" le das a "enviar" y ves como se ejecuta (lo que haga) rápidamente .. sin andar liandote creando archivos .. subiendolos y luego borrandolo por qué no es más que una pequeña prueba.

Por supuesto, que algo más complejo que -un- sólo script no te sirve este sencillo ejemplo.

Un saludo,
  #9 (permalink)  
Antiguo 26/10/2005, 12:04
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
ah vale... pero vamos como yo siempre trabajo en local primero con el easyphp.. no me serviria de mucho.. solo si estoy en un pc que no tiene ni la herramienta en local ni quiero subir nada a mi servidor.. sino que pego ahi y pruebo?
eso?

pero aparte de
<?php
$datos = stripslashes($_POST["datos"]);
chmod("temporal.php", 0777);
$volcado = fopen("temporal.php", "w");
rewind($volcado);
fwrite($volcado, $datos, strlen($datos));
fclose($volcado);
// header("Location: temporal.php")
?>
<html>
<META HTTP-EQUIV="refresh" CONTENT="1; url=temporal.php">
<html>

dice de poner algo mas no?

saludos y gracias de nuevo
  #10 (permalink)  
Antiguo 26/10/2005, 12:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
ah vale... pero vamos como yo siempre trabajo en local primero con el easyphp.. no me serviria de mucho.. solo si estoy en un pc que no tiene ni la herramienta en local ni quiero subir nada a mi servidor.. sino que pego ahi y pruebo?
eso?
No, .. no entendistes .. el "código" sube al servidor (o donde se ejecuta PHP?) .. se ejecuta (en ese ejemplo se genera un archivo y seguidamente se manda a llamar por el redireccionamiento que se hace a tu navegador).


Por lo demás Caricatos ya avisa que le falta tu formulario HTML con ese campo "datos" ..

Un saludo,
  #11 (permalink)  
Antiguo 26/10/2005, 12:41
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
tengo el dia cuadriculado

no se.. a ver si soy capaz de hacerlo pq no me entero :(
  #12 (permalink)  
Antiguo 26/10/2005, 17:03
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Lo que falta es una página así:

<html>
<body>
<form action="crearPhp.php" method="post" enctype="application/x-www-form-urlencoded" target="_blank" >
<textarea name="datos" rows="15" cols="100"></textarea>
<input type="submit" value="probar" />
</form>
</body>
</html>

Como verás es una página muy básica, pero escribiendo en el textarea algo así:
<?php phpinfo(); ?>
Y enviando el formulario... es suficiente para ver tu configuración php (en parte por eso creo peligroso que esté en el servidor...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #13 (permalink)  
Antiguo 27/10/2005, 00:29
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 1 mes
Puntos: 0
vale.. a ver si con el nuevo dia lo entiendo.. :p

tu tienes esa pagina html en tu servidor...
con eso.. subes .php´s a tu servidor para probar, si tener que usar un ftp?
es eso? :p
  #14 (permalink)  
Antiguo 27/10/2005, 02:11
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Te vas acercando, pero no es exactamente...

En el textarea se pone código php y html como cualquier página php, luego, al envíar los datos, este código se escribe como un texto plano en el fichero temporal.php, y se redirecciona a ese fichero, que se interpreta como una página php...

Yo lo tengo en localhost porque creo que es muy peligroso tenerlo en un servidor.
Creo que cuando pegan código en los mensajes de estos foros, es la mejor manera de probarlos, ya que no implica la creación de páginas nuevas...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #15 (permalink)  
Antiguo 27/10/2005, 02:25
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
con eso.. subes .php´s a tu servidor para probar, si tener que usar un ftp?
es eso? :p
No. Precisamente se trata de no subir archivos. Lo que hace es escribir código en un textarea y probarlo directamente.

Cita:
Ya veo que debo seguir usando stripslashes en localhost...
Tienes la función get_magic_quotes_gpc() para que no tengas que estar viendo eso . Con dicha función puedes hacer algo como
Código PHP:
if(get_magic_quotes_gpc())
        
$contenidostripslashes($contenido); 
Cita:
si quiero poner una página completa (parte html/javascript y parte php) no sé si ayudaría mucho el eval de php...
... no creo... . Si no miento, para que eval() funcione (no tengo mucha experiencia con la función) se le necesita pasar "PHP puro"... valdría si le pasaras --por ejemplo-- simplemente echo "algo";, pero si le metes etiquetas PHP (<?php echo "algo"; ?>) ya no lo interpetaría bien... ¿no es así Clus?. Luego métele HTML y demás...

... lo simple es crear un archivo como se tiene ahora. No le veo drama sí es se puede sobreescribir el mismo (respecto a lo que comentaba Cluster de tener N archivos "basura") y así tener un solo archivo probador.

Pero ahora me entra la duda... se puede ejecutar directamente código almacenado en una variable con la posibilidad de que este sea de cualquier tipo (PHP, HTML, JS, CSS, incluso XML)????? ¿es posible? ... supongo que se podría echar mano de regex y una función como preg_match_all() para identificar el PHP embebido, extraerlo y ejecutarlo con eval()... el resto se mandaría a imprimir directamente con un echo... ¿no?.

Edito:
Por cierto... por qué no te funciona el header()?, no redirecciona?, algún mensaje de error?...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 27/10/2005 a las 02:44
  #16 (permalink)  
Antiguo 27/10/2005, 03:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Gracias jam:

Es posible que se tratara de un error mío, porque acabo de probarlo y funciona... aunque solo quité el comentario y puse el cierre (;)... que debía ser lo que estaba mal...

Parece mejor usar header, ya que el navegador solo queda con la página actual (sin historial)...

El fichero crearPhp.php ha quedado así:

Código:
<?php
	$datos = $_POST["datos"];
	if(get_magic_quotes_gpc())
		$datos = stripslashes($datos);
//	$datos = stripslashes($_POST["datos"]);
	chmod("temporal.php", 0777);
	$volcado = fopen("temporal.php", "w");
	rewind($volcado);
	fwrite($volcado, $datos, strlen($datos));
	fclose($volcado);
	header("Location: temporal.php");	
?>
<html>
<META HTTP-EQUIV="refresh" CONTENT="1; url=temporal.php"> 
<html>
Verás, en local tengo el probador javascript asociado a una base de datos con los scripts que estoy usando de prueba (aún me falta organizarlo un poco)... ahora le puse un botón para probar como php que envía el contenido a este ficherito, y viene muy bien, porque se guardan los scripts en uina base de datos y no se llena el ordenador de ficheritos de pruebas y de pequeños scripts...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #17 (permalink)  
Antiguo 27/10/2005, 03:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
... oyes... pero si ya te funciona el header() no es necesario el HTML al final...

Ahora yo espero que alguien me saque de la duda...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #18 (permalink)  
Antiguo 27/10/2005, 05:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
... no creo... . Si no miento, para que eval() funcione (no tengo mucha experiencia con la función) se le necesita pasar "PHP puro"... valdría si le pasaras --por ejemplo-- simplemente echo "algo";, pero si le metes etiquetas PHP (<?php echo "algo"; ?>) ya no lo interpetaría bien... ¿no es así Clus?. Luego métele HTML y demás...
No soy usuario habitual de "eval()" .. Habría que probarlo. El caso es que si esa función "funciona" para el próposito general .. te evitas crear un archivo (aunque sólo sea uno por qué lo sobre-escribes).

Los problemas de seguridad vendrán cuando alguien haga algo tipo:
<?
readfile("config.php");
?>

Es decir .. se puede "ver el código" de cualquier script que ronde en ese servidor .. Por eso es tan peligros (imagina el ejemplo .. un "config.php" donde dejes datos tipo contraseña de acceso a una BD o similar .. hay que tener cuidado).

Un saludo,
  #19 (permalink)  
Antiguo 27/10/2005, 09:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por jam1138
... oyes... pero si ya te funciona el header() no es necesario el HTML al final...
¡Je, je!... sin duda sobra, pero si por alguna razón no redirecciona de una manera, lo haría de la otra...

Si Cluster, por eso en el primer mensaje puse que me parecía peligroso... y solo pensé en usar phpinfo()...

Pero en un localhost, tal como yo pienso usarlo... y como creo que se debería usar, puede ser bastante útil.

En el caso de html/javascript/css tengo una página subida: http://www.pepemolina.com/probador/
Y en muchas ocasiones aconsejé que pegaran el código y lo probaran sin llegar a escribir ni una sola línea...

Ahora estoy pensando en una implementación para enviar/recibir datos por formulario ... tal vez con 2 páginas (enviador/receptor)... pero lo haré en cuanto pueda /si es que puedo...)

Gracias de nuevo, y un abrazote desde la Costa del Sol.
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #20 (permalink)  
Antiguo 27/10/2005, 09:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Pero en un localhost, tal como yo pienso usarlo... y como creo que se debería usar, puede ser bastante útil.
También es útil de forma remota .. eso sí, protejido la ejecución de ese script por alguna gestión de usuarios (autentificación http .. sesiones .. etc). Y usado por tí o las personas de tu confianza.

Un saludo,
  #21 (permalink)  
Antiguo 27/10/2005, 16:26
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
sin duda sobra, pero si por alguna razón no redirecciona de una manera, lo haría de la otra...
Visto por ese lado... .

Cita:
Ahora estoy pensando en una implementación para enviar/recibir datos por formulario ... tal vez con 2 páginas (enviador/receptor)...
Haber, haber, haber... ¿cuál es tu idea??, en una de esas y hacemos cooperacha , si gustas, claro...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #22 (permalink)  
Antiguo 27/10/2005, 16:49
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por jam1138
Visto por ese lado... .

Haber, haber, haber... ¿cuál es tu idea??, en una de esas y hacemos cooperacha , si gustas, claro...

¡Je, je!... Sería para mí un honor que te animaras a participar en un proyecto conmigo, aunque por mi parte muy poco más podría aportar...

Supongo que con un par de textareas que representen a un formulario (y en tal caso bastaría con html plano) y el destinatario del mismo en donde sí sería necesario el uso de php... justamente me piqué con ver lo que recibe un CGI con las distintas posibilidades, como el tema en el que me contestaste sobre las URLs anidadas (creo que sabes a lo que me refiero...http://www.forosdelweb.com/f18/combinar-imagenes-dinamicas-gd-338527/ )

Mañana, veré como hacer el esqueleto...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #23 (permalink)  
Antiguo 29/10/2005, 17:09
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Ya hice el esqueleto y es bastante sencillo (no tengo intención de que esté bonito)

Para crear el archivo php:
<form name="destino" action="crearPhp.php" method="post" enctype="application/x-www-form-urlencoded" target="_blank">
destino:<br />
<textarea name="datos" cols=100 rows=7 ></textarea>
<br/>
<input type="submit" value="crear temporal.php" />
</form>

Incluso no sería necesario redireccionar (ya se encargaría el formulario o el enlace en mostrarlo...)

Y para el origen de los datos:

Código:
<form name="origen" >
origen:<br />
<textarea name="enviador" cols=100 rows=7 ></textarea>
<br />
<input type="button" value="crear origen" name="resultado" onclick="mostrar()" />
</form>
<iframe name="ventana" style="width: 90%; height: 300;"></iframe>
Y la parte javascript:

Código:
function mostrar()	{
	window.frames.ventana.document.clear();
	window.frames.ventana.document.open();
	window.frames.ventana.document.writeln(document.forms.origen.enviador.value);
	window.frames.ventana.document.close();
}
Creé este php de prueba:
Código:
<html>
<body>
<?php
// variables del formulario
$vars = $_GET;
foreach($vars as $clave => $valor)
 echo "\$_GET[$clave] = $valor<br />";
?>
</body>
</html>
Y con este "origen":
Código:
<html>
<body>
<a href="temporal.php?archivo=cualquiera.php?var1=1&var1=1&var2=2">probar</a>
</body>
</html>
Obtuve esto:

Código:
$_GET[archivo] = cualquiera.php?var1=1
$_GET[var1] = 1
$_GET[var2] = 2
Creo saber porqué no me ha funcionado el script del otro tema... si consigo aclararme, lo postearé.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:17.