Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Каждой стране свой баннер


Автор: Каролина 18.3.2011, 22:42
Есть такой скрипт,открывающий для определённой страны свою страницу:
Код

<?php
$ip = $_SERVER["REMOTE_ADDR"];
include("geoipcity.inc");
$gi = geoip_open("GeoIPCity.dat",GEOIP_STANDARD);
$giorg = geoip_open("GeoIPOrg.dat",GEOIP_STANDARD); 
$record = geoip_record_by_addr($gi, $ip);
$org = geoip_org_by_addr($giorg, $ip); 
if($record->country_code == UA)
{
include("1.html"); exit;
break;
} 
if($record->country_code == KZ)
{
include("2.html");exit;
break;
} 
if($record->country_code == GE)
{
include("3.html");exit;
break;
} 
if($record->country_code == AU)
{
include("4.html");exit;
break;
} 
if($record->country_code == LV)
{
include("5.html");exit;
break;
}
if($record->country_code == IT)
{
include("6.html");exit;
break;
}
if($record->country_code == AR)
{
include("7.html");exit;
break;
}
if($record->country_code == BE)
{
include("8.html");exit;
break;
} else {
include("9.html");exit;
}
geoip_close($gi);
geoip_close($giorg);
?>

теперь на его основе хочу сделать скрипт чтоб для каждой страны показывался свой баннер,баннер в виде картинки jpg.Скажите как сделать чтоб вместо страницы html показывалась картинка соответствующая стране.

Автор: Evghenusi 19.3.2011, 00:11
Код

if($record->country_code == UA)
{
$img='UA.jpg';
} 
if($record->country_code == KZ)
{
$img='KZ.jpg';
} 
if($record->country_code == GE)
{
$img='GE.jpg';
} 
if($record->country_code == AU)
{
$img='AU.jpg';
} 
if($record->country_code == LV)
{
$img='LV.jpg';
}
if($record->country_code == IT)
{
$img='IT.jpg';
}
if($record->country_code == AR)
{
$img='AR.jpg';
}
if($record->country_code ==  BE)
{
$img='BE.jpg';
} else {
$img='xз.jpg';
}

echo "<img src='$img' alt='' border='0' />";

Автор: Каролина 19.3.2011, 01:12
Сделала вот так:
Код

<?php
$ip = $_SERVER["REMOTE_ADDR"];
include("geoipcity.inc");
$gi = geoip_open("GeoIPCity.dat",GEOIP_STANDARD);
$giorg = geoip_open("GeoIPOrg.dat",GEOIP_STANDARD); 
$record = geoip_record_by_addr($gi, $ip);
$org = geoip_org_by_addr($giorg, $ip); 
if($record->country_code == UA)
{
$img='banners/UA.jpg';
} 
if($record->country_code == RU)
{
$img='banners/RU.jpg';
} 
if($record->country_code == AZ)
{
$img='banners/AZ.jpg';
} 
if($record->country_code == LV)
{
$img='banners/LV.jpg';
} 
if($record->country_code == DE)
{
$img='banners/DE.jpg';
}
if($record->country_code == FR)
{
$img='banners/FR.jpg';
}
if($record->country_code == US)
{
$img='banners/US.jpg';
}
if($record->country_code ==  BE)
{
$img='banners/BE.jpg';
} else {
$img='banners/WW.jpg';
}
geoip_close($gi);
geoip_close($giorg);
echo "<img src='$img' alt='' border='0' />";
?>


Но меняя,подставляя айпишники этих стран всегда выводится только картинка WW.jpg тоесть та которая по идее должна выводится если ни одна страна из списка не попадает.Тот код со страницами HTML который я взяла за образец работает на ура.

Автор: Shogun 19.3.2011, 15:39
Код

<?php
$ip = $_SERVER["REMOTE_ADDR"];
include("geoipcity.inc");
$gi = geoip_open("GeoIPCity.dat",GEOIP_STANDARD);
$giorg = geoip_open("GeoIPOrg.dat",GEOIP_STANDARD); 
$record = geoip_record_by_addr($gi, $ip);
$org = geoip_org_by_addr($giorg, $ip); 


$countries = array('UA', 'RU', 'AZ', 'LV', 'DE', 'FR', 'US', 'BE');
$country = in_array($record->country_code, $countries) ? $record->country_code : 'WW';

$img = 'banners/'.$country.'.jpg';


geoip_close($gi);
geoip_close($giorg);
echo "<img src='$img' alt='' border='0' />";
?>

Автор: Каролина 19.3.2011, 15:58
Shogun, спасибо,ваш вариант работает,а можно сделать чтоб вместо картинок были флэшки SWF-файлы,так как с картинками неудобно немного потому что к конкретному банеру в JPG невозможно прикрутить ссылку.

Автор: Shogun 19.3.2011, 16:07
Цитата(Каролина @  19.3.2011,  15:58 Найти цитируемый пост)
Shogun, спасибо,ваш вариант работает,а можно сделать чтоб вместо картинок были флэшки SWF-файлы,так как с картинками неудобно немного потому что к конкретному банеру в JPG невозможно прикрутить ссылку. 


нзч, это почему нельзя картинкам ссылки ставить?
Код

echo "<a href='http://...'><img src='$img' alt='' border='0' /></a>";


Ну если Вам очень не хватает головной боли то можете и флэш ставить, что мешает вместо вывода картинки сделать вывод swf??

например:
Код

$img = '/banners/'.$country.'.swf';

echo '<object width="50" height="50">
<param name="movie" value="'.$img.'">
<embed src="'.$img.'" width="50" height="50"></embed>
</object>';

это минимум, не лучший вариант наверное...

Автор: Каролина 19.3.2011, 16:16
Цитата

нзч, это почему нельзя картинкам ссылки ставить?

Потому что ссылка будет одна на все баннеры,что это будет баннер RU.jpg что UA.jpg
Здесь то ссылка будет постоянной,а меняется же только переменная в которой картинка:
Код

echo "<a href='http://...'><img src='$img' alt='' border='0' /></a>";

Автор: Shogun 19.3.2011, 16:40
Цитата(Каролина @ 19.3.2011,  16:16)
Цитата

нзч, это почему нельзя картинкам ссылки ставить?

Потому что ссылка будет одна на все баннеры,что это будет баннер RU.jpg что UA.jpg
Здесь то ссылка будет постоянной,а меняется же только переменная в которой картинка:
Код

echo "<a href='http://...'><img src='$img' alt='' border='0' /></a>";

И как должны выглядеть ваши ссылки?

Если также как и код картинки, меняется только часть кода с ид страны то например:
Код

echo "<a href='http://site.com/country/".$country."'><img src='$img' alt='' border='0' /></a>";


Если же для каждой страны отдельная ссылка не похожая на другие то:
Код

$links = array('RU'=>'http://site.ru', 'UA'=>'http://site.ua', 'AZ'=>'http://site.az' .......);

echo "<a href='".$links[$country]."'><img src='$img' alt='' border='0' /></a>";

Автор: Каролина 19.3.2011, 17:02
Shogun, спасибо,как раз что надо.

Автор: Muerto 19.3.2011, 17:12
Цитата(Evghenusi @ 19.3.2011,  00:11)
Код

if($record->country_code == UA)
{
$img='UA.jpg';
} 
if($record->country_code == KZ)
{
$img='KZ.jpg';
} 
if($record->country_code == GE)
{
$img='GE.jpg';
} 
if($record->country_code == AU)
{
$img='AU.jpg';
} 
if($record->country_code == LV)
{
$img='LV.jpg';
}
if($record->country_code == IT)
{
$img='IT.jpg';
}
if($record->country_code == AR)
{
$img='AR.jpg';
}
if($record->country_code ==  BE)
{
$img='BE.jpg';
} else {
$img='xз.jpg';
}

echo "<img src='$img' alt='' border='0' />";

Бред...

За место всего этого ужоса нужно просто
Код

$img = $record->country_code . '.jpg';


 smile 

Если не для всех есть баннер, то можно проверить если файл существует, если нет то показать по умолчанию...

Автор: Каролина 19.3.2011, 17:27
А ещё впрос,извините если не сюда,но относится к моему скрипту.Как можно изменить на локальном сервере 127.0.0.1 на нужный мне для проверки правильности отображения баннеров? Пробовала в сети заходить на сайт со скриптом через прокси но не получается,в исходном коде страницы смотрю прокси меняет все пути до баннеров на свои шифрованные какие-то.

Автор: Shogun 19.3.2011, 17:30
Muerto, я так и написал выше, только вместо file_exists сделал с in_array, так лучше думаю.

Автор: Каролина 19.3.2011, 17:53
Кто-нибудь знает как можно изменить на локальном сервере 127.0.0.1 на нужный мне для проверки правильности отображения баннеров? Пробовала в сети заходить на сайт со скриптом через прокси но не получается,в исходном коде страницы смотрю прокси меняет все пути до баннеров на свои шифрованные какие-то.

Автор: Evghenusi 19.3.2011, 23:18
Цитата(Muerto @  19.3.2011,  17:12 Найти цитируемый пост)
Бред...
 код не мой, что предоставили с тем и работал, о оптимизации речь не шла

Автор: Muerto 20.3.2011, 01:28
Evghenusi,  smile 

Просто представьте себе стран 100

...

и каждый раз 
if
if
if
if

ПРичем если самый первый if нашел то что нужно, все равно будет проверять ещё 99 раз...

Конечно сравнения простые не займут больше чем 0.02 секунды в среднем наверно....
Но если бы функция была посложней...

как минимум if-else
ещё лучше switch case (читабельней) 
ну а ещё лучше ухитриться ... как вот Shogun подсказал, и я свои 5 копеек добавил  smile 

Автор: sash23 20.3.2011, 03:26
Цитата(Каролина @ 19.3.2011,  17:53)
Кто-нибудь знает как можно изменить на локальном сервере 127.0.0.1 на нужный мне для проверки правильности отображения баннеров? Пробовала в сети заходить на сайт со скриптом через прокси но не получается,в исходном коде страницы смотрю прокси меняет все пути до баннеров на свои шифрованные какие-то.

в начале скрипта:
Код

$_SERVER['REMOTE_ADDR'] = '192.168.0.1';

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)