Auteur Topic: php ping werkt niet op Synology. Wel vanaf Lamp server.  (gelezen 3957 keer)

Offline Roger1968

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 18
php ping werkt niet op Synology. Wel vanaf Lamp server.
« Gepost op: 14 september 2013, 19:10:02 »
Hallo  allemaal.
Ik heb een php scriptje waarmee ik een ip kan pingen:
<?php
$str = exec("ping -n 1 -w 1 192.168.1.1", $input, $result);
if ($result == 0){
echo "ja";
}else{
echo "nee";
}
?>
Het script werkt wel op mijn pc waar ik Lamp server heb staan.
Maar als ik het script op mijn Synology nas uitvoer komt er altijd "nee".
Wat gaat er hier mis ?

Offline Plerry

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 17
  • -Ontvangen: 289
  • Berichten: 1.500
  • Tom Poes, verzin een list ...
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #1 Gepost op: 15 september 2013, 07:53:39 »
...<?php
$str = exec("ping -n 1 -w 1 192.168.1.1", $input, $result);
if ($result == 0){ ...>
Als ik hier naar de PHP functie "exec" kijk, zie ik:
  exec ( string $command [, array &$output [, int &$return_var ]] )
Je variabele $input is dus de output array van het exec command
In je PHP script bevat je variabele $result de return value van het exec command.
De return variabele van "ping" ligt echter niet ondubbelzinnig vast en kan per systeem anders zijn.
Die return value kan daarom helaas niet universeel worden gebruikt voor validatie van het slagen van een ping.

De standaard oplossing is om niet de return value te gebruiken, maar de output van het ping shell command.
Je kan dan kijken of daarin de substring "reply from" of "antwoord van" voorkomt, maar beter lijkt om te kijken
of daarin de string "TTL=" voorkomt. Dat is taal onafhankelijk.
Ook wordt aangeraden alles eerst naar lower-case te halen, en dan naar "ttl=" te zoeken omdat, systeem afhankelijk,
de output soms wel, soms geen hoofdletters bevat.
Ik gebruik deze "ttl=" methode met succes in diverse Batch en VBS scripts.
There are only 10 kinds of people: ... those who understand binary, and those who don't.

Offline Roger1968

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 18
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #2 Gepost op: 15 september 2013, 10:37:51 »
Bedankt voor je reactie Plerry.

Heb je een voorbeeld van je script dat bij mij zou kunnen werken ?
Ik probeer nu dit scriptje met de shell_exec maar ik moet waarschijnlijk nog een en ander aanpassen. Ik ben niet zo thuis in shell gebeuren. PHP begrijp ik meer van.

<?php
function pingAddress($ip)
    {
    $pingresult = shell_exec("start /b ping $ip -n 1");
    $dead = "Request timed out.";
    $deadoralive = strpos($dead, $pingresult);

  echo 'result='.$pingresult;

    if ($deadoralive == false)
    {
        echo "The IP address, $ip, is dead";
    }
    else
    {
        echo "The IP address, $ip, is alive";
    }

    }

pingAddress("127.0.0.1")
?>
Bovenstaand scriptje geeft ook steeds "dead" aan ongeacht welk ip ik ook invul. Ik ga nog eens verder zoeken.

edit:
Ik heb echo 'result='.$pingresult; aan het script toegevoegd.
Het result blijft echter leeg.
 

Offline Wyodor

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 1
  • -Ontvangen: 154
  • Berichten: 755
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #3 Gepost op: 15 september 2013, 10:48:18 »
Het werkt misschien niet omdat de php shell funktie standaard uitgeschakeld is :

http://php.net/manual/en/function.shell-exec.php

This function is disabled when PHP is running in safe mode.
  • Mijn Synology: DS720+
  • HDD's: 2 x ST4000VN008

Offline Roger1968

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 18
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #4 Gepost op: 15 september 2013, 11:10:11 »
Ik heb/had al in Config -> Webservices -> Tabblad PHP-instellingen PHP save_mode_exec_dir ..... afgevinkt.

Ik krijg ook geen output bij: print_r($pingresult);

edit:
Ik ben niet zo thuis in het rand gebeuren. Ik moet curl misschien installeren ? Ik ga eens uitzoeken wat dat is.

Offline Plerry

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 17
  • -Ontvangen: 289
  • Berichten: 1.500
  • Tom Poes, verzin een list ...
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #5 Gepost op: 15 september 2013, 12:56:33 »
Heb je een voorbeeld van je script dat bij mij zou kunnen werken ?
Ik schreef
> Ik gebruik deze "ttl=" methode met succes in diverse Batch en VBS scripts.
en gebruik dit tot nu toe niet in PHP.
Bovendien draai ik die scripts op diverse Windows machines, niet op mijn NAS.

In VBS gebruik ik de een Ping-functie:
Function Ping(Target)
    Dim shell, exec, results
    Set shell = CreateObject("WScript.Shell")
    Set exec = shell.Exec("ping -n 1 -w 1000 " & Target)
    results = LCase(exec.StdOut.ReadAll)
    Ping = (InStr(results, "ttl=") > 0)
End Function

En in een Windows batch/cmd-file zo (bij de Windows command prompt is "TTL=" altijd in hoofdletters):
PING -n 1 -w 1000 %ip_to_be_pinged% | FIND "TTL=" >NUL
IF %ERRORLEVEL% EQU 0 (_acties_bij_het_slagen_van_ping_)
Merk op dat in dit laatste geval de return value van de FIND wordt gebruikt, niet die van de PING.

In beide gevallen wordt een enkele ping gegeven (-n 1) en max. 1000ms op het antwoorde gewacht (-w 1000).

Maar, uiteraard moet je allereerst een (bruikbaar) antwoord terug krijgen van een exec-command ...
There are only 10 kinds of people: ... those who understand binary, and those who don't.

Offline Roger1968

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 18
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #6 Gepost op: 15 september 2013, 16:07:20 »
Ik iets gevonden wat bijna werkt:
<?php
$host = '192.168.1.250';
$port = 80;
$waitTimeoutInSeconds = 1;
if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){
    echo 'online';
} else {
    echo 'nee';
}
fclose($fp);
?>
Als er een ip is dat online is dan is de echo "online".
Maar als ik een ip opgeef dat offline is krijg ik een foutmelding:
Warning: fsockopen(): unable to connect to 192.168.1.250:80 (Connection timed out) in /volume1/web/t.php on line 7 nee Warning: fclose() expects parameter 1 to be resource, boolean given in /volume1/web/t.php on line 12
Kijken of ik die foutmelding dan maar moet gaan onderdrukken.

Offline nixx

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 1
Re: php ping werkt niet op Synology. Wel vanaf Lamp server.
« Reactie #7 Gepost op: 06 april 2014, 18:57:14 »
Hi Roger,

Is het nog gelukt om de ping fatsoenlijk aan de praat te krijgen via PHP?
Ik loop namelijk tegen hetzelfde probleem en heb weet vrijweinig van php etc om het zelf te fixen.

Heb namelijk een Wake On Lan pagina opgezet met een maat van me om de pc's in het thuisnetwerk aan te zetten, maar wil graag dat ik voor het aanzetten eerst kan zien welke pc's aanstaan en daarvoor wil ik ze dus pingen.

thanks
  • Mijn Synology: ds1813+


 

photoserver synology

Gestart door ErwinBoard Photo Station / Photos

Reacties: 2
Gelezen: 7019
Laatste bericht 20 juni 2006, 10:21:27
door Bob
Vragen over Synology DS-106e

Gestart door EastmasterBoard NAS hardware vragen

Reacties: 55
Gelezen: 38937
Laatste bericht 06 november 2006, 23:09:28
door Anonymous
Probleem met Synology DS-106e

Gestart door dutchmoleBoard NAS hardware vragen

Reacties: 8
Gelezen: 8036
Laatste bericht 03 september 2006, 22:37:32
door Anonymous
firmware update Synology DS-106e

Gestart door EastmasterBoard Web Station

Reacties: 10
Gelezen: 10983
Laatste bericht 06 september 2006, 12:31:33
door Anonymous
Synology DS-101j en HP PSC 1350

Gestart door AnonymousBoard Externe harddisks en Printers

Reacties: 3
Gelezen: 4405
Laatste bericht 04 augustus 2006, 00:26:05
door Anonymous