system()

Статус
В этой теме нельзя размещать новые ответы.

Rem

Профессор
Регистрация
22 Сен 2006
Сообщения
472
Реакции
41
Скажите а можно реализовать этот скрипт без функции system()?

Код:
  <table width="100%" border="0" align="center" class="ttable">
    <tr>
      <td bgcolor="#D4D0C8"><strong>PING</strong></td>
    </tr>
    <tr>
      <td>
<?php
$max_count = 10; //maximum count for ping command
$unix      =  1; //set this to 1 if you are on a *unix system      
$windows   =  0; //set this to 1 if you are on a windows system
// -------------------------
// nothing more to be done.
// -------------------------
//globals on or off ?
$register_globals = (bool) ini_get('register_gobals');
$system = ini_get('system');
$unix = (bool) $unix;
$win  = (bool)  $windows;
//
If ($register_globals)
{
   $ip = getenv(REMOTE_ADDR);
   $self = $PHP_SELF;
} 
else 
{
   $submit = $_POST['submit'];
   $count  = $_POST['count'];
   $host   = $_POST['host'];
   $ip     = $_SERVER['REMOTE_ADDR'];
   $self   = $_SERVER['PHP_SELF'];
};
// form submitted ?
If ($submit == "Ping!") 
{
   // over count ?
   If ($count > $max_count) 
   {
      echo 'Maximum for count is: '.$max_count;
      echo '<a href="'.$self.'">Back</a>';
   }
   else 
   {
      // replace bad chars
      $host= preg_replace ("/[^A-Za-z0-9.-]/","",$host);
      $count= preg_replace ("/[^0-9]/","",$count);
      echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
      echo("Ping Output:<br>"); 
      echo '<pre>';           
      //check target IP or domain
      if ($unix) 
      {
         system ("ping -c$count -w$count $host");
         system("killall ping");// kill all ping processes in case there are some stalled ones or use echo 'ping' to execute ping without shell
      }
      else
      {
         system("ping -n $count $host");
      }
      echo '</pre>';
    }
} 
else 
{
    echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
    echo '<p><font size="2">Your IP is: '.$ip.'</font></p>';
    echo '<form method="post" action="/ping.php">';
    echo '   Enter IP or Host <input type="text" name="host" value="'.$ip.'"></input>';
    echo '   Enter Count <input type="text" name="count" size="2" value="4"></input>';
    echo '   <input type="submit" name="submit" value="Ping!"></input>';
    echo '</form>';
    echo '<br><b>'.$system.'</b>';
    echo '</body></html>';
}
?>
    </td>
    </tr>
  </table>
 
Скорее всего нет, поскольку здесь задействованы системные вызовы.
Проще найти хостинг с разрешённой system, чем ломать себе голову.
 
Да проблема в том что практически везде данная функция отключена и будет тяжело найти подходящий, а скулхостам доверять свой сайт что то не хочется.
 
Питерхост, РБК, Дримхост, Блюхост(по запросу)

или любой дешёвый ВПС

В идеале свой сервак ;)
 
Ищи хостинг с PHP как CGI. Там эта функция как правило разрешена или её можно разрешить в собственном php.ini

вот тебе по памяти:
_http://ruweb.net/?page=info
_http://multihelp.ru/inf.php
_http://webxl.ru
 
Лично я за ВПС - недорого и твори с PHP что тебе вздумается. Shared хостинг в любом случае накладывает ограничения
 
Лично я за ВПС - недорого и твори с PHP что тебе вздумается. Shared хостинг в любом случае накладывает ограничения
На нормальном шареде тоже можно творить с PHP всё что захочешь.
За исключением установки модулей и запуска демонов.

И бегать это всё будет не хуже чем на дешёвом VPS.
 
Это на fopen можно написать, с применением microtime(); .
 
А примерчик не большой можно, а то я только осваиваю этот чудо язык:)

ня :)

PHP:
<?php 
$host = 'www.com' ; 
$timeout = 2 ; 

    //Open the socket 
$handle = fsockopen ( udp://' . $host , 7 , $errno , $errstr , $timeout ); 
if (! $handle ) 
echo "$errstr ($errno)<br>\r\n" ; 
else { 
    //Set read timeout 
stream_set_timeout ( $handle , $timeout ); 
for ( $i = 0 ; $i < 3 ; $i ++){ 
    //Time the responce 
list ( $usec , $sec ) = explode ( " " , microtime ( true )); 
$start =(float) $usec + (float) $sec ; 

    //send somthing 
$write = fwrite ( $handle , " echo this\n" ); 
if (! $write ){ 
echo "Error in writing to socked<br>\r\n" ; 
break; 
} 
echo 'Send packet to ' . $host ; 

    //Try to read. the server will most likely respond with a "ICMP Destination Unreachable" and end the read. But that is a responce! 
fread ( $handle , 1024 ); 

    //Work out if we got a responce and time it 
list ( $usec , $sec ) = explode ( " " , microtime ( true )); 
$laptime =((float) $usec + (float) $sec )- $start ; 
if ( $laptime > $timeout ) 
echo " : No reply<br>\r\n" ; 
else 
echo " : Round trip = " . round ( $laptime , 3 ). " s<br>\r\n" ; 
} 
fclose ( $handle ); 
} 
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху