ping

9 отговора 514 прегледа
#1

ping

Здравейте. Питането е следното. Мога ли от PHP да си извикам ping (например) и да покажа резултата. Мерси на всички предарително.

Отговор
в отговор на tapaka #2

Re: ping

$ping_results = `ping clubs.dir.bg`;

Само внимавай под UNIX...там ping се изпълнява until stopped.

Everything louder than everything else...
Отговор
в отговор на tapaka #3

Re:пинг

[линк]

--------------------------------
Fast. Good. Cheap. Pick any two.
Отговор
в отговор на tapaka #4

Re: ping

Мерси. Изтеглих готов работещт скрипт и всичко е ОК.

Отговор
в отговор на Dakota #5

Re: ping

> $ping_results = `ping clubs.dir.bg`;

oh kak si lichi koi ne raboti s *nix i pipes
dakota, izlagash se.

[ping.php]

echo '<pre>';
$fp = popen('/bin/ping -c1 '. escapeshellarg($_GET['host']), 'r');
print (fread($fp, 20000));
pclose($fp);



vij si syntax-a na 'ping' pod win32.

Отговор
в отговор на orange #6

Re: ping

Ти пак ли доиде да ръcиш мозък?

--
1000 кредита за всеки участник подарък
Отговор
в отговор на voyager #7

Re: ping

zamylchi, ti, nemisleshto chovekopodobie

Отговор
в отговор на orange #8

много оригинално

Да...когато можеш да напишеш нещо на един ред, къде къде по-оригинално е и по-престижно е да го напишеш на 3, само и само да използваш pipes. Браво. Браво!!!

Виж ако беше и по-бързо, нямаше да е зле.

Иначе можеше още да се постараеш. Да напишеш клас, да използваш побитови оператори...така щеше да можеш да ме обвиниш и в тяхното непознаване.

Everything louder than everything else...

Редактирано от Dakota на

Отговор
в отговор на Dakota #9

Re: много оригинално

e, mnogo se palish. az si znam che si poznavach, no ako mojeshe vmesto prazni dumi da podkrepish s neshto po-dostoverno tova, koeto se opitvash da me nakarash da poviarvam...niamashe da mi se nalaga da pisha i tova.

$ cat dakota
<?

$ping_results = `ping -c1 127.0.0.1`;
echo $ping_results;

?>

$ cat orange
<?

$fp = popen('/bin/ping -c1 127.0.0.1', 'r'); // host=localhost
print (fread($fp, 2000));
pclose($fp);

?>



$ time php -q dakota &> /dev/null

real 0m0.025s
user 0m0.000s
sys 0m0.030s

$ time php -q orange &> /dev/null

real 0m0.025s
user 0m0.010s
sys 0m0.020s


sega, vijdash sam, ne si prav. moje da ima poveche redove, no tova
koeto ti si napisal izglejda neprofesionalno, da ne kaja amatiorsko. a
da ima chovek samo niakakvi pretencii ne e dostatychno, kakto sam znaesh.
i kakto si go napisal bez echo() ili print_r(), resultat ne se display-va, pone pri *nix.
sega, zashto toia red


$fp = popen('/bin/ping -c1 '. escapeshellarg($_GET['host']), 'r');


e vajen. taka kakto si go izmislil s `ping clubs.dir.bg`, ako chovekyt ne syobrazi
kakvo da pravi i zameni "clubs.dir.bg" s POST/GET var stava kristalno iasno che shte
sgafi, osobeno ako iska da pravi ot neshtoto niakakyv vid public service. varianyt, koito
predlagam e izchisten ot takyv rod problemi i pokazva po nagledno kakvo se
sluchva. oshte edin pyt, tova koeto pravish e myrzelashko izpylnenie. a i e mecheshka usluga erotomane, zatova se namesih. za dobro e, nezavisimo kakvo na teb ti se struvalo.

Отговор
в отговор на orange #10

мързелашко изпълнение

Естествено, че е мързелашко изпълнение...PHP е език от високо ниво и целта на създаването му е да облекчи живота на програмиста - да пишеш, колкото се може по-малко. Ако исках "не-мързелашко" изпълнение, щях да пиша на C, вместо на PHP или Perl. Именно затова е безсмислено и рисковано да се занимаваш с pipes на ниво PHP (освен ако нямаш друг избор), при положение, че всичко минава през C. Най-вероятно и двата кода - и моят и твоят, се превръщат в едно и също нещо от интерпретатора. За това говори и минималната разлика във времето за изпълнение на двата скрипта...е, аз направих малко по-обемни тестове:


$ cat dakota.php
<?
for ($i=0; $i<1000; $i++) echo `ping -c1 127.0.0.1`;
?>

$ cat orange.php
<?
for ($i=0; $i<1000; $i++) {

$fp = popen('ping -c1 127.0.0.1', 'r');
print (fread($fp, 2000));
pclose($fp);
}

?>



$ for i in 1 2 3; do time php -q dakota.php > /dev/null; done

real 0m15.765s
user 0m2.693s
sys 0m2.432s

real 0m10.837s
user 0m2.822s
sys 0m2.330s

real 0m9.302s
user 0m2.797s
sys 0m2.334s

$ for i in 1 2 3; do time php -q orange.php > /dev/null; done

real 0m16.482s
user 0m2.924s
sys 0m2.244s

real 0m11.530s
user 0m2.846s
sys 0m2.293s

real 0m15.313s
user 0m2.744s
sys 0m2.389s


Машината е доста натоварена, така че това не може да бъде много показателно...както се вижда и от различните резултати per script.

Не мога да се съглася и че твоят скрипт бил кристално ясен. Първо, както си го написал, той няма да работи под Windows; второ, ако аз съм newbie в PHP (а ако не съм, няма да питам за такова нещо) нито ще знам какво е $_GET['host'], нито ще съобразя, че трябва да имам променлива, задължително предадена по метода GET, нито как да се казва тази променлива, нито как трябва да извикам скрипта, за да сработи въобще.

Освен това в дадения контекст, да говорим за скорост е смешно - потребителят ще изпълнява ping, което може да отнеме дори и десетки секунди...

Така или иначе, целта ми не е да доказвам, че скриптът ми е по-бърз или по-добър...нека човекът, който помоли за помощ сам да избере решението, което ще му свърши работа. Но да се нахвърляш върху мен с някакви твои си доводи е леко тъпо...

Та...смятам темата за приключена. Благодаря ти за мечешката услуга!

Everything louder than everything else...
Отговор