IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   скрипт рекламы (https://www.imho.ws/showthread.php?t=123309)

Pinky 05.09.2007 23:21

скрипт рекламы
 
Помогите сделать php скрипт:
Идея такая есть папка reclama в ней лежат тхт файлы с кодами баннеров.
Надо чтобы при каждом обновлении страницы скрипт выбирал слудущий или произвольный файл из папки и показывал баннер.

Псих 06.09.2007 00:53

Извините за офф-топ.
А какую нагрузку по твоему мнению, должен выдерживать такой скрипт?

ЗЫ.
Советую обратить внимание на функции readdir, fopen и fread. Это если решать задачу так как указанно в сообщении.

RaZEr 06.09.2007 02:09

Цитата:

А какую нагрузку по твоему мнению, должен выдерживать такой скрипт?
Да впринципе любую выдержит, если грамотно сделать. Операция чтения небольшого файла врядли свалит дисковую подсистему.

BorLase 06.09.2007 03:30

Цитата:

Сообщение от RaZEr (Сообщение 1455215)
Да впринципе любую выдержит, если грамотно сделать. Операция чтения небольшого файла врядли свалит дисковую подсистему.

сложно сказать...

прочитать список файлов - раз
выбрать один, прочитать его содержимое - два

реально - при мало-мальски серьезной нагрузке винт просто не будет останавливаться...

ИМХО, много проще через БД все это оформить - тем более, что дел-то на 15 минут...

Pinky 06.09.2007 10:01

Я просто человек в этом деле новый,может тогда подскажите,что-то более лучшее?

Псих 06.09.2007 10:23

RaZEr, ну как тебе сказать, банерокрутилка настоящая, для огромных нагрузок пишеться либо модулем как модуль апача либо под нее выделяеться отдельный сервер. Ичане при 50% ресурсов, как мин, будет уходить на крутилку, особенно, если нужно показывать несколько баннерных площадей.


BorLase, не сказал бы, что решение с бд менее тяжелое. Как минимум +1 коннект к бд каждый раз. Не зря говорят, что самый быстрый вариант брать инфу с диска.
Только брать ее нужно в кэшированном html (если уж на то пошло).

ИМХО

EvroStandart 06.09.2007 10:25

А зачем с текстовыми файлами заморачиваться? В таком случае сделать массив в томже скрипте. Каждый элемент массива - код банера.

Потом генерируеш нужный номер и вставляеш код примерно так:
echo $baner[ $nomer ];

:)

Псих 06.09.2007 10:28

EvroStandart, а для обновления ротации баннеров перезаливать скрипт?

EvroStandart 06.09.2007 10:32

Цитата:

Сообщение от Псих (Сообщение 1455303)
а для обновления ротации баннеров перезаливать скрипт?


Ну типа да. Всё равно чтото перезаливать придётся. Можно конечно список банеров в отдельный файл вынести.

BorLase 06.09.2007 12:59

Цитата:

Сообщение от Псих (Сообщение 1455297)
BorLase, не сказал бы, что решение с бд менее тяжелое. Как минимум +1 коннект к бд каждый раз. Не зря говорят, что самый быстрый вариант брать инфу с диска.
Только брать ее нужно в кэшированном html (если уж на то пошло).

ИМХО

сложно сказать... как программер программеру ;) - вряд ли с лету можно закодить путевый алгоритм кеширования в одиночку лучше, чем это сделает команда-разработчик БД

просто предложенный вариант предполагает пусть короткие, но постоянные обращения к диску... а это никогда никому впрок не шло

особенно винту :)

GoodS 06.09.2007 14:39

Человеку надо всего лишь баннерокуртилку сделать а вы ему про нагрузку на сервер... ппц какойто, 8 сообщений оффтопа, включая моё!

BorLase 06.09.2007 14:52

чаще всего сервера кладут в даун именно подобные "всего лишь"

потому как делаются по принципу "о, у меня работает - выкладываем!"

а потом загибаются на 20 одновременных коннектах

RaZEr 06.09.2007 18:02

Цитата:

прочитать список файлов - раз
Список файлов ненадо читать по сто раз. Достаточно один раз его кэшировать, и далее просто считывать как текст. А можно создать симлинки со специально организованными именами. А можно... ну вообщем, ты невнимательно читаешь что я пишу: "если грамотно сделать"

Цитата:

RaZEr, ну как тебе сказать, банерокрутилка настоящая, для огромных нагрузок пишеться либо модулем как модуль апача либо под нее выделяеться отдельный сервер. Ичане при 50% ресурсов, как мин, будет уходить на крутилку, особенно, если нужно показывать несколько баннерных площадей.
Настоящую баннерокрутилку модулем апача будет писать только полный идиот. При базовых навыках владения си (а при умении писать модули апача они точно будут) пишется постенький сокет-интерфейс, который заточен под работу с shared memory. Причём я слабо сомневаюсь что этот интерфейс будет активно работать с MySQL, если вообще будет. Под шквальной нагрузкой MySQL потребует такого железа, что одних блоков питания будет стоять на пару киловатт.

Цитата:

чаще всего сервера кладут в даун именно подобные "всего лишь"
Да, это точно. Обычно погоня за этими "всего лишь", отвлекает от нахождения реальных косяков :)

BorLase 06.09.2007 21:54

Цитата:

Сообщение от RaZEr (Сообщение 1455580)
Список файлов ненадо читать по сто раз. Достаточно один раз его кэшировать, и далее просто считывать как текст.

ага... :) а добавив новый баннер в ротацию - перезапускать сервер? ;)

нет, можно, конечно... :) но тогда, с тем же успехом, можно сказать и так - "не надо читать баннеры как отдельные файлы - зачитал все в память (или в страницу зашил намертво) - и дальше в ротацию"

RaZEr, я просто 17 лет профессионально программирую, причем именно для веб (на джаве, правда) - поэтому немножко знаю, о чем пишу :beer:

Saruman 06.09.2007 22:47

Цитата:

Сообщение от BorLase (Сообщение 1455636)
а добавив новый баннер в ротацию - перезапускать сервер?

рыдаль. А кеш мы умеем чистить только рестартом сервера, получается? 8) Следы программирования на джаве, можно сказать, налицо 8)))

metrim 06.09.2007 22:57

Народ, все такие умные, я просто прусь от вас. Какое то кеширование, нагрузка.
Походу всё несколько сложнее чем я себе представлял.
У меня сделано всё на мой взгляд проще. В базу записаны даные о банерах (альт, линк и пр.) скрипт вбора банера просто считывает из базы данные о банерах в нумерованный массив, а потом с помощью функции случайного числа просто выбирает банер ...
Так же просто это можно и просто считав файлы в дирректории.

Неужели такой подход даёт столь уж серьёзную нагрузку на сервант?

BorLase 06.09.2007 23:07

Цитата:

Сообщение от Saruman (Сообщение 1455647)
рыдаль. А кеш мы умеем чистить только рестартом сервера, получается? 8) Следы программирования на джаве, можно сказать, налицо 8)))

хм... смайлов, вродь бы, хватает... :(

просто это настолько же "эффективное" решение, как и чтение (в данном случае) файлов с диска.

зачем изобретать велосипед? из врожденного мазохизма?

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

зачем это писать самому (а это придется делать, из соображений эффективности, если хиты пойдут не десяток в час, а сотни в секунду), если в любой БД эти механизмы уже реализованы (и, заметим, много эффективней, чем в РНР)?

именно об этом речь.

xroot 07.09.2007 11:49

Код:

Program Name : TextAds
Version : 1.0
Release Type : advertisment system
WST Rel Date : 09/03/2006
Program Author : IDevSpot
Home Page : http://idevspot.com
Retail Price : $19.41
WST Price : Always 100% free
Supplied by : Mr.X
Nulled by : Reef
Tested by : Reef
Project by : WST
Distribution : via WST and Grinderz
Protection : Hotlinks
Compatibility : Win32/Linux/Unix
Language : PHP/MySQL
Extra Note : N/A
Online Demo : http://idevspot.com/TextAds.php
Documentation : N/A
*************************************************
Script Info:

Fully automated advertisment system for your website with
Paypal integration.

Text Ads allows you to sell text advertisement spots on
your website automatically and hands free.

Advertisments are text based and look similar to Google
Adwords, tho they are fully customizable.

Now visitors to your website can create their own Adwords-like
ad box for display on your website. Their ad is activated
automatically after they complete a Paypal purchase. You
can create any number of impression-based advertisement plans
then all you have to do is place the ad box somewhere on your
website and Text Ads will take care of the rest from providing
your advertiser with the offer to advertise on your website, to
advertisement campaign creation, to activation, billing and
finally deactivation of an ad campaign when its impressions run out.

Unlike Adwords however TextAds offers impression based
advertisement packages, clients can pay for and activate
their ads instantly with Paypal.

Each client receives their own control panel in which they can
create, edit and activate multiple campaigns. The client control
panel includes easy registration and password recovery features

You can define the number of ads to display at one time, Text Ads
will cycle through the list of active ads and select at random
which to display you have more active ads then ad spots.

Administrators can edit, activate, de-activae and reset client
campaigns, view and email and delete clients. Administrators
can also place their own ads from within administration.

Text Ads lets you pre-create the ad packages to offer your clients,
you define the number of impressions and the price for that package.

http://rapidshare.com/files/53989726/TextAds.rar.html

не текст файлы конечно ,зато нагрузку выдержит ;)

RaZEr 08.09.2007 09:21

Цитата:

RaZEr, я просто 17 лет профессионально программирую, причем именно для веб (на джаве, правда) - поэтому немножко знаю, о чем пишу
Я слабо верю что в 90-ом году в Киеве был веб. Равно как и джава, которую только в 95 изобрели. Заканчивай эту демагогию.

Цитата:

зачем это писать самому (а это придется делать, из соображений эффективности, если хиты пойдут не десяток в час, а сотни в секунду), если в любой БД эти механизмы уже реализованы (и, заметим, много эффективней, чем в РНР)?
Везде свои "накладные расходы". PHP тратит ресурсы на виртуализацию, MySQL на возможности многие из которых не нужны в контексте текущей задачи. Но так или иначе, я говорил о высоконагруженных системах. Очевидно, что для небольших банерообменных систем предпочтительней использовать БД, т.к. это проще и удобней.

Цитата:

У меня сделано всё на мой взгляд проще. В базу записаны даные о банерах (альт, линк и пр.) скрипт вбора банера просто считывает из базы данные о банерах в нумерованный массив, а потом с помощью функции случайного числа просто выбирает банер ...
Всё ещё проще - используй ORDER BY RAND()

Pinky 08.09.2007 14:03

неужели 3-5 баннеров могут создать такую нагрузку на сервер?

Псих 08.09.2007 15:56

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

RaZEr 09.09.2007 05:34

Цитата:

неужели 3-5 баннеров могут создать такую нагрузку на сервер?
Если тебе нужно в одном месте сайта показывать разные баннеры, то лучше это написать на JS. Например:

var codes;
codes.push('код баннера #1');
codes.push('код баннера #2');
codes.push('код баннера #3');
document.write(codes[Math.round(codes.length*Math.random())]);


Часовой пояс GMT +4, время: 13:18.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.