Saiu a edição 7 da revista “Full Circle” Vista Wordpress Gadgets 1.0

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

Criado por: Pedro Pinto em 6 de Dezembro de 2007 Deixar um comentário

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


Arquivado na categoria: Tutoriais

28 comentários a “PHP é à quinta-feira - Começar a programar”

  1. nrocha diz:

    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. nrocha diz:

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

  3. Pedro Pinto diz:

    @nrocha

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

  4. nrocha diz:

    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. BM diz:

    @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. nrocha diz:

    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. Pedro Pinto diz:

    @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. nrocha diz:

    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. Remédios diz:

    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. BM diz:

    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. BM diz:

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

  12. nrocha diz:

    @ 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. BM diz:

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

  14. Remédios diz:

    @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. Rafael diz:

    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. Vítor M. diz:

    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. Pedro Pinto diz:

    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. nrocha diz:

    @ 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. Remédios diz:

    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. nrocha diz:

    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. Pedro Pinto diz:

    Ó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. Bruno Pereira diz:

    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. nrocha diz:

    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. Jacvit diz:

    Como faço para obter as primeiras dicas. Obrigado

  25. Remédios diz:

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

  26. Jacvit diz:

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

  27. rikas diz:

    É 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. rikas diz:

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

Deixe o seu comentário

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste weblog ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. O autor deste weblog reserva-se, desde já, o direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação de seu autor (nome completo e endereço válido de email) também poderão ser excluídos.