PHP é à quinta-feira – Começar a programar

29 Comentários

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

Partilhar:
Tags:

Comentários

29

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de nrocha

    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

  2. Avatar de nrocha

    ah.. já para não falar na má pratica de programação que é, usar exec (e familia) para fazer as coisas.

  3. Avatar de Pedro Pinto

    @nrocha

    SEM COMENTÁRIOS !!!!!!!!!!!!!!!!

  4. Avatar de nrocha

    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!!!

  5. Avatar de BM

    @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:”

  6. Avatar de nrocha

    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 :]

  7. Avatar de Pedro Pinto
    Pedro Pinto

    @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

  8. Avatar de nrocha

    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

  9. Avatar de Remédios
    Remédios

    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 😉

  10. Avatar de BM

    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.

  11. Avatar de BM

    Olha não ficou o codigo :f bah podem apagar ai o meu post de cima entao :\

  12. Avatar de nrocha

    @ 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?

  13. Avatar de BM

    nrocha, sempre podes enviar uns tutoriais para o mail do pplware 😉

  14. Avatar de Remédios
    Remédios

    @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.

  15. Avatar de Rafael
    Rafael

    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

  16. Avatar de Vítor M.

    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 😉

  17. Avatar de Pedro Pinto
    Pedro Pinto

    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

  18. Avatar de nrocha

    @ 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

  19. Avatar de Remédios
    Remédios

    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

  20. Avatar de nrocha

    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 :].

  21. Avatar de Pedro Pinto
    Pedro Pinto

    Ó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

  22. Avatar de Bruno Pereira

    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

  23. Avatar de nrocha

    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.

  24. Avatar de Jacvit
    Jacvit

    Como faço para obter as primeiras dicas. Obrigado

  25. Avatar de Remédios
    Remédios

    Este link(http://www.pplware.com/?s=php+%C3%A9+%C3%A0+quinta-feira) tem um apanhado das dicas anteriores. Explora-o bem, deu trabalho a juntar tudo 😀

  26. Avatar de Jacvit
    Jacvit

    Muito obrigado Remédios, o link está ok…..

  27. Avatar de rikas

    É 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.

  28. Avatar de rikas

    E surge mais um crítico aos tutoriais de PHP do pplware! 😀

  29. Avatar de Anonimo
    Anonimo

    Boa tarde, seria possivel, voces escreverem a folha de codigo inteira,
    Espero ansiosamente a resposta.