Visualizzazione risultati 1 fino 17 di 17

Discussione: PHP - no System() - come fare ping?

  1. #1
    Guest

    Question PHP - no System() - come fare ping?

    salve, mi serverebbe fare un ping a un IP, per vedere se il server è on-line, ma visto che la funzione System è stata disabilitata( e mi domando perché non basti filtrare le chiamata alla consolle) chiedo io, come fare?

    volevo fare una cosa così:

    Codice:
    <?php
    			$read_file=fopen($FILE,"r");
    			$dim_file = filesize($FILE);
    			$ip = fread($read_file,$dim_file);
    			fclose($read_file);
    			echo $ip;
    			if(system("ping -c 1 $ip &>/dev/null && echo 'ok' || echo 'no' ")=='ok'){
    				echo '<meta http-equiv="Refresh" content=0;url="'.$ip.$PORT.'">';
    			}else{
    				echo "<center><H1>The server isn't on-line :(</H!1></center>";
    			}
    ?>
    ci sarebbe alternativa ad usare system() ?

    ciao e grazie in anticipo ;)
    Ultima modifica di matt91web : 22-12-2010 alle ore 17.35.48

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    potresti usare servizi esterni...

    Ciao!

  3. #3
    Guest

    Predefinito

    la cosa é già complicata senza utilizzare servizi esterni. non c'è proprio modo su altervista per fare ping?

  4. #4
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da matt91web Visualizza messaggio
    salve, mi serverebbe fare un ping a un IP, per vedere se il server è on-line
    Forse è una stupidata ma ci provo: se il tuo problema è solo capire se un sito è on-line allora puoi utilizzare questo codice:

    Codice PHP:
    <?php

    $url
    = "http://miki92.altervista.org/";

    $fp = fsockopen($url, 80, $errno, $errstr, 30);

    if(
    $fp){

    echo
    "SITO ON-LINE";

    }else{

    echo
    "SITO OFF-LINE";

    }

    ?>
    Purtroppo se non erro* puoi utilizzare (come porta) solo la 80 e 8080 (che dovrebbero essere quelle "standard" di un sito web).


    * Ho notato vari cambiamenti ed essendo stato lontano da casa per un po' non so se si sono aggiornati.
    Apprezzi l'aiuto? Offrimi un caffè!

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Forse è una stupidata ma ci provo: se il tuo problema è solo capire se un sito è on-line allora puoi utilizzare questo codice:

    Codice PHP:
    <?php

    $url
    = "http://miki92.altervista.org/";

    $fp = fsockopen($url, 80, $errno, $errstr, 30);

    if(
    $fp){

    echo
    "SITO ON-LINE";

    }else{

    echo
    "SITO OFF-LINE";

    }

    ?>
    Purtroppo se non erro* puoi utilizzare (come porta) solo la 80 e 8080 (che dovrebbero essere quelle "standard" di un sito web).


    * Ho notato vari cambiamenti ed essendo stato lontano da casa per un po' non so se si sono aggiornati.
    hai centrato in pieno ;) grazie mille ora vedo se funziona, sto facendo un programmino in php....

    ciao e grazie ancora

    ----------

    no, ho esultato troppo presto, mi restituisce sempre che il server è on-line, anche mettendo dentro un ip a caso, non funziona :(
    Ultima modifica di andreafallico : 27-12-2010 alle ore 13.01.27 Motivo: usa il tasto Edita

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Prova a modificare la condizione dell'if, verificando che $errorno sia uguale a zero.
    Edit: sembra che non funzioni. Se è un server HTTP, puoi effettuare una richiesta HEAD e verificare che risponda.
    Ultima modifica di karl94 : 22-12-2010 alle ore 18.04.35

  7. #7
    Guest

    Predefinito

    sia con $errno che con $errstr mi da la condizione sempre vera

  8. #8
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Ho modificato il messaggio, leggi sopra.

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Prova a modificare la condizione dell'if, verificando che $errorno sia uguale a zero.
    Edit: sembra che non funzioni. Se è un server HTTP, puoi effettuare una richiesta HEAD e verificare che risponda.
    non ho capito come

    --------

    mi sa che con altervista non si può fare, dovrò vedere se altri fornitori di servizio lo permettono...
    Ultima modifica di andreafallico : 27-12-2010 alle ore 13.03.16

  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    fsockopen restituisce false se non è stato possibile avviare il socket.
    Non ti basta fare quel semplice controllo, ma devi andare più affondo: devi inviare una richiesta completa e interpretare la risposta del server.

    Io ti ho scritto questo semplice script:
    Codice PHP:
    <?php
    $ip
    = '66.102.7.99'; // va bene anche un host, privo di http e altri parti di url. es: www.google.com.

    $fp = fsockopen($ip, 80, $errno, $errstr);

    if(!
    $fp) {
    die(
    $errstr . '(' . $errno . ')');
    }

    $headers = "HEAD / HTTP/1.0\r\nHost: $ip\r\nConnection: close\r\n\r\n"; // GET -> HEAD, su consiglio di karl94
    fputs($fp, $headers);

    $output = '';

    while(!
    feof($fp)) {
    $output .= fgets($fp, 128);
    }

    $status = substr($output, 9, 3);

    if(
    $status == 500 && stripos($output, 'can\'t connect') !== false) {
    echo
    'Impossibile connettersi a ', $ip;
    } else {
    echo
    'Richiesta effettuata, il server ha restituito il codice ', $status;
    }

    fclose($fp);
    ?>
    Assicurati di aver attivo PHP5 ( per la funzione stripos ) e di avere le connessioni serve2server senza restrizioni.
    Ultima modifica di javascripter : 27-12-2010 alle ore 22.42.41

  11. #11
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Io eviterei un inutile carico del server: cambia GET in HEAD nella decima riga.

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Io eviterei un inutile carico del server: cambia GET in HEAD nella decima riga.
    Interessante! Non ero a conoscenza di questo tipo di richiesta.
    Ho editato il messaggio sopra.

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    fsockopen restituisce false se non è stato possibile avviare il socket.
    Non ti basta fare quel semplice controllo, ma devi andare più affondo: devi inviare una richiesta completa e interpretare la risposta del server.

    Io ti ho scritto questo semplice script:
    Codice PHP:
    <?php
    $ip
    = '66.102.7.99'; // va bene anche un host, privo di http e altri parti di url. es: www.google.com.

    $fp = fsockopen($ip, 80, $errno, $errstr);

    if(!
    $fp) {
    die(
    $errstr . '(' . $errno . ')');
    }

    $headers = "HEAD / HTTP/1.0\r\nHost: $ip\r\nConnection: close\r\n\r\n"; // GET -> HEAD, su consiglio di karl94
    fputs($fp, $headers);

    $output = '';

    while(!
    feof($fp)) {
    $output .= fgets($fp, 128);
    }

    $status = substr($output, 9, 3);

    if(
    $status == 500 && stripos($output, 'can\'t connect') !== false) {
    echo
    'Impossibile connettersi a ', $ip;
    } else {
    echo
    'Richiesta effettuata, il server ha restituito il codice ', $status;
    }

    fclose($fp);
    ?>
    Assicurati di aver attivo PHP5 ( per la funzione stripos ) e di avere le connessioni serve2server senza restrizioni.
    grazie, in serata lo proverò ;)

    grazie anche a karl94

  14. #14
    Guest

    Predefinito mhaa

    mh.. mi restituisce sempre 403 che mi pare che significhi accesso non consentito, sia con server on-line che con server off-line(praticamente modem spento, quindi ip inesistente).

    altre volte quando non ho il server on-line apache mi manda a la pagina di altrevista con errore 500 che ho provato a reindirizzare con il .htaccess ma niente, non me lo lascia reinidirizzare l'errore 500...

    qui il sorgente:
    Codice PHP:
    <?php
    // Coded By Impellizzeri Mattia se invece il server non è on-line
    // This program memorized in a file you remote IP
    /***CONFIGURATION**********************/
    // Pleas insert the server port:
    $PORT = "8080";
    //And the file name:
    $FILE = "ip.txt";
    /***END CONFIGURATION*****************/

    ?>


    <html>
    <title>ImpelServer</title>
    <meta http-equiv="Refresh" content="10">

    <?php
    $read_file
    =fopen($FILE,"r");
    $dim_file = filesize($FILE);
    $ip = fread($read_file,$dim_file);
    fclose($read_file);
    $url = $ip.":".$PORT;


    $fp = fsockopen($url, $PORT, $errno, $errstr, 30);

    if(!
    $fp) {
    die(
    $errstr . '(' . $errno . ')');
    }

    $headers = "HEAD / HTTP/1.0\r\nHost: $url\r\nConnection: close\r\n\r\n"; // GET -> HEAD, su consiglio di karl94
    fputs($fp, $headers);

    $output = '';

    while(!
    feof($fp)) {
    $output .= fgets($fp, 128);
    }

    $status = substr($output, 9, 3);

    if(
    $status == 500 && stripos($output, 'can\'t connect') !== false) {
    echo
    "<br><br><center><H1>The server isn't on-line :(</H!1></center><br>";
    echo
    'Impossibile connettersi a ImpelServer.';
    } else {
    echo
    'Richiesta effettuata, il server ',$ip,' sulla porta ',$PORT,' ha restituito il codice ', $status;
    echo
    '<br> attendi, caricammento in corso... <meta http-equiv="Refresh" content=10;url="http://'.$url.'/">';
    }

    fclose($fp);
    ?>

    </html>
    qui l'url se volete vedere di persona: http://server.matt91web.altervista.org/

    ciao e grazie ;)

  15. #15
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    [...]Assicurati di aver attivo PHP5 ( per la funzione stripos ) e di avere le connessioni serve2server senza restrizioni.
    Eppure ti avevo avvisato ;)

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    Hai sbloccato la whitelist?
    Pannello di Controllo -> AlterSito -> Risorse & Upgrade -> Server to server.
    Ultima modifica di javascripter : 03-01-2011 alle ore 17.42.00

  16. #16
    Guest

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Eppure ti avevo avvisato ;)
    sbloccata, ho inviato il codice via sms e sulla pagina c'è che è sbloccata ;)

  17. #17
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    L'ultima cosa da fare è cambiare la porta:
    Codice PHP:
    $PORT = "8080";
    Metti l'80 direttamente:
    Codice PHP:
    $PORT = 80;

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •