Не пойму в чем дело, толи PHP на сервере "криво собран", толи руки кривые :)) Нм могу его настроить на соем сервере Debian Linux 2.2...
Пробовал на бесплантом хостинге типа hut.ru, вроде заработал, но криво, но заработал, а на моем совсем не хочет. Собирал апачу и PHP не я, он мне достался по наследству от старого админа, а я как бы из начинающих, и видать чтото не догоняю...Скрипт стянул отсюда: http://www.hotscripts.com/PHP/Scripts_and_Programs/Networkin...
Подозрение есть что PHP собран без поддержки секетов... Из за этого скрипт не работает... Такое как гостевая и другие PHP скрипты нормально работают...
Что делать пересобирать PHP+апачи или можно подправить только скрипт, или его только настроить нужно???????????
Вот его текст:<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>The WorldsEnd.NET - Free Ping Script, written in PHP</title>
</head>
<?phppreg_match("/\/WWW(\/.*)$/",$PHP_SELF,$php_self);
$PHP_SELF = $php_self[1];// This script was writen by webmaster@theworldsend.net, Aug.2001
// http://www.theworldsend.net
// This is my first script. Enjoy.
//
// Put it into whatever directory and call it. That's all.
// Updated to 4.2 code
// Get Variable from form via register globals on/off
//-------------------------
$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 = $_GET['submit'];
$count = $_GET['count'];
$host = $_GET['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);
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 methode="post" action="'.$self.'">';
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>';
}
?>
этот скрипт рабочий
вот он http://www.filtron.com.ua/~greysi/ping.phpили поставь вот этот (создай файлик в cgi-bin/ping.cgi):
#!/bin/sh
#-
# Define the location of the ping utility in your system and specify it
# below:
PING=/bin/ping# The script starts here
echo "Content-type: text/html"
echo ""
echo ""
echo "<html><head><title>CGI PING Interface</title></head>"
echo "<body bgcolor=white text=darkblue link=orange vlink=orange>"
echo "<h2>CGI PING interface:</h2>"
echo "<p>"
echo "<form method=OUT action=webping.cgi>"
echo "<b>Hostame or IP address to ping: </b>"
echo "<input type=text size=64 name=STR>"
echo "<br><input type=submit value=Submit>"
echo "</form>"
echo "<p>"
if [ "$QUERY_STRING" != "" ]; then
echo "<hr><p>"
HOST=`echo $QUERY_STRING | sed s/STR=// | sed s/\:/\:/g`
if [ "$HOST" = "" ]; then
echo "<ul>Unspecified hostname or IP address.</ul><p>"
else
echo "<h3>Results:</h3><p>"
echo "<p><ul><pre>"
$PING -c 5 $HOST
echo "</pre></ul>"
fi
fi
echo "</body></html>"
>этот скрипт рабочий
>вот он http://www.filtron.com.ua/~greysi/ping.php
А как его приветнить на сервер, его скачать ведь как то надо...>или поставь вот этот (создай файлик в cgi-bin/ping.cgi):
У меня на сервер CGI настроен как то непонятно, никак не могу, вообще ничего запустить, вроде один скрипт работает, в специальной директории лежит судя по httpd.conf и прописан только он, значить cgi работает, вот только в какую папочку надо скрипты складывать непонятно...
>>этот скрипт рабочий
>>вот он http://www.filtron.com.ua/~greysi/ping.php
>А как его приветнить на сервер, его скачать ведь как то надо...
Зачем его скачивать? Он же у тебя есть!проверь PHP! Сделай файлик, скажем phpinfo.php, и вставь туда:
<?
phpinfo();
?>когда ты его запустишь в броузере, то увидишь информацию про PHP и те модули, которые у тебя прикручены.
>
>
>
>>или поставь вот этот (создай файлик в cgi-bin/ping.cgi):
>
>У меня на сервер CGI настроен как то непонятно, никак не могу,
>вообще ничего запустить, вроде один скрипт работает, в специальной директории лежит
>судя по httpd.conf и прописан только он, значить cgi работает, вот
>только в какую папочку надо скрипты складывать непонятно...
Папка cgi-bin
#cd /путь_к_apache/cgi-bin/
и cgi файлы должны быть с правами rwx-rwx-rx
#chmod 0755 имя_файла.cgi
Тут создатель темы не уточнил что ему важнее - чтобы скрипт заработал, или разобраться почему у него ПХП не фурычит.
Могу предположить (имел опыт) что не всегда корректно обрабатываются переменные $_GET[] ( я использовал кажется $HTTP_GET_VARS[]).короче - киньте в меня php.ini (если не страшно %-)) ) и то что
выдает
<?
phpinfo();
>
, если его поставить в самом начале скрипта.А то наткрально - разгоаор на околопроблемные темы, а данных нет.
Мне главное чтобы заработал ping скрипт, причем без разницы на PHP или CGI - начальство хочет, ну а потом чтобы не возникало таких трудностей настроить сервер (PHP, CGI, и прочее). Ведь php работает типа новигация и гостевой без глюков...
>когда ты его запустишь в броузере, то увидишь информацию про PHP и
>те модули, которые у тебя прикручены.
Сделал, вот что получилось:
Configure Command:
'./configure' '--with-mysql=/usr/local/mysql' '--with-apxs=/usr/local/apache/bin/apxs'Loaded Modules:
mod_php4, mod_setenvif, mod_so, mod_auth, mod_access, mod_alias, mod_userdir, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_status, mod_negotiation, mod_mime, mod_log_config, mod_env, http_coreМожет что то не прикручено к апачу, вот и не работает?
Есть подозрение, что PHP как то должен быть собран с поддеркой секетов...
>Папка cgi-bin
>#cd /путь_к_apache/cgi-bin/
>и cgi файлы должны быть с правами rwx-rwx-rx
>#chmod 0755 имя_файла.cgi
Все так, на скрипт лежащий и устанволенный таким образом выдается сообщение:
"Сервер сталкивался с внутренней ошибкой или misconfiguration и был не в состоянии завершить ваш запрос"
Вот ведь беда какая, попробую сейчас найти какойнибудь другой скрипт CGI, попросче и проверить на нем...
Запускал ping.cgi
>Loaded Modules:
>mod_php4, mod_setenvif, mod_so, mod_auth, mod_access, mod_alias, mod_userdir, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir,
>mod_autoindex, mod_include, mod_status, mod_negotiation, mod_mime, mod_log_config, mod_env, http_coreты добавил в httpd.conf:
AddType application/x-httpd-php .php .php3что пишет, когда запускаешь файлик с
<?
phpinfo();
?>????
или я слепой или у тя в скрипте вообще не используются сокеты и зачем тебе их прикручивать не понимаю.
>или я слепой или у тя в скрипте вообще не используются сокеты
>и зачем тебе их прикручивать не понимаю.Ну, а из за чего тогда не работает???
Может с атрибутами файла чтото??
Смотрю логи апача вот что пишет:
[Mon Sep 22 14:39:36 2003] [error] [client мой айпишник] File does not exist: /usr/local/www/home/php-ping.phpКак не существует, когда я его и запускаю???
После выбрасывания кучи лишнего (и работы под юнихом хватит)
и, к примеру замены $_GET на $HTTP_GET_VARS
при таком конфиге, со скидкой на версию, что - то начало работать.
Почему не выводятся результаты пинга еще не ясно.
Но ничего, еще ковырну.<?php
error_reporting(2047);
> $submit = $HTTP_GET_VARS['submit'];
> $count = $HTTP_GET_VARS['count'];
> $host = $HTTP_GET_VARS['host'];
# $ip = $HTTP_ENV_VARS["REMOTEHOST"];
# В самом деле лобуда.# или isset...
> if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]=="")
> {
> $ip=$HTTP_SERVER_VARS["REMOTE_ADDR"];
> }
> else
> {
> $ip=$HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
> }
> $self = $HTTP_SERVER_VARS["PHP_SELF"];
If ($submit == "Ping!")
{
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);
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo("Ping Output:<br>");
echo '<pre>';
//check target IP or domain
echo "ping -c$count -w$count $host";
echo "<br>\r\n";
# Собака где-то здесь!
#
#
# /sbin или нет???? а что такое -w ????system ("/sbin/ping -c".$count." ".$host");
echo system ("/sbin/ping -c".$count." ".$host")."<br>";
passthru("/sbin/ping -c".$count." ".$host");
echo passthru("/sbin/ping -c".$count." ".$host")."<br>";
echo passthru("ls");
#
#
# это в принципе лишнее
# system("killall ping");// kill all ping processes in case there are
#some stalled ones or use echo 'ping' to execute ping without shell
#
echo '</pre>';
Дальше все по старому
Вот, значить что у меня:
httpd.conf прописано - User nobody
Group nogroupgroup прописано - nogroup:x:65534
passwd прописано - nobody:x:65534:65534:nobody:/home:/bin/shshalls прописано - /bin/ash
/bin/bash
/bin/csh
/bin/sh
/bin/false
/usr/bin/es
/usr/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/usr/bin/zsh
/bin/sash
/bin/zsh
/usr/bin/eshВроде тут все правильно и должно работать...
Можно как то зайти и проверить это? Ну зайти как то под этим nobody и
попробовать в терминале запустить pingКлюч -w у Ping не работает, я заходил рутом и проверял в терминале,
работает только -с
Да и в описании про -w не нашел... У меня еще есть в /bin ping6
какойто, ну и ping тоже присутствует...
А воот в /sbin даже не пахнет никаким ping
наверно поэтому когда запускаю скрипт пишется ошибка
в следующей строке:
>echo system ("/sbin/ping -c".$count." ".$host")."<br>";Посему я подправил в скрипте пути на /bin
system ("/bin/ping -c".$count." ".$host");
echo system ("/bin/ping -c".$count." ".$host")."<br>";
passthru("/bin/ping -c".$count." ".$host");
echo passthru("/bin/ping -c".$count." ".$host")."<br>";та же фигня не работает и ошибка в строке
echo system ("/bin/ping -c".$count." ".$host")."<br>";Не знаю что может, может ping скопировать из /bin в /sbin
>Не знаю что может, может ping скопировать из /bin в /sbin
Я слышал, что нормальные люди запрещают использование системных вызовов в PHP (это где-то в настройках).Я так и не понял, что у тебя не работает. Если в LOG - file not found то проблема не в пинг.
CHROOT используется?
Почти все настройки php нашодятся в файлике php.ini
какой такой файл не найден я не понял - у чувака скрипт открывается.http://algol.suttk.ru/php_ping.php
здесь можно увидеть вызываемый исходный скрипт (не рабочий напрочь), но вызываемый! И php_info(); в котором
safe mode off;
disabled functions "";Теперь по делу:
Проверить имеет ли право nobody выполнить подобную хрень можно так:залогиниться как root
сказать su nobody
выполнить то, что выводится строкой
echo "/bin/ping -c".$count." ".$host; #без "
ключ -w есть под виндой, но накой он здесь вообще использован не ясно./bin & /sbin - у меня фря, потому различия есть.
Ошибка ясен пень есть, если ума не хватило перенос строки убрать. Я конечно тоже хорош - автоформат не вырубил. Тем более последняя кавычка в каждодй строке там лишняя. (см выше)
короче
"/bin/ping -c".$count." ".$host"
заменить на (без ")
"/bin/ping -c".$count." ".$host
или (без " + пробел после -c )
"/bin/ping -c ".$count." ".$host"Копировать что-то куда-то при таком знании системы очень не советую.
А удалять тем более.
>ключ -w есть под виндой, но накой он здесь вообще использован не
>ясно.
Ааа, тепрерь яссно, если это виндовый ключ, наверно скрипт на Win хостинг рассчитан тоже, там же в начале скрипта есть выбор:
>$unix = 1; //set this to 1 if you are on a *unix system
>$windows = 0
Вот только дальше что то не работает, ну да ладно, про это можно забыть как кошмарный сон...
>Ошибка ясен пень есть, если ума не хватило перенос строки убрать. Я
>конечно тоже хорош - автоформат не вырубил. Тем более последняя кавычка
>в каждодй строке там лишняя. (см выше)
Это было в первую очередь что мне пришло на ум, Пробовал, не получилось, поэтому и написал... Ну не могу найти я етот перенос, я правлю в notepad или Штирлице IV они не видят этот перенос, я уже и коментировал эту строку - все без толку, ошибка и все, хоть ты-ы тресни...
Уже и Delete и BackSpace'ом удалят и в ту и в другую сторону - безрезультатно...
Кавычки ставил и убирал... С другой стороный, кавычки тут не причем, т.к.
Я решил вернуться к тому месту, где частично работало : http://algol.suttk.ru/p.php
а именно, где скрипт вызывался, но не запускался...
Убрал в нем ключь -w
И, о чудо, оно заработало!!!!
http://algol.suttk.ru/pi.phpПолучился следующий скрипт:
<html>
<head>
<title>The WorldsEnd.NET - Free Ping Script, written in PHP</title>
</head>
<?php// This script was writen by webmaster@theworldsend.net, Aug.2001
// http://www.theworldsend.net
// This is my first script. Enjoy.
//
// Put it into whatever directory and call it. That's all.
// Updated to 4.2 code
// Get Variable from form via register globals on/off
//-------------------------
$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 = 1; #(bool) ini_get('register_gobals');
//
$submit = $HTTP_GET_VARS['submit'];
$count = $HTTP_GET_VARS['count'];
$host = $HTTP_GET_VARS['host'];
$ip = $HTTP_ENV_VARS["REMOTEHOST"];
$self = $HTTP_SERVER_VARS["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);
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo("Ping Output:<br>");
echo '<pre>';
//check target IP or domain
system ("ping -c$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
echo '</pre>';
}
}
else
{
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo '<p><font size="2">Your IP is: '.$ip.'</font></p>';
echo '<form methode="post" action="'.$self.'">';
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>';
}
?>
Но IP определяет криво, он помнит IP той машины, с которой запускался самый первый раз скрипт...
Где он оседает, и как бы его очищать и определять заного?Теперь я так понимаю, попробовать постепенно лишнее убрать из него, как написал Rohan. И посмотреть что получиться...