|
|
|
| Назрел у меня еще один вопрос.
Опять же таки есть поле , в которое я буду вводить айпи либо же доменные имена.
Но перед выводом всего остального , что мне надо... я хочу сделать вывод проверки.. которая будет отображать что было введено.. айпи , либо доменное имя. Но не могу никак правильно реализировать.
<?php
$s = ...;
if (is_numeric($s)) {
echo 'в $s содержится число';
} elseif (is_string($s)) {
echo 'в $s содержится строка';
} else {
echo 'в $s какая-то другая фигня: ' . gettype($s);
}
?>
|
Как-то так.. но есть одно но: если написать просто 192 или просто ya - тогда все норм.
Но если написать 192.168.1.1 - тогда строка не будет определена как айпи, и выдаст что это буквы.
При вводе ya.ru опять получаем точки.
То есть надо так , что при 192.168.1.1 и т.п выводило что это айпи, а при ya.ru , 25.ya.ru и .т.п - что это доменное имя. | |
|
|
|
|
|
|
|
для: TrEK
(17.02.2011 в 22:04)
| | А разве 192.168.1.1 это номер, что вы пытаетесь проверить is_numeric($s)?
Вот говорил всегда, и буду говорить - мануал читать надо, а в нем описывается функция ip2long(), после применения которой уже можно будет проверять IP это или нет. | |
|
|
|
|
|
|
|
для: sim5
(17.02.2011 в 22:15)
| | Все , сделал:
<?php
$post=$_POST['ip'];
$ip = gethostbyname('$post');
$long = ip2long($ip);
if ($long == -1 || $long === FALSE) {
echo 'Invalid IP, please try again';
} else {
echo $ip . "\n"; // 192.0.34.166
echo $long . "\n"; // -1073732954
printf("%u\n", ip2long($ip)); // 3221234342
}
?>
|
Спасибо за подсказку. | |
|
|
|
|
|
|
|
для: sim5
(17.02.2011 в 22:15)
| | Хорошо, это есть...
А как орагнизовать проверочку , ввел ли я доменное имя... и выводить одно.. а если айпи- то другое.
<?php
if ($_POST = gethostbyname) {} else {}
?>
|
как-то так? | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 13:35)
| | Во первых:
= это присваивание, а ни как не условие "на равно".
Во вторых на gethostbyname РНР вас обматерит и будет прав.
Ну и в третьих, уж коли вы читали мануал, пробовали пример из него, то какие могут быть вопросы?
Если после проверки функцией ip2long(var) вам возвращается число, то значит вы получили IP, в противном случае проверить, если функция ip2long вернет число из значения полученного функцией gethostbyname(var), то вы получили доменное имя, иначе вам прислали брак. | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 13:58)
| |
<?php
$post = $_POST['post'];
$long1 = ip2long($post);
if (empty($long1)) {echo "HOST";} else {echo "IP";}
?>
|
Все получилось, спасибо за наставление на верный пусть.
Вопрос "снят с производства". | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 15:32)
| | И работает? | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 15:51)
| | Да, конечно. | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 19:22)
| | НУ зачем же так врать? ) Вот глядите:
<?
$long1 = ip2long('ля-ля-ляля');
echo empty($long1) ? "HOST" : "IP";
| Что у вас получается? Никак HOST? А это разве он? Я вам условие СЛОВАМИ написал, то которое надо проверить, а вы.... | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 20:33)
| | Все у меня получается... ))
Перед этим условием у меня условие проверки стоит на ваилдность вводимого:
<?php
..
..
..
$post=$_POST['ip'];
$ip = gethostbyname($post);
$long = ip2long($ip);
$long1 = ip2long($post);
#if (!empty($long1)) {echo "IP";} else {echo "HOST<br>";}
if (empty($post)) {echo "Enter ip-addres or host, please!<br>";}
else { // If enter data
if ($long == -1 || $long === FALSE) { /*check for validate data*/ echo 'Invalid IP, please try again<p>';}
else { /*pass validate data*/
if (empty($long1)) { /* if enter domain name */ echo "HOST<br>"; } else { /* if enter ip */ echo "IP<br>";}
}
}
..
..
..
?>
|
Как Вам такое? ))
п.с. Никакое "тра-ля-ля" при этом не проходит... | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 21:08)
| | А чего же вы пишите тогда половину? А приведенное сейчас... ну что могу сказать - плохо, ибо записать можно и проще:
<?
echo is_numeric(ip2long($post)) ? "IP" : is_numeric(ip2long(gethostbyname($post))) ? "HOST" : "Халтура";
| Мнений конечно может быть много, но на мой взгляд, условная операция (тернарная ) более удобнее и лаконичнее, да и "читаемость" ее не такая и сложность. А вот в ваших if { else if {else.... ногу сломать можно. К тому же, даже беглый взгяд на ваш код, говорит, что будет неменуемо ошибка (скобки фигурные некомплект), и коли вы выставляете свое для "запуска/проверки", уж пишите без ошибок.
PS. Вы уже успели убрать "мусор" из if скоба еlse скобка... и т.п.. | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 21:31)
| | Ну видите ли, я все делею путем проб и ошибок :)
Половину пишу, так как меня интересовал лишь один момент.. на проверку "буквенности", а не валидности домена и айпи...
Если получается.. пусть и более громоздкий код, чем мог бы быть... но всё же, работает :)
А свой код я коректировал, старался привести в приличный читабельный вид.. перед тем, как на тот пости появится ответ. Вроже успел :)) Проверте... )
п.с. За более лаконичное решение спасибо! | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 21:34)
| | Вы не берете во внимание то (или не знаете об этом), что существует конструкци if else elseif, да еще сдабривая код свой приличным числом скобок, ну это бомба.
Спасибо не надо, ибо условную операцию вы у себя уже применяли, вот только не знаю, сами или где-то кто-то..... Вы уж задумывайтесь над тем, что вам предлагают, а не просто копируйте, тогда и прок будет. Ведь не всегда вам могут предложить золото, не исключено, что и железо попадется. ;-) | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 21:40)
| | Про if else elseif знаю... но сделал так как мог :) И так как работало :)
А спасибо за то, что Вы подсказали мне ip2long(), атк как до этого даже не слышал про такую функцию. От нее и начал отталкиватся. | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 21:52)
| | Я вам могу дать куда более ценный совет - если у вас до сих пор нет мануала по РНР, скачайте его. Формат CHM имеет вкладку поиска, а набрав в ней ip, уж точно могли бы найти и функции, и прочее в мануале применительно к нему.
А искать подсказки на форуме типа "есть ли такая функция, которая .... ?" и т.п., либо писать "велосипед", когда существует встроенная функция, а вы не поинтересовались есть ли, это не есть гут. ;-) | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 21:57)
| | Я согласен с Вами в плане "Писать велосипед" , но если я не имею понятия , что есть функция попроще ... и даже не представляю что ее можно применить ))
Тогда мануал мне не поможет.. только вот такие Ваши советы.. и советы других более знающих людей.
Все прийдет с опытом. | |
|
|
|
|
|
|
|
для: TrEK
(18.02.2011 в 22:03)
| | Так ни у кого не будет понятий, пока в "каталог" функций языка не заглянешь. Вот я сейчас для интереса задал поиск в мануале по ip, и результат:
ip2long
Функции сокетов
curl_setopt
....
и т.д.
Как видите функция, о которой вы "не имели понятия" первая в списке. Щелкаем ее и попадаем в описание оной, которое гласит:
ip2long - конвертирует строку, содержащую адрес (IPv4) Internet Protocol, в подходящий адрес.
и т.д..
В РНР много функций, и как бы вы не хотели, вам придется изучать их самому, ибо по всем получить подсказки (указывать, что вот есть такое) просто не возможно в принципе. А что еще более важное, так это надо учиться находить среди этого инструментария необходимую функцию для решения той или иной задачи. А подсказки вас этому не научат, они дают вам конкретный ответ, на конкретный вопрос, для этого и форум. Но ради бога учитесь сами находить, ищите и пробуйте, ошибайтесь и исправляйте ошибки, но учитесь, иначе... | |
|
|
|
|
|
|
|
для: sim5
(18.02.2011 в 23:03)
| | А где можно этот мануал взять? Есть ссылочка? Буду следовать Вашим советам :)
Я так понял здесь мне тоже желательно посидеть - http://softtime.ru/bookphp/gl1_1.php | |
|
|
|
|
|
|
|
для: TrEK
(21.02.2011 в 19:06)
| | На русском ранее можно было и с официального сайта скачать, сейчас русского там нет, но в сети можно найти. Можете и онлайн справочником пользоваться: http://www.php.su/functions/ | |
|
|
|