Page 1 of 1

Command line problem

Posted: Fri May 12, 2006 2:14 am
by black187
Hello, I'm running my code from the command line (php Command_line.php), and when the code is finished the program does not return to console (I tried exit function but no success).

Code: Select all

<?php

mysql_connect("localhost", "iskratel_ip","diploma") or die ("Povezave z zbirko podatkov ni mogo&#269;e ustvariti");
mysql_select_db("iskratel");

$res = mysql_query("SELECT MAX(id) from ip_adress")or die(mysql_error()); //izberemo zadnji id iz tabele ip_adress
        $zadnji = mysql_fetch_row($res); // zadnji id zapišemo v spremenljivko $zadnji
//     echo "<BR>$zadnji[0]"; //izpišemo $zadnji
mysql_close;


// Timeout - ker ping dolgo &#269;asa deluje, mora biti nastavljen dolg timeout  
//set_time_limit(3600);

// priklju&#269;itev na database v mysql
mysql_connect("localhost", "iskratel_ip","diploma") or die ("Povezave z zbirko podatkov ni mogo&#269;e ustvariti");
mysql_select_db("iskratel");

// for zanka, ki šteje od 1 do 256 (število ip-jev 0 do 255)
for ($i=1;$i<=$zadnji[0];$i++){
  
// izberemo iz Mysql tabelo ip, kjer je id tabele spremenjlivka dolo&#269;ena v for zanki
$result = mysql_query("SELECT ip FROM ip_adress WHERE id=$i") or die(mysql_error()); 

// shranimo razultat v spremenljivko row ter naredimo while zanko
while($row=mysql_fetch_array($result))
{
  // izvrši se ping (ki je nastavljen za linux, pri Windowsih so drugi parametri)
  exec("ping -c1 -w1 $row[0] ", $output, $return); // Pinga "row" - izbrani stolpec ip ([0])
  
  // &#269;e nam ping vrne 0 (ko pinga se ti izpisujejo rezultati, &#269;e rezultata ni se izpiše 0)
if ($return === 0) {
  
  // if pogoj je izpolnjen zato v ping1 pove&#269;a vrednost za 1 (ping1 - dnevni ping - 3x na dan)
mysql_query("UPDATE ip_adress SET ping1=ping1+1 WHERE id=$i") or die("Napaka pri vnosu:<br />" .mysql_error());

// izpiše razultate
  echo "$row[0] -  ";
  echo "USPEH"; 


} else {
  echo "$row[0] -  ";
  echo "NAPAKA";

} 
  }
}

// zapremo mysql bazo
mysql_close;

//
//
//set_time_limit(3600);
mysql_connect("localhost", "iskratel_ip","diploma") or die ("Povezave z zbirko podatkov ni mogo&#269;e ustvariti");
mysql_select_db("iskratel");

for ($i=1;$i<=$zadnji[0];$i++){  
  
  //v ping2 vpišemo 0 &#269;e je v ping1 0, v ping2 vpišemo 2, &#269;e je v ping1 vrednost ve&#269; kot 1
mysql_query("UPDATE ip_adress SET ping2='0' WHERE ping1=0") or die(mysql_error()); 
mysql_query("UPDATE ip_adress SET ping2='1' WHERE ping1>0") or die(mysql_error());
}
mysql_close;

exit(0);

?>
This program pings about 5000 computers (it works for about 1 hour).

Posted: Fri May 12, 2006 7:29 am
by Chris Corbyn
Just something I noticed - you have at least one consistent error - perhaps more :)

Code: Select all

mysql_close;
should be

Code: Select all

mysql_close();

Posted: Mon May 15, 2006 1:19 am
by black187
I fixed it :oops:

But still I can't get it to work. It looks like PHP does a timeout, can I do anything about it?

Posted: Mon May 15, 2006 1:22 am
by Burrito
If it is timing out, and you're sure that's the problem, you can tell php to never time out using:

Code: Select all

set_time_limit(0);

Posted: Mon May 15, 2006 2:06 am
by black187
I don't know for sure. But my gut feeling tells me it's timeout :)

The strange thing is, that the script works in web browser, but in command line, at the end of the script everything stops. It's like when it finishes, it blockes itself.