PHP é à quinta-feira – Começar a programar
Mais uma quinta-feira...mais uma rubrica. Hoje, e uma vez que não sei muito bem o que se passa com o meu tempo (não dá para nada), a rubrica será mais prática do que teórica.
O objectivo é criar um serviço de ping, que através de uma página web vocês introduzem um endereço IP de uma máquina e a mesma página apresenta os resultados relativamente a tempos entre a vossa máquina e a máquina que se encontro num outro lado.
Este tipo de ferramenta (ping), é normalmente usado via MS-DOS ou shell no Linux para saber se uma determinada máquina está alive.
Para a elaboração do mesmo serviço mas desta vez online vamos começar seguir os seguintes passos:
1) criar formulário para o cliente inserir os dados referentes à máquina que quer pingar.
2) Mandar correr a instrução:
ping <endereço_ip_que_forneceram>, através do comando exec
3) Apanhar o resultado e colocar numa variável
4) Apresentar o resultado na nossa página
Nota: O seguinte código apresenta algumas novidades que ainda não foram referidas aqui nesta rubrica, como é o caso dos arrays, da função exec, da função isset
Aqui segue um contributo dado pelo "grande" Pedro Simões.
== Função isset ==
A função isset é bastante útil pois permite-nos "descobrir" se uma determinada variável se encontra definida ou se foi removida durante a execução do script. É bastante útil quando recebemos variáveis de um GET ou de um POST pois permite controlar as variáveis de entrada!
== Função exec ==
Esta é talvez uma das melhores funções do PHP e ao mesmo tempo é uma das mais perigosas: E porquê?
É ela que nos permite interagir directamente com o nosso sistema operativo. Querem saber qual o utilizador que está a executar o script? Simples, "echo exec('whoami');". Querem desligar o PC durante a execução de um script? Ainda mais simples "exec('reboot -t now');". Conseguem ver agora o perigo que representa a possibilidade de um utilizador executar comandos arbitrariamente no vosso script!!
NOTA: Devem configurar o numero de pacotes que o ping envia ou arriscam-se a ver o vosso script estar eternamente a pingar! Em DOS não precisam pois ele limita a 4, mas em linux devem usar a flag -c seguida do numero da vossa preferência.
CÓDIGO
RESULTADO
Este artigo tem mais de um ano
Não usem este tipo de coisas em sites publicos ou arriscam a segurança da vossa maquina! Não se devem usar comandos para a shell e normalmente essas funções estão disable.
CoolMaster
ah.. já para não falar na má pratica de programação que é, usar exec (e familia) para fazer as coisas.
@nrocha
SEM COMENTÁRIOS !!!!!!!!!!!!!!!!
O que? Não foi para levares a mal… só estou a explicar uma realidade a se ter em conta, não percebi o teu comentário!!!
@nrocha e eu não entendi o teu poder de interpretação em relação ao post que o Pedro Pinto elaborou.
Acho que está bem explícito que a função é perigosa, inclusive demonstra alguns dos perigos.
Começa logo no início da definição:
“Esta é talvez uma das melhores funções do PHP e ao mesmo tempo é uma das mais perigosas:”
Oh caraças, peço desculpa.. li o texto muito ao de leve porque estou no trabalho e não da para
perder muito tempo nestas coisas…
My fault :]
@nrocha
Não há problema. Mas temos de ter em atenção que aquilo que escrevemos é lido por uns milhares de pessoas.
Neste caso, o uso do exec, quando bem programado não representa qualquer risco para a nossa máquina, assim como outras programações que nós fazemos. Se estão bem definidas…
Cumps
PP
Podes evitar que o perigo de segurança seja reduzido mas… nesse exemplo que deste por exemplo pode-se facilmente executar qualquer comando, não só o ping, como deves saber. Normalmente os sys admins desligam essas funções por isso mesmo, eles sabem la se alguem vai ter preocupações a esse nivel.
Quanto ao ponto de má pratica de programação é inegavel.. usar chamadas ao sistema para alem de ser pouco “elegante” tambem faz com que o programa seja dependente de um sistema operativo. Devemos usar as ferramentas que a propria linguaguem nos dá para atingir os objectivos, a menos que seja um caso super especifico que de momento nem me lembro. Em 8 anos só me lembro de ter usado em TCL em 2001 e mesmo assim hoje em dia não entendo porque não usei a linguagem para fazer aquilo, que era uma coisa tão basica (era rm e mv [comandos unix]).
Bem, peço desculpa mais uma vez pela desatenção inicial :]
CoolMaster
Boa noite.
Independentemente da “má programação” apresentada, mostrou-nos mais potencialidades do PHP, só por isso o Sr. Pedro Pinto já merece os meus parabéns e concerteza da comunidade.
Mas, já agora, até considero de grande utilidade poder fazer ping. Agradeço que o Sr. nrocha coloque aqui uma solução “elegante” para o problema 😉
PS: Continuamos à espera do acesso à BD, lol. Se bem que já me fui desenrascando com tutoriais.
Abraços e não se esqueçam da gravata quando estão a programar, ajuda na elegância 😉
Remédios, deixo-te aqui um pequeno exemplo.
Guardas estas 8 linhas num ficheiro, Coneccao.php
E Depois para a usares, basta fazeres a chamada na página que desejares, através de um include.
Tens que por no topo da página.
Peço desculpa aos Autores do pplware por ter avançado um bocadinho na matéria.
Olha não ficou o codigo :f bah podem apagar ai o meu post de cima entao :\
@ Remédios
A maneira elegante é fazer uma implementação do RFC do ping. Ou seja, fazes tu o teu proprio “programa ping” em vez de usar comandos externos… os protocolos servem para alguma coisa e são para ser implementados nestas situações.
Se eu te pedisse para listares os ficheiros de um directorio numa linguagem qualquer de programação tu irias usar funcionalidades da linguagem (ou seja, programares) ou ias usar um programa externo tipo o dir (ms-dos) ou ls (unix shells) ? É obvio que a resposta correcta é usares features da linguagem, então porque é que aqui teria que ser diferente?
nrocha, sempre podes enviar uns tutoriais para o mail do pplware 😉
@nrocha
Xiiii, isso já é muito à frente para mim…
Programo em .NET, uma forma fácil de listar ficheiros nesta linguagem é usando as classes apropriadas(http://msdn2.microsoft.com/en-us/library/system.io.directoryinfo.aspx).
Já agora, se estiverem a pensar em criar também a secção tutoriais .NET, contem com a minha ajuda 😉
Abraço.
Viva!
Parabéns pela iniciativa e pela dedicação à actualização e manutenção deste blog que é sem dúvida uma grande ajuda para quem anda nestas andanças.
O que me leva a escrever é o facto de PHP p’ra mim ser a mesma coisa que lagares de azeite, e como eu não percebo nada de lagares de azeite…
Mas hoje resolvi testar a lição aqui apresentada, e o resultado não foi como o da imagem postada. O resultado que me deu foi o que se pode ver em http://www.23rula.com/erro_php.jpg
O código faz referência a uma variàvel “$dados”, mas ela nunca foi definida. Será por causa disso?
Desde já as minhas desculpas se a pergunta é absurda, mas eu não vejo mesmo um “ruminante macho” disto.
Abraço
Remédios se quiseres fazer um guia por semana 😉 estamos cá para o publicar e mostrar ao mundo e ao nrocha o que podes ensinar.
Tenho pena que o nrocha não se ofereça para semanalmente fazer um guia destes hehehehe
nrocha estou na tanga… mas a última parte era de pensares nisso 😉
Vou lançar o REPTO !!!!
Como para a semana não estou em Portugal, alguem se oferece para fazer a rúbrica para a proxima semana?
Cumps
PPinto
@ Vitor M.
Já pensei nisso, tenho algumas saudades em escrever documentação (se a memoria não me falha a ultima foi em 2003 e falava de manipulação de bits em C (já agora a titulo de curiosidade esta em http://coolmaster.webhs.org/ccppdocs/bits.txt ).
A questão é que tenho andado muito cansado para fazer algo do genero ou até ter novos projectos pessoais, já lá vão 19 meses de trabalho sem parar praticamente e só vou ter duas semaninhas de ferias no final do ano, talvez depois disso recupere a energia e até ganhe alguma motivação para o fazer.. vou pensar :]
CoolMaster
Posso mostrar o que já desenvolvi no acesso a base de dados… 🙂
(espero que o vosso pensamento não seja : “e o gajo a dar-lhe na base de dados, n se cala com isso”)
Abraço
Hmm.. Pedro Pinto… se ninguem se importar eu faço então.
Caso o Vitor e tu estejam de acordo o Vitor que conte com um email durante o fim de semana ou segunda feira :].
Óptimo nrocha.
Eu e o Victor estamos em sintonia.
Eu prometo que vou sair da praia para ler o teu e-mail.eh eh eh
podes mandar para ppinto at pplware dot com
Um abraço
Viva!
Já acompanho esta rúbrica desde que começou. Sou um leigo completo em php, n pesco nada, mas à algs anos que quero aprender.
Estou a escrever pois pensei que esta rúbrica me daria o alento necessário para entrar neste mundo do php, mas com um começo bom, dps começou a saltar cada vez mais, e para coisas mais complicadas, o que me fez perder toda a votnade que tinha…
Acho que deviam ter lições com um percurso mais ou menos definido… ir começando com coisas fáceis e passando para outras mais complicadas, mas tudo interligado entre si, e n coisas apanhadas quase “aqui e ali”… n sei se me fiz entender… as lições deviam respeitar um percurso, uma ordem… isto na minha opinião, que vale o que vale.
Abraço e parabéns pela iniciativa
Hehe.. sim mando para ti e para o Vitor.
Vitor, confirma-me só se ainda consultas aquele email do gmail que serviu para te mandar o artigo das licenças.
Como faço para obter as primeiras dicas. Obrigado
Este link(https://pplware.sapo.pt/?s=php+%C3%A9+%C3%A0+quinta-feira) tem um apanhado das dicas anteriores. Explora-o bem, deu trabalho a juntar tudo 😀
Muito obrigado Remédios, o link está ok…..
É minha impressão ou isto é o tutorial mais useless de sempre? 🙂
Quem quiser fazer pings vai andar a fazer scripts em php? Duvido. Justifica-se um tutorial para fazê-lo? Duvido.
E surge mais um crítico aos tutoriais de PHP do pplware! 😀
Boa tarde, seria possivel, voces escreverem a folha de codigo inteira,
Espero ansiosamente a resposta.