no he dormido hoy... llevo absolutamente toda la noche buscando sin parar, en español, en ingles, en chino (okno xD)... en mi proyecto necesito dos cosas importantísimas... 1-Leer archivo online... LO HE CONSEGUIDO :'D
2-...
Necesito poder subir archivos al hosting en el que estoy registrado, ya sea por ftp, ssl o lo que sea que se pueda... archivo ini
He encontrado millones de dll, pero según he leido, eso solo funciona para windows y no para apps android que es lo que hago.
He visto GMechanism, pero veo que aloja en su propio servidor y no el mio..
He buscado por aqui en el foro y todos los temas similares que encontré están... sin responder... espero que no me pase a mi eso... pues absolutamente todo mi proyecto se irá directamente a la basura T_T
[spoiler]DIOS CLAMUD, YO TE INVOCO!! okno es broma tengo demasiado sueño xD CAFÉEE!!![/spoiler]
Una manera, sin recurrir a dlls ni GMechanism, sería crear un script PHP que correría en el servidor a la espera de la llegada del archivo, por ejemplo usando fopen en modo escritura. El script debería devolver un valor para saber si se ha recibido correctamente el archivo, y se debería emplear el evento asíncrono HTTP (En GM:S) para comprobar si el archivo se recibió correctamente, revisando si llegó ese valor.
El archivo ini puede enviarse mediante la función http_post_string(), pero si se manda así tal cual, probablemente todo el proceso falle, porque la URL no sería válida, entonces se necesita usar codificación de URL para que el envío sea correcto
http://help.yoyogames.com/entries/26963528-Encoding-URLs
NOTA: Existiría la posibilidad (quizás remota, quizás no tanto) de que alguien más podría aprovechar el script para subir archivos al servidor.
he seguido este tuto, creo que es lo que dices, y me sale upload failed todo el rato:
http://gmc.yoyogames.com/index.php?showtopic=635244&p=4639387
te refieres a algo asi?
EDITO: PD: cabe destacar que necesito que en el envio se CREE un nuevo archivo, trato de subir códigos de "niveles" en el cual se subirá en plan "mapa1.ini", "mapa2.ini", etc... que controlaré con un ciclo.
¿es muy necesario subir el archivo al hosting? si lo que necesitas es subir informacion al hosting, como highscore o un save, pudieras usar php y mysql, guardas la informacion atraves de una consulta insert y la sacas atravez de una select, esto lo puedes hacer con php para que despues interprete los datos y los sacas por un http_get como string, luego en el evento async http guardas el result en una variable y despues puedes hacer lo que quieras con esa informacion, ya sea explotarla si son varias cosas y cosas asi.
Cita de: penumbra en Noviembre 09, 2015, 10:15:43 AM
El archivo ini puede enviarse mediante la función http_post_string(), pero si se manda así tal cual, probablemente todo el proceso falle, porque la URL no sería válida, entonces se necesita usar codificación de URL para que el envío sea correcto
http://help.yoyogames.com/entries/26963528-Encoding-URLs
Hice una prueba con
http_post_string para transmitir un string con espacios y acentos y fue recibido correctamente. Al parecer, esta función ya incluye la codificación necesaria para enviar información.
jmbs, sí más que necesario es la BASE del juego.
Guacusio.. pues no sé que hago mal... O_o
ahora vuelvo a hacerlo y edito el post con imágenes de lo que hice, hasta un rato, espero que estés T_T vaya diita tengo hoy, encima peleándome con clavos que no paran de torcerse siempre, en una habitación repleta de fibra de vidrio que me pica todo el cuerpo, a eso le sumas el no dormir y los cafés.... xDDDD (me aburro y me gusta contar mi vida, no es pa dar pena, sino pa reir un rato xD)
Cita de: kostra en Noviembre 09, 2015, 12:54:45 PM
he seguido este tuto, creo que es lo que dices, y me sale upload failed todo el rato:
http://gmc.yoyogames.com/index.php?showtopic=635244&p=4639387
te refieres a algo asi?
EDITO: PD: cabe destacar que necesito que en el envio se CREE un nuevo archivo, trato de subir códigos de "niveles" en el cual se subirá en plan "mapa1.ini", "mapa2.ini", etc... que controlaré con un ciclo.
Si te aparece upload failed, significa que deberías recibir el string FAIL, lo cual implica que la página PHP no pudo abrir el archivo en modo escritura, que sería bastante improbable (exista el archivo o no). Indica qué es lo que devuelve la página PHP en el evento asíncrono HTTP, por ejemplo con un
show_message:
if (async_load[? 'id'] == ah_upload) {
show_message(async_load[? 'result']);
if (string_copy(async_load[? 'result'], 1, 2) == "OK") {
show_message_async("Upload OK.");
}
else {
show_message_async("Upload failed.");
}
}
Otra cosa: ¿creaste la carpeta
uploads en el mismo directorio donde se encuentra la página PHP?
me plasma un mensaje en blanco
una pregunta... la última parte del tuto ese, lo de:
var url_upload = "http://www.gamegeisha.net/gms_upload.php";
var fname = "myini.ini";
var f = file_text_open_read(fname);
var fcont = "";
while (!file_text_eof(f)) {
fcont += file_text_read_string(f) + chr(13) + chr(10);
file_text_readln(f);
}
file_text_close(f);
ah_upload = http_post_string(url_upload, 'fname=' + url_encode(filename_name(fname)) + '&fcont=' + url_encode(fcont));
en qué evento va? porque no dice nada o no lo veo y no me queda claro, entonces he probado tanto en HTTP como en una tecla como digamos, para "llamarlo"
todos los pasos que he hecho, lo que tengo...
1-El archivo gms_upload.php en el directorio /uploads/
https://gyazo.com/012b2b7fd1073e2e640effef94c7b22f
2-el script del url_encode
https://gyazo.com/e79513ff1168c422fd1eb5342e523ea5
3-evento create
https://gyazo.com/164e75f0a04ddf0fa1d167e9fcdac01c
4-Evento HTTP
https://gyazo.com/b6688258bc6c9fe464d231b2e6da9d54
5-Evento tecla cntrl (también lo he probado en el HTTP, pero de esa manera nisiquiera me aparece lo del failed)
https://gyazo.com/cf63a70b1758d75fb2639adeae3c0913
6-el resultado al pulsar la tecla cntrl
https://gyazo.com/9d82ea5a0c60733b8dd7fe271c20a356
Cita de: kostra en Noviembre 09, 2015, 06:30:50 PM
me plasma un mensaje en blanco
una pregunta... la última parte del tuto ese, lo de:
var url_upload = "http://www.gamegeisha.net/gms_upload.php";
var fname = "myini.ini";
var f = file_text_open_read(fname);
var fcont = "";
while (!file_text_eof(f)) {
fcont += file_text_read_string(f) + chr(13) + chr(10);
file_text_readln(f);
}
file_text_close(f);
ah_upload = http_post_string(url_upload, 'fname=' + url_encode(filename_name(fname)) + '&fcont=' + url_encode(fcont));
en qué evento va? porque no dice nada o no lo veo y no me queda claro, entonces he probado tanto en HTTP como en una tecla como digamos, para "llamarlo"
si te fijas ese codigo es un ejemplo completo(te le puse anotaciones en español)
var url_upload = "http://www.gamegeisha.net/gms_upload.php"; //url a la que se subira el archivo
var fname = "myini.ini"; //el nombre del archivo
var f = file_text_open_read(fname); //se abre el archivo a subir para leerlo
var fcont = ""; //se crea la variable donde se guardara el contenido del mismo
//desde aqui
while (!file_text_eof(f)) {
fcont += file_text_read_string(f) + chr(13) + chr(10);
file_text_readln(f);
}
file_text_close(f);
//hasta aqui se va leyendo cada linea del archivo y se cierra el archivo
ah_upload = http_post_string(url_upload, 'fname=' + url_encode(filename_name(fname)) + '&fcont=' + url_encode(fcont)); //esto sube el archivo a tu php con las dos variables que este toma
/*
a url_upload(http://www.gamegeisha.net/gms_upload.php)
sube o envia la siguiente informacion como variables superglobales en post(la informacion no se ve en el link):
fname = nombre del archivo codificado
fcont= el contenido del archivo codificado
*/
entonces este codigo esta completo, y es el que deberias de colocar dentro de tu ejecutor sin absolutamente mas nada dentro del codigo de game maker.
esto va dentro de tu php
<?php
//CORS header
header("Access-Control-Allow-Origin: *");
//Capture parameter
$fname = $_POST['fname']; //nombre del archivo que recibira como variable superglobal en modo post
$fcont = $_POST['fcont']; // contenido del archivo
//Write the file
if ($f = fopen("uploads/$fname", 'w')) {
fwrite($f, $fcont);
fclose($f);
echo "OK";
}//esto basicamente crea el archivo con el nombre que le diste, luego lo escribe y al final lo cierra
else {
echo "FAIL";//esto solo ocurre si el archivo no tiene nombre, o la informacion se envia incorrectamente
}
?>
entonces con solo estas dos cosas deberia de funcionar, el primero en el gatillador de la accion y el segundo en tu php, esto es para subir el archivo, para descargarlo tendrias que usar el http_get_file
se me olvidaba, en el mensaje que te mostrara no coloques directamente el mensaje a mostrar, ponle que muestre el result para saber exactamente que te sale, otra cosa si usas 000webhost, que me parece eso por el editor de php que mostraste, ellos creo que no permiten ni subir ni descargar archivos a sus servidores, solo te permite abrir paginas y ya, te lo digo porque ya yo lo intente.
https://gyazo.com/a63a5acfef797579a0e598e400251a68
[spoiler]Me has salvado la vida, no te imaginas lo inmensamente agradecido que estoy, de todos, seguro que ya me dieron antes respuesta buena pero no entendí, esto es nuevo para mi... acabo de completar la fase más dificil e importante de todo mi proyecto!! OS HAMO!!!!!!!![/spoiler]
Hola, perdón por la molestia, y más que el tema está resuelto...pero...
no logro comprender del todo cómo funciona y cómo se hace este mecanismo para subir archivos... si no es mucha molestia, agradecería me explicaran algunas cosas:
1)- Citar(...)otra cosa si usas 000webhost, que me parece eso por el editor de php que mostraste, ellos creo que no permiten ni subir ni descargar archivos a sus servidores, solo te permite abrir paginas y ya, te lo digo porque ya yo lo intente.
¿Qué servidor online debo usar para que pueda guardar los datos? ¿Cuál me recomiendan? ¿son gratuitos?
2)- ¿Cuántos scripts PHP debo tener, y dónde?
3)- ¿Qué significa y dónde va este código? :
Citarvar url_upload = "http://www.gamegeisha.net/gms_upload.php"; //url a la que se subira el archivo
var fname = "myini.ini"; //el nombre del archivo
var f = file_text_open_read(fname); //se abre el archivo a subir para leerlo
var fcont = ""; //se crea la variable donde se guardara el contenido del mismo
//desde aqui
while (!file_text_eof(f)) {
fcont += file_text_read_string(f) + chr(13) + chr(10);
file_text_readln(f);
}
file_text_close(f);
//hasta aqui se va leyendo cada linea del archivo y se cierra el archivo
ah_upload = http_post_string(url_upload, 'fname=' + url_encode(filename_name(fname)) + '&fcont=' + url_encode(fcont)); //esto sube el archivo a tu php con las dos variables que este toma
/*
a url_upload(http://www.gamegeisha.net/gms_upload.php)
sube o envia la siguiente informacion como variables superglobales en post(la informacion no se ve en el link):
fname = nombre del archivo codificado
fcont= el contenido del archivo codificado
*/
3)- Realmente no entendí este tema. ¿Podrían explicarme resumidamente los pasos a seguir para poder subir archivos al hosting?
Si no es mucho pedir, agradecería eternamente si me respondieran esto...GRACIAS :'( :'( :'( :'( :D :D
Cita de: NiuWeb en Noviembre 17, 2015, 06:26:56 PM
Hola, perdón por la molestia, y más que el tema está resuelto...pero...
no logro comprender del todo cómo funciona y cómo se hace este mecanismo para subir archivos... si no es mucha molestia, agradecería me explicaran algunas cosas:
1)- Citar(...)otra cosa si usas 000webhost, que me parece eso por el editor de php que mostraste, ellos creo que no permiten ni subir ni descargar archivos a sus servidores, solo te permite abrir paginas y ya, te lo digo porque ya yo lo intente.
¿Qué servidor online debo usar para que pueda guardar los datos? ¿Cuál me recomiendan? ¿son gratuitos?
2)- ¿Cuántos scripts PHP debo tener, y dónde?
3)- ¿Qué significa y dónde va este código? :
Citarvar url_upload = "http://www.gamegeisha.net/gms_upload.php"; //url a la que se subira el archivo
var fname = "myini.ini"; //el nombre del archivo
var f = file_text_open_read(fname); //se abre el archivo a subir para leerlo
var fcont = ""; //se crea la variable donde se guardara el contenido del mismo
//desde aqui
while (!file_text_eof(f)) {
fcont += file_text_read_string(f) + chr(13) + chr(10);
file_text_readln(f);
}
file_text_close(f);
//hasta aqui se va leyendo cada linea del archivo y se cierra el archivo
ah_upload = http_post_string(url_upload, 'fname=' + url_encode(filename_name(fname)) + '&fcont=' + url_encode(fcont)); //esto sube el archivo a tu php con las dos variables que este toma
/*
a url_upload(http://www.gamegeisha.net/gms_upload.php)
sube o envia la siguiente informacion como variables superglobales en post(la informacion no se ve en el link):
fname = nombre del archivo codificado
fcont= el contenido del archivo codificado
*/
3)- Realmente no entendí este tema. ¿Podrían explicarme resumidamente los pasos a seguir para poder subir archivos al hosting?
Si no es mucho pedir, agradecería eternamente si me respondieran esto...GRACIAS :'( :'( :'( :'( :D :D
1. Yo usé 000webhost y hace muy poco sufrieron un ataque y estuvieron inutilizables por cerca de una semana. Como no sabía cuánto tiempo seguirían así y al ver pasar los días sin que lo solucionaran, me cambié a hostinger y hasta ahora no me arrepiento: no tiene publicidad ni le agrega basura a las respuestas de las solicitudes http. Aún no he probado las funciones php para crear y editar archivos ya que guardo la información subida en una base de datos MySQL, así que no puedo opinar sobre eso.
2. basta con uno, y su ubicación es la misma que le das en la url cuando haces el post:
http://www.gamegeisha.net/gms_upload.php
3. El código que indicas va donde tú quieras hacer la subida del archivo. Lo que hace es leer línea por línea el texto del archivo en tu equipo y lo almacena en una variable string (fcont). Luego hace una petición post para enviarle a la página php 2 variables: una con el nombre del archivo que debe crear en el servidor (fname), y otra con el contenido (fcont).
El archivo php lo que debe hacer es tomar el contenido de la variable fcont que acaba de recibir y luego escribir ese string en un nuevo archivo de texto con el nombre fname.
En resumen:
-Crea una cuenta en un hosting
-Obtén la url de tu carpeta (normalmente se llama public_html) y dentro de ella crea un archivo llamado gms_upload.php
-Te sugiero que en vez de trabajar con el editor online del host, lo hagas con notepad++ y que subas el archivo mediante un cliente ftp, como filezilla. Eso es debido a que si usas caracteres con acentos el archivo php debe estar formateado en utf-8, cosa que sí puede hacer notepad++ pero no necesariamente el editor del host. Yo ya perdí varios días peleando con eso hasta que me di cuenta.
-Escribe el código que recibe los datos de GMS y que crea el archivo en el server
-En GMS, escribe el código que envía la información (el que tienes arriba) en el evento donde quieres enviarlo. Puede ser un create, una alarma, un mouse press, etc. pero la idea es hacerlo una sola vez (es decir, no uses step)
-En el evento HTTP puedes recibir la respuesta del servidor (si la hay). Por ejemplo, un string "ok" que signifique que el archivo fue correctamente guardado en el server. Para hacerlo, tienes que agregar un código en el php que devuelva ese string "ok".
-De acuerdo a mi experiencia, la función url_encode que tienes en el código no se necesita ya que GMS convierte automáticamente los caracteres especiales a su codificación url.
-Si tienes dudas sobre el código php, este es un buen tutorial que encontré para principiantes:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193 (http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193)
Me aparecen estor errores:
############################################################################################
ERROR in
action number 1
of Key Press Event for <Ctrl> Key
for object oPublish:
File is not opened for reading.
at gml_Object_oPublish_KeyPressed_CTRL_1 (line 6) - while (!file_text_eof(f)) {
############################################################################################
___________________________________________
############################################################################################
ERROR in
action number 1
of Key Press Event for <Ctrl> Key
for object oPublish:
File is not opened for reading.
at gml_Object_oPublish_KeyPressed_CTRL_1 (line 7) - fcont += file_text_read_string(f) + chr(13) + chr(10);
############################################################################################
___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Key Press Event for <Ctrl> Key
for object oPublish:
DoAdd :: Execution Error
at gml_Object_oPublish_KeyPressed_CTRL_1 (line 7) - fcont += file_text_read_string(f) + chr(13) + chr(10);
############################################################################################
Qué hago? :'( :'( :'(
PD: tengo los códigos iguales a como están en el tema, sólo que, claramente, cambie la URL por la mía
Cita de: NiuWeb en Noviembre 18, 2015, 02:26:32 AM
PD: tengo los códigos iguales a como están en el tema, sólo que, claramente, cambie la URL por la mía
Si sólo cambiaste el URL, ¿tu ini tiene el mismo nombre que el del ejemplo?
Sí. ¿Existirían conflictos con ese nombre?
Cita de: NiuWeb en Noviembre 18, 2015, 02:42:34 AM
Sí. ¿Existirían conflictos con ese nombre?
El nombre del ini está bien, pero ¿agregaste el archivo myini.ini a los included files?
no, no lo hice... ¿debo hacerlo?
tú qué crees?
Ah...ya...xD
pero igualmente, no me permite publicar, me aparece "Upload Falied" todo el tiempo
EDITO: aunque me aparece Upload Falied, me guarda el archivo al server. Pero este aparece vacío
EDITO DE NUEVO:publica bien, pero no se corrige lo de "Upload Falied"
¿Dónde te sale Upload Failed?
En el momento que presiono la tecla de acción del GMS (control), me muestra el mensaje
https://gyazo.com/05400e3d4d9db554f76cdb70edece045
Momento de recurrir al evento asíncrono para consultar las claves "status" y "http_status", que deberían dar más detalles sobre el error.
Cita de: penumbra en Noviembre 18, 2015, 03:24:30 AM
Momento de recurrir al evento asíncrono para consultar las claves "status" y "http_status", que deberían dar más detalles sobre el error.
Y cómo uso esas claves? me podrías explicar?
Cita de: NiuWeb en Noviembre 18, 2015, 02:54:34 AM
EDITO DE NUEVO:publica bien, pero no se corrige lo de "Upload Falied"
¿Publica bien aunque aparezca el mensaje de error=?
Al revés. Muestra el mensaje de error aunque publique bien
Cita de: NiuWeb en Noviembre 18, 2015, 03:52:33 AM
Al revés. Muestra el mensaje de error aunque publique bien
Creo que es lo mismo que dije, pero, es decir, ¿el archivo llega de manera correcta?
En el objeto que tiene el evento HTTP, crea una variable status = 1
En el evento HTTP, haz
if (async_load[? 'id'] == ah_upload)
{
status = async_load[? 'status']
}
Imprime en pantalla la variable status y revisa si su valor cambia cuando se envía el archivo. Si adquiere un valor menor a 0, es que hay un error, si se pone en 0, es que la cosa funcionó.
Sí, el archivo llega bien.
Debería de mostrar el mensaje de acuerdo con el valor de status?
algo así?:
[gml]
if status <0
show_message("Update falied");
else
show_message("Ok!");
[/gml]
Sí, pero sería mejor:
[gml]
if (status == 0)
show_message("Ok!");
else if (status < 0)
show_message("Update falied");
[/gml]
Se supone que el código GML que estás usando está correcto, así que si se produce un fallo, quizás necesites probar con otro servicio de hosting, o, lo único que se me ocurre aparte es que no uses el script url_encode() en la función http_post_string(). Según mencionó Guacusio, él no ha necesitado codificar la URL. No se perdería nada con probar a ver si el archivo llega sin usar codificación (pero si todo funciona y llega bien, como dices, NO TOQUES YA NADA) :p
Gracias penumbra!
Ahora, este tema se ha solucionado 2 veces...xD
PD: a mí no me hizo falta incluir nada en included files :/
Cita de: kostra en Noviembre 18, 2015, 02:55:15 PM
PD: a mí no me hizo falta incluir nada en included files :/
Después de entender cómo funciona, a mí tampoco. Lo que pasa es que el archivo que quieres subir
DEBE EXISTIR, o si no, aparecerán los errores que mencioné hace poco. Y eso lo logras hacer
o incluyéndolo en incluided files, o ya teniéndolo creado con las funciones INI.
PD: No sé para qué escribo esto...xD aunque tal vez a alguien le sirva :D :D
está bien que lo hayas escrito, es un bien dato pienso yo