<?php
$url_1 = 'http://google.com';
$url_2 = 'http://yahoo.com';
$url_3 = 'http://mail.ru';
$error = "ERROR!";
isset($url_1) ? header('Location:' . $url_1) : header('Location:' . $url_2);
isset($url_3) ? header('Location:' . $url_3) : print($error);
?>
Не могу понять логику: когда 1-й, 2-й, 3-й урл не работают, то вывести $error.
Спустя 20 минут, 19 секунд (6.10.2010 - 18:44) waldicom написал(а):
В самом просто случае if...else
Если переменная будет одна, но может меняться её значение, то лучше подходит switch
Если переменная будет одна, но может меняться её значение, то лучше подходит switch
Спустя 9 минут, 34 секунды (6.10.2010 - 18:53) lastalert написал(а):
с if - else пытался сделать, но не получилось. Дело в том, что для isset всегда будет существовать текст переменной. А вот корректность ссылки не знаю как проверить.
Выкидывало: Неправильно задан URL и не переходило на другие ветки условия.
switch тоже не подходит, нужно именно так, как указано в 1-м посте.
и единственный способ, которым мне удалось перейти на другой сайт был сделан с пом ? :
или мб как-то проверять ответ сервера и выполнять определенные действия.
// например $url_1 = 'http://smcbhcgchjcecyuwy.com';
if (isset($url_1) header ('Location'.$url_1);
Выкидывало: Неправильно задан URL и не переходило на другие ветки условия.
switch тоже не подходит, нужно именно так, как указано в 1-м посте.
и единственный способ, которым мне удалось перейти на другой сайт был сделан с пом ? :
или мб как-то проверять ответ сервера и выполнять определенные действия.
Спустя 48 минут, 19 секунд (6.10.2010 - 19:42) inpost написал(а):
lastalert
Вообще-то коректность проверяется регулярками: http://irbis-team.com/15/20
Вообще-то коректность проверяется регулярками: http://irbis-team.com/15/20
Спустя 6 дней, 31 минута, 45 секунд (12.10.2010 - 20:13) lastalert написал(а):
Не стал поднимать новую тему. Проблема та же.
Написал скрипт, но работает неправильно.
Вернуло:
Когда в $target1 указываешь работающий сервер, то все ОК, редирект происходит
Когда в $target2 указываешь неработающий сервер, то и вылетает ошибка, указанная выше.
Нужно чтобы независимо от того в каком из $target-ов прописан адрес работающего сервера выполнялся редирект.
Дело в том что если работает один сервер, то другой выключен, и наоборот, если запасной серв работает, то первичный выкл.
Написал скрипт, но работает неправильно.
<?php
/*****************************************/
$domen = 'http://mydomain.ru';
$target1 = 'http://IP:PORT';
$target2 = 'http://IP:PORT';
$notworking = 'http://domain.com/error.html';
/*****************************************/
// checking the domain
if (isset($domen)) {
if (isset($target1)) {
// getting HTTP headers from $target1
$headers_t1 = get_headers($target1, 1);
$header_ok_t1 = explode(" ", $headers_t1[0]);
// if server retrieved code 200 OK
if($header_ok_t1[1] == 200) {
$data_t1 = parse_url($target1);
$ip_t1 = gethostbyname($data_t1[host]);
$dname_t1 = gethostbyaddr($ip_t1);
$url_t1 = str_replace($ip_t1, $data_t1[host], $dname_t1);
// redirect on $target1
header("Location:" . $data_t1[scheme] . "://" . $url_t1 . ":" . $data_t1[port]);
}
// getting HTTP headers from $target2
} elseif (isset($target2)) {
$headers_t2 = get_headers($target2, 1);
$header_ok_t2 = explode(" ", $headers_t2[0]);
// if server retrieved code 200 OK
if($header_ok_t2[1] == 200) {
$data_t2 = parse_url($target2);
$ip_t2 = gethostbyname($data_t2[host]);
$dname_t2 = gethostbyaddr($ip_t2);
$url_t2 = str_replace($ip_t2, $data_t2[host], $dname_t2);
// redirect on $target2
header("Location:" . $data_t2[scheme] . "://" . $url_t2 . ":" . $data_t2[port]);
}
// go on errorpage
} else {
header("Location:" . $notworking);
}
}
?>
Вернуло:
Warning: get_headers(http://*.*.*.*:**) [function.get-headers]: failed to open stream: Connection timed out in /var/www/redirect.php on line 25
Когда в $target1 указываешь работающий сервер, то все ОК, редирект происходит
Когда в $target2 указываешь неработающий сервер, то и вылетает ошибка, указанная выше.
Нужно чтобы независимо от того в каком из $target-ов прописан адрес работающего сервера выполнялся редирект.
Дело в том что если работает один сервер, то другой выключен, и наоборот, если запасной серв работает, то первичный выкл.
Спустя 46 минут, 10 секунд (12.10.2010 - 21:00) Basili4 написал(а):
lastalert
долго по тайм ауту валиться
долго по тайм ауту валиться
Спустя 35 минут, 56 секунд (12.10.2010 - 21:36) lastalert написал(а):
Basili4, а можно как-то обойти длительный таймаут?
т.е. если ожидаешь более 5 сек, то редиректить на другой сервер.
сервер даже не пингуется
вопрос к знатокам: код хотя бы правильный я написал с точки зрения логики?
т.е. если ожидаешь более 5 сек, то редиректить на другой сервер.
сервер даже не пингуется
вопрос к знатокам: код хотя бы правильный я написал с точки зрения логики?
Спустя 20 минут, 3 секунды (12.10.2010 - 21:56) arvitaly написал(а):
юзайте curl, там можно время выставить, тут тоже можно но я не помню как
Спустя 1 день, 52 минуты, 23 секунды (13.10.2010 - 22:48) lastalert написал(а):
arvitaly, накодил с использованием курл. На локалхосте работает, на хостинге - нет. (и ошибки не выдает).
Коды HTTP ответа по нулям. А должно быть на одном 302, на другом 0. Сейчас если запускаю скрипт с хостинга, то редирект всегда на гугл.
Коды HTTP ответа по нулям. А должно быть на одном 302, на другом 0. Сейчас если запускаю скрипт с хостинга, то редирект всегда на гугл.
<?php
/*********************************************/
$domen = "http://domen.ru";
$target1 = "http://93.127.67.64:3333";
$target2 = "http://85.223.235.166:3333";
$notworking = "http://google.com:80";
/*********************************************/
if (isset($domen)) {
$ch1 = curl_init();
$ch2 = curl_init();
$timeout = 1;
curl_setopt($ch1, CURLOPT_URL, $target1);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch1, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch1, CURLOPT_HEADER, 1);
curl_setopt($ch1, CURLOPT_NOBODY, 1);
curl_setopt($ch2, CURLOPT_URL, $target2);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch2, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch2, CURLOPT_HEADER, 1);
curl_setopt($ch2, CURLOPT_NOBODY, 1);
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
$running = null;
do {
usleep(10000);
curl_multi_exec($mh, $running);
} while ($running > 0);
$headercode1 = curl_getinfo($ch1, CURLINFO_HTTP_CODE);
$headercode2 = curl_getinfo($ch2, CURLINFO_HTTP_CODE);
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
//echo $headercode1 . " ". $headercode2;
if ($headercode1 != 0){
$data_t1 = parse_url($target1);
$ip_t1 = gethostbyname($data_t1[host]);
$dname_t1 = gethostbyaddr($ip_t1);
$url_t1 = str_replace($ip_t1, $data_t1[host], $dname_t1);
$url_t1 = $data_t1[scheme] . "://" . $url_t1 . ":" . $data_t1[port];
header("Location:" . $url_t1);
} elseif ($headercode2 != 0) {
$data_t2 = parse_url($target2);
$ip_t2 = gethostbyname($data_t2[host]);
$dname_t2 = gethostbyaddr($ip_t2);
$url_t2 = str_replace($ip_t2, $data_t2[host], $dname_t2);
$url_t2 = $data_t2[scheme] . "://" . $url_t2 . ":" . $data_t2[port];
header("Location:" . $url_t2);
} else {
header("Location:" . $notworking);
}
}
?>
Спустя 14 минут, 55 секунд (13.10.2010 - 23:03) arvitaly написал(а):
Просто тихий ужас. Объедините одинаковые куски кода в функции, а то невозможно
_____________
...think about your actions.