• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 4 januari 2026 om 10:58
  • Developer Gezocht

    K.Rens 30 december 2025 om 12:32
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04
  • Partner Gezocht om meerdere NFT Collecties op Open Sea te Plaatsen

    NFT Art Designer 1 maart 2025 om 14:08

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 28 december 2025 om 21:20
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

PHP Ping

  • K.Rens
  • 15 november 2015 om 15:08
  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 15 november 2015 om 15:08
    • #1

    Hallo,

    Dit keer zit ik eens vast.
    Ik twijfel of jullie een oplossing weten, maar wie niet waagt, niet wint.

    Doel:
    Ik wil vanaf mijn NAS kunnen pingen naar toestellen in mijn huis, liefst via PHP.

    Probleem:
    Mijn NAS draait een PHP versie vast van Synology. Ik kan er dus geen PEAR ping op zetten en ik kan geen exec uitvoeren.

    Ik kan wel pingen naar een poort met onderstaande code:

    PHP
    <?php
    if (!$socket = @fsockopen("192.168.1.63",12345, $errno, $errstr, 10))
    {
      echo "Offline!";
      }
      else
      {
        echo "Online!";
    fclose($socket);
    }
    ?>
    Toon Meer

    Maar het probleem is wel dat mijn toestellen standaard geen open poorten hebben.
    Ik zou overal bv een webserver op moeten installeren die luistert op poort 12345.

    Weten jullie een eenvoudige manier om toch te kunnen pingen naar lokale toestellen?

    Bedankt!

  • Guest, wil je besparen op je domeinnamen? (ad)
  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 15 november 2015 om 15:43
    • #2

    Ok, ondertussen heb ik exec kunnen aanzetten op mijn Synology NAS.

    vi /etc/php/php.ini
    En voeg daar onder [PHP] volgende regel toe:
    safe_mode_exec_dir =

    /usr/syno/sbin/synoservicectl --restart php-fpm
    /usr/syno/sbin/synoservicectl --restart httpd-user

    Maar goed, dit doe ik liever niet, want dan kan men via exec als er ooit een bug is meteen alles uitvoeren op de server.
    Iemand een beter idee?

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 15 november 2015 om 15:44
    • #3

    Volgens mij kun je geen poorten pingen, "ping" werkt niet met poorten.

    Zoals je zelf al aangeeft, je huidige toestand (NAS zonder ping/exec, toestellen zonder open poorten) biedt geen oplossing.

    Je zult deze vicieuze cirkel dus moeten doorbreken door 1 van de 2 zaken aan te passen, door ofwel ping/exec mogelijk te maken op je NAS ofwel poorten open zetten / software te installeren op je apparaten.

    Ofwel dat, of we zien nog een oplossing over het hoofd. Ik zou in eerste instantie iets met je NAS proberen te doen, omdat je dan maar op 1 plek iets aan hoeft te passen en je niet speciaal hiervoor poorten open hoeft te zetten / extra applicaties hoeft te installeren.

    Vraag is wel: wat voor taken vervullen die apparaten dan precies? Waarom is het belangrijk dat je weet dat deze nog actief zijn en waarom zou het aannemelijk kunnen zijn dat deze uitvallen?

    Oeh ik weet het, hang overal webcams op die de monitors van de apparaten observeert :p.

  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 15 november 2015 om 16:03
    • #4

    Het doel is om mijn Pulse-Station.com domotica automatisch en zelf te laten weten wanneer wie thuis is.
    Als gsm vriendin online is: is ze thuis.
    Idem voor mijn gsm.

    Ik zit echter nog wel ergens vast, nu denk ik dat exec toegestaan is, maar zelfs dan nog is de output raar.

    Code:
    $output = array();
    $test=exec('ping -w 1 192.168.1.1', $output);
    print_r($output);
    echo "\n";
    foreach( $output as $line ) {
    print $line . PHP_EOL ; }

    Output
    Array( [0] => PING 192.168.1.1 (192.168.1.1): 56 data bytes)

    Verwachtte output:
    Array( [0] =>PING 192.168.1.1 (192.168.1.1): 56 data bytes
    64 bytes from 192.168.1.1: seq=0 ttl=64 time=0.737 ms

    Waarom neemt hij die 2de regel met het antwoord niet mee in de $output variabele?
    Het is vast iets simpel dat ik over het hoofd zie?

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 15 november 2015 om 17:19
    • #5

    Als je de timeout instelt op 1 milliseconde (-w 1) gooit ie pakketjes die er langer over doen weg? En mogelijk is de output met deze flag anders?

  • GiovanniK
    Intermediate
    Ontvangen Reacties
    6
    Berichten
    252
    • 16 november 2015 om 15:31
    • #6

    Probeer het eens met shell_exec() ipv exec()?

    Ik dacht dat exec() alleen 1 regel returned en dat shell_exec() wel gewoon alle output doorgeeft.

  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 19 november 2015 om 23:26
    • #7

    Als ik shell_exec doe krijg ik volgende output:
    Array()
    Dat is minder dan me gewone exec.

    Zonder de -w 1 krijg ik:
    Array( [0] => PING 192.168.1.1 (192.168.1.1): 56 data bytes)
    Zelfde dus :(

  • Tredgy
    Developer
    Ontvangen Reacties
    1
    Berichten
    192
    • 20 november 2015 om 13:04
    • #8
    PHP
    function ping($ip) {
        $pingresult = exec("/bin/ping -c2 -w2 $ip", $outcome, $status);  
        if ($status==0) {
        $status = "Online";
        } else {
        $status = "Offline";
        }
        $message .= 'IP: '.$ip.', is  '.$status.'';    
        return $message;
    }
    
    
    ping("127.0.0.1");
    Toon Meer

    shell_exec geeft een full output maar is wel dangerous, maar zoals ik begrijp wil je alleen een bevestiging of die persoon 'thuis' is. Dan lijkt me dat dit voldoende is?

    Heb hier ook absoluut geen verstand van, maar je kan het proberen.


    PHP
    /bin/ping -c2 -w2 $ip

    Met vriendelijke groeten,
    Tredgy

    Bewerkt één keer, laatst door Tredgy (20 november 2015 om 13:11).

  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 20 november 2015 om 22:59
    • #9

    Bedankt, maar de output met jou code is gewoon een witte pagina.

  • xxx
    Professional
    Ontvangen Reacties
    1
    Berichten
    902
    • 20 november 2015 om 23:08
    • #10
    Citaat van K.Rens

    Bedankt, maar de output met jou code is gewoon een witte pagina.

    Return != echo

    Uniek mens.

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 21 november 2015 om 16:48
    • #11

    Een aantal zaken die mij nog te binnen schieten:

    - mogelijk moet je een limiet aan ping requests geven zoals Tredgy doet, anders wordt "output" misschien opgespaard totdat het proces wordt onderbroken (wat nooit gebeurt)

    - er lijkt een verschil te zijn tussen -w (lowercase) en -W (uppercase); -w is de deadline (in seconden) wanneer ping gestaakt wordt (ik weet ook niet of er in dat geval uberhaupt iets geretourneerd wordt?); -W is de timeout (in seconden) voor elk request/pakketje waarbinnen gewacht wordt op respons

    - mogelijk staat in jouw distributie ping op een compleet andere plaats; stel via het commando which ping vast waar het ping-commando zich bevindt en zorg dat je daar in je shell script naar verwijst

    Een minimale variant zou dus zoiets kunnen zijn:

    /pad/naar/ping -c 3 192.168.1.1

    - en tot slot moeten de apparaten elkaar kunnen bereiken, als er op een of andere manier een "muur" tussenzit kunnen deze sowieso niet met elkaar communiceren

  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 22 november 2015 om 23:20
    • #12

    Hallo,

    xxx: bedankt, maar had de return al aangepast naar echo.
    Maar had inderdaad gekunt ;)

    @FagorN
    ik ben zeker dat ping werkt, in ssh werkt het wel.
    Verder ping ik mezelf voorlopig, dus dat moet altijd werken.
    Het werkt in ssh ook.

    Ik denk dat die exec toch niet volledig door gaat tot het systeem of dat daar nog een andere beveiliging staat.

    Ik overweeg nu een volledig andere approach:
    Een shell scriptje dat pingt en de output elke x minuten naar een txt bestand schrijft.
    Php leest dan gewoon de inhoud van het bestand uit.
    Niet super netjes, maar bespaart me veel hoofdzorgen...

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 23 november 2015 om 14:08
    • #13
    Citaat van K.Rens

    ik ben zeker dat ping werkt, in ssh werkt het wel.

    Mja maar in een shellscript (of cron, om maar een dwarsstraat te noemen) zijn de paden naar dit soort commando's vaak niet bekend, daarom doe je er volgens mij verstandiger aan om het /pad/naar/het/commando toe te voegen. Probeer dit eens i.c.m. shell_exec(), de opmerking van @GiovanniK klinkt mij wel bekend in de oren.

    Mijn nickname bevat trouwens twee keer de letter n.

  • stijnhau
    Student
    Ontvangen Reacties
    3
    Berichten
    174
    • 23 november 2015 om 22:06
    • #14
    Code
    /**
         * Ping function in PHP
         *
         * @author  Stijn
         *
         * @param $host
         * @return bool
         */
        public static function ping($host)
        {
            $outcome = array();
            $status = array();
            exec("/bin/ping -c2 -w2 " . $host . " 2>&1", $outcome, $status);
            if ($status == 0) {
                return true;
            }
            return false;
        }
    Toon Meer

    Klein stukje code die werkt gebruik die zelf ook

    Check mijn projecten op stijnhau.be

  • K.Rens
    Eigenaar
    Ontvangen Reacties
    241
    Berichten
    4.472
    Filebase Entries
    2
    • 28 november 2015 om 22:37
    • #15

    @stijnhau
    Bedankt, heb volgende geprobeerd, maar de output is altijd "2".

    PHP
    function ping($host)
      {
       $outcome = array();
        $status = array();
         exec("/bin/ping -c2 -w2 " . $host . " 2>&1", $outcome, $status);
          if ($status == 0) {
    echo "1";
           return true;
            }
    echo "2";
             return false;
              }
    
    
    ping("127.0.0.1");
    Toon Meer
  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 29 november 2015 om 01:22
    • #16

    Je moet een count om je status zetten in je if. Want nu vergelijk je een array of die 0 is

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Tredgy
    Developer
    Ontvangen Reacties
    1
    Berichten
    192
    • 30 november 2015 om 15:14
    • #17

    Volgens http://php.net/manual/en/function.exec.php moet $output een array zijn. en $status is gewoon plain int ..

    Met vriendelijke groeten,
    Tredgy

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design