saramgsilva Posted May 14, 2006 at 02:30 AM Report #27317 Posted May 14, 2006 at 02:30 AM Boas, é o seguinte eu tenho andado a tentar implementar o seguinte: (é para outro fim mas quero aprender a fazer o básico ) tenho uma pagina com um form e a respectiva textarea onde vou inserir um valor, e primo o botão somar, ao primir, um outro ficheiro de php, vai mandar o valor inserido para a shell e depois manda executar um programa que tenho em C, que consiste em ler 1 numero e somar o numero com 4, sim muito simples.... O programa executa, e recebo o resultado, o problema está é que não consigo fazer com que o exe receba o valor que mando.... não percebo porque... já tentei várias coisas que ja nem sei as quantas ando... Deixo aqui o meu codigo, para me poderem dar uma ajuda :dontgetit: indextofas.html <form action="executatofas.php" method="POST"> <TABLE align=center> <TBODY> <TR align=middle> <TD> </A> </TD> <TD>Mensagem <HR></TD> <TD> </A> </TD> </TR> <TR align=middle> <TD> </A> </TD> <TD><TEXTAREA name="numero" rows=5 cols=28></TEXTAREA></TD> </TR> <TR align=middle> <TD> </A> </TD> <TD> <INPUT TYPE="submit" VALUE="Somar"> <INPUT TYPE="reset" VALUE="Reset"> </TD> </TR> </TBODY> </TABLE> executatofas.php <? $numero=$_POST['numero']; echo $numero; // para enviar para a Shell $e = escapeshellcmd($numero); // para mandar executar $ret= shell_exec("soma"); echo $ret; ?> e deixo em anexo o exe que estou a usar e o respectivo codigo..... obrigada tofas 🙂 www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Ped@ntilva Posted May 15, 2006 at 04:44 PM Report #27548 Posted May 15, 2006 at 04:44 PM Eu nunca fiz algo do genero mas vou tentar dar uma ajudinha. Tu estas a chamar o programa em c atraves do $ret= shell_exec("soma"); Mas onde é que o programa recebe o scanf("%d",&a); é no $e = escapeshellcmd($numero);?????
saramgsilva Posted May 16, 2006 at 11:50 PM Author Report #27778 Posted May 16, 2006 at 11:50 PM ja me disseram qual era 1 dos problemas: no programa em C, tenho que fazer: int main (int argc, char * argv[] ){ ..... } e eu estava a fazer int main(){ ....} e depois no php tambem estou a fazer algo mal, ja ainda nao vi o que era...tenho que ver... $e = escapeshellcmd($numero); -> para mandar o valor para a shell... $ret= shell_exec("soma"); acho que falta aqui algo.... 😛 www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
entering Posted May 18, 2006 at 08:53 PM Report #28155 Posted May 18, 2006 at 08:53 PM fico perplexo com a qualidade de coding em c no programa em C, tenho que fazer: int main (int argc, char * argv[] ){ ..... } e eu estava a fazer int main(){ ....} nao necessariamente ate podia fazer: int main (int conchina1, char **painatal2) { ... } O que realmente importa saber é que a primeira variavel recebe o numero de argumento e devera ser declarada como um inteiro, a segunda var recebe ou aponta para os argumentos passados. Os nomes que das as variaveis é indiferente! Por convençao costuma-se dar argc (argument counter) e argv. Já agora é de referir que ainda pode ser usado outra variavel para armazenar o ambiente. Comando env em unix. ficaria algo do genero int main(int argc,char *argv[],char *env[]) Ou entao podes trata-lo com apontador, isso ja depende do que precisas. Quanto ao PHP teras que enviar alem do nome do programa tb os argumentos! Nao me parece que estejas a fazer isso.
TheDark Posted May 19, 2006 at 02:28 AM Report #28205 Posted May 19, 2006 at 02:28 AM Não consegui sacar o rar anexo (como não consigo sacar nenhum ficheiro anexo neste fórum 😉), por isso não sei o que lá fizeste e vou falar às cegas. no ficheiro php: $e = escapeshellcmd($numero); Esta linha "só" serve para segurança; o que faz é retornar uma string que seja segura para passar ao sistema operativo, isto é, que não permita executar outros comandos ao executar o "outro" programa. Ou seja, essa linha não envia absolutamente nada para lado nenhum. Para enviares o valor para o teu programa, tens que incluir o $e em: $ret= shell_exec("soma $e"); É aqui que entram os argumentos da função main: argc e argv, que como já foi dito só têm esses nomes por convenção, e podem ser substituídos por quaisquer outros. Já agora, argv significa "argument values" ou "arguments vector", conforme o gosto. Ao fazeres shell_exec("soma $e"), argc ficará com o valor 2 (o nome do programa também é um argumento), e o array argv ficará com "soma" no índice 0, e o valor de $e no índice 1. Se tivesses mais argumentos, iriam para as posições seguintes do argv, e argc tambem seria incrementado (obviamente :😛 ) Desaparecido.
saramgsilva Posted May 19, 2006 at 11:04 AM Author Report #28256 Posted May 19, 2006 at 11:04 AM TheDark pois...estava a fazer asneiras...mas ainda não consigo 😉 index.php <form action="executatofas.php" method="POST"> <TABLE align=center> <TBODY> <TR align=middle> <TD> </A> </TD> <TD>Mensagem <HR></TD> <TD> </A> </TD> </TR> <TR align=middle> <TD> </A> </TD> <TD><TEXTAREA name="numero" rows=5 cols=28></TEXTAREA></TD> </TR> <TR align=middle> <TD> </A> </TD> <TD> <INPUT TYPE="submit" VALUE="Somar"> <INPUT TYPE="reset" VALUE="Reset"> </TD> </TR> </TBODY> </TABLE> </form> executa.php <? $numero=$_POST['numero']; echo $numero; $ret= shell_exec("soma $numero"); echo $ret; ?> código C : somar.c #include<stdio.h> int main(int argc, char * argv[] ) { int a=0; int soma; a=argc; printf("Escreva dois inteiros 'a' -- > \n"); // scanf("%d",&a); removi isto... :/ soma=a+4; printf(" -- A soma=%d\n",soma); return 0; } www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
entering Posted May 19, 2006 at 01:15 PM Report #28286 Posted May 19, 2006 at 01:15 PM ai meu deus se lesses o meu post argc (argument counter) simplesmente tem o numero de argumentos passados os argumentos em si estao contidos no argv, o que te interessa neste caso esta no argv[1] mas atencao é uma string nao podes simplesmente fazer a=argv[1]; !!! usa a atoi para converter para um inteiro gosto da tua assinatura 'imagem' Pascal C HTML SQL JAVA C++ PHP, se fosse a ti acrescentava a C e C++ (muito básico)
saramgsilva Posted May 19, 2006 at 02:14 PM Author Report #28302 Posted May 19, 2006 at 02:14 PM ai meu deus se lesses o meu post Tinha lido...mas na hora de implementar não li outra vez e por isso fiz asneiras... Até mesmo o TheDark disse o mesmo, mas pensei mal quando tentei resolver.... ? 😕 argc (argument counter) simplesmente tem o numero de argumentos passados os argumentos em si estao contidos no argv, o que te interessa neste caso esta no argv[1] mas atencao é uma string nao podes simplesmente fazer a=argv[1]; !!! usa a atoi para converter para um inteiro já corri e já implementei... e já funciona!!!! 😛 Solução: index.php <form action="executatofas.php" method="POST"> <TABLE align=center> <TBODY> <TR align=middle> <TD> </A> </TD> <TD>Mensagem <HR></TD> <TD> </A> </TD> </TR> <TR align=middle> <TD> </A> </TD> <TD><TEXTAREA name="numero" rows=5 cols=28></TEXTAREA></TD> </TR> <TR align=middle> <TD> </A> </TD> <TD> <INPUT TYPE="submit" VALUE="Somar"> <INPUT TYPE="reset" VALUE="Reset"> </TD> </TR> </TBODY> </TABLE> </form> executa.php <? $numero=$_POST['numero']; echo $numero; $ret= shell_exec("soma $numero"); echo $ret; ?> código C : somar.c #include<stdio.h> #include<stdlib.h> int main(int argc, char * argv[] ) { int a=0; int soma; a=atoi(argv[1]); printf("Escreva dois inteiros 'a' -- > \n"); // scanf("%d",&a); removi isto... :/ soma=a+4; printf(" -- A soma=%d\n",soma); return 0; } } E já percebi como funciona!! 😉 Para acabar o meu post: gosto da tua assinatura 'imagem' Pascal C HTML SQL JAVA C++ PHP, se fosse a ti acrescentava a C e C++ (muito básico) Quando tiveres comentários destes, peço te que me mandes mensagem privada! Pois não gostei nada de ler o que escreveste... É triste comentários do género.... e olha nem comento mais porque coisa destas... nem merecem comentário... :nono1: www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now