Val Petruchek

подписывайтесь, а то хуже будет!  

ПОДПИСЫВАЙТЕСЬ НА RSS

Определение посещённых вами страниц

Было интересно попробовать, можно ли программно определять, какие страницы посетил пользователь. Оказалось — можно.

Понятное дело, что получить всю history нельзя, но проверить конкретные страницы — можно.

Update: это не просто вывод посещённых страниц одним цветом, а непосещенных — другим. Скрипт действительно по URLу может определить посещённая страница или нет; и может отправить эту информацию на сервер (например ajaxом).

Получить ID после Insert

26.06.07 @ 02:51 — Programming, PHP, SQL

Задача: получить идентификатор только что добавленной в таблицу записи.
Необходимое условие: в таблице должно быть AUTO_INCREMENT поле.

Решение (MySQL): SELECT LAST_INSERT_ID();
Решение (PHP/MySQL): mysql_insert_id();
Решение (MsSQL): SELECT @@IDENTITY AS ID;

Замечания:

  1. Сбросить (поменять) значение Next Autoindex в MySQL: ALTER TABLE `table_name` AUTO_INCREMENT = 238;
  2. При выполнении INSERT запроса на добавление нескольких записей (insert into `table_name` (field1,…,fieldm) values (’value11′,…,’value1m’), …, (’valuen1′,…,’valuenm’);) MySQL в качестве LAST_INSERT_ID возвращает идентификатор первой вставленной записи, а не последней, как можно было бы предположить.
  3. В некоторых версиях MySQL был баг: при неуспешном выполнении команды INSERT IGNORE (если уникальный ключ уже существует и ничего не добавляется) LAST_INSERT_ID возвращает следующее доступное значение для авто-инкремента.
  4. Не использовать LAST_INSERT_ID, когда его надо использовать, нельзя. Вариант “быстренько пишем в базу и мгновенно делаем SELECT максимального значения авто-инкремента” ужасен и нестабилен.

Передать переменную из JavaScript в PHP

25.06.07 @ 22:54 — Programming, JavaScript, PHP

В свете бурного развития AJAX-технологий классический ламо-вопрос начинающего PHP-программиста:

Как передать значение переменной из JavaScript в PHP?

обретает новое звучание.

Запустили

Недоделанный, сырой, глюкавый и корявый, но свой.

Выложили несмотря на все недоделки, справедливо рассудив, что исправлять можно и после рождения запуска, а не бесконечно внося правки в период беременности разработки.

Программирование на PHP

21.06.07 @ 12:38 — Programming, PHP

Программировать на PHP очень легко, особенно до тех пор, пока сайт находится в разработке.

Когда дело доходит до промышленного использования легко разработанных скриптов, начинаются проблемы.

Например, начинает тормозить база: запросы, мгновенно отрабатывавшие на 100 тестовых записях, начинают подтормаживать уже на 5,000 записей. Using filesort, using temporary, using where.

Увеличивается количество посетителей сайта и начинаются проблемы с flock().

Генерирование всего-на-лету убивает процессор сервера: thumbnailы, pdfы и прочее так и просятся в кеш.

Возникают проблемы с доступом к удалённым ресурсам, которые могут и не ответить.

А при тестировании всё работало нормально: быстро, стабильно, красиво. А тестировать на прочность никто и не пытался.

Несмотря на все эти подводные грабли, PHP идеально подходит для мелкосредних бизнес-сайтов.

У предпринимателя есть сайт-идея. Он находит дешёвого php-программиста, который ваяет движок, реализующий эту идею. Движок дешёвый, на прочность не испытанный, но тем не менее работает: воплощает идею и позволяет предпринимателю раскручивать сайт. Который пока что работает относительно стабильно. Главное, что обходится предпринимателю он недорого, вкладываясь в бюджет, которым тот готов рискнуть: дизайн, движок, домен, хостинг, немного рекламы + время самого предпринимателя.

Далее, если идея оказывается неудачной, то сайт тихо мирно доживает до окончания регистрации домена и умирает.

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

Увеличение нагрузки означает повышение доходов. Сайт начинает приносить предпринимателю какие-то деньги, которые он может инвестировать в развитие бизнеса. Для сайта это означает: новый dedicated сервер вместо shared hosting, оптимизация движка, добавление нового функционала, переписывание движка с нуля.

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

Таблица Премьер-Лиги

Полная турнирная таблица чемпионата России.

В российском чемпионате самый продуманный список критериев для сортировки команд. В случае равенства очков у двух или более команд места команд (кроме первого) в текущей и итоговой таблице чемпионата определяются:

  • по наибольшему числу побед во всех матчах чемпионата;
  • по лучшей разности забитых и пропущенных мячей во всех матчах;
  • по результатам игр между собой (число очков, число побед, разность забитых и пропущенных мячей, число забитых мячей, число забитых мячей на чужом поле);
  • по наибольшему числу забитых мячей во всех матчах;
  • по наибольшему числу мячей, забитых на чужих полях во всех матчах.

Пока парсил данные в базу, нашёл кучу глюков в результатах матчей на разных сайтах. На УЕФА команды неправильно отсортированы, на sports.ru банальная ошибка в счёте.

На данный момент на сайте доступны таблицы чемпионатов Украины, Испании и России.

Таблица примеры

Полная турнирная таблица чемпионата Испании.

Кстати, при равенстве очков сравниваются личные встречи (в украинском чемпионате — количество побед).

Пока парсил данные в базу, нашёл кучу глюков в результатах матчей на разных сайтах.

На данный момент на сайте доступны таблицы чемпионатов Украины и Испании — чемпионатов, которые заканчиваются сегодня вечером.

Детальная турнирная таблица

Детальная турнирная таблица высшей лиги, пока только для Украины.

Но система легко расширяема — движок универсальный, его надо данными накормить и всё.

Виртуальное свидание

08.06.07 @ 21:11 — JavaScript, Links, Games

Интернет-игрушка, целью которой является получить секс от компьютерно-прорисованной брюнетки.

Играть можно как в онлайне, так и в оффлайне, предварительно скачав игру себе на диск. Сделана игрушка на html (фреймы и джаваскрипт).

Если у вас не получается быстро пройти игру (т.е. получить секс от Арианы), то имейте в виду, что в игре пять с половиной концовок: 5 способов получить классический секс + 1 способ получить минет.

P.S. Не игрушка, а какой-то день сурка.

PHPMyAdmin — загрузить большой файл с дампом

07.06.07 @ 23:24 — Programming, Software, PHP

Совершенно случайно обнаружил в phpmyadmin возможность выполнения sql-кода из файла, расположенного на сервере. Эта фича очень удобна в том случае, когда необходимо зачитать большой sql dump (например при переезде базы с одного сервера на другой).

Я интересовался этой фичей давно, но по умолчанию она отключена, а поискать в настройках/документации я не догадался. Решил, что раз нет интерфейса, то и фичи тоже нет. Оказывается, фича есть. Чтобы её включить, надо в настройках phpmyadminа указать имя директории для загруженных файлов в опции $cfg[’UploadDir’]. Имя директории надо указывать относительно корневой папки phpmyadminа. Пустое имя = отключенная фича.

Если имя не пустое, то при выборе пункта меню Import File to import можно будет не только “Browse location of the text file”, но и выбрать его из “web server upload directory”. Расширение файла должно быть или .sql или .zip/.bz2/.gz в зависимости от поддерживаемых методов компрессии. Расширение файла должно быть нижнерегистровым.

Вот что написано в мануале по поводу этой фичи:

$cfg[’UploadDir’] string
The name of the directory where SQL files have been uploaded by other means than phpMyAdmin (for example, ftp). Those files are available under a drop-down box when you click the database name, then the SQL tab.

If you want different directory for each user, %u will be replaced with username.

Please note that the file names must have the suffix “.sql” (or “.sql.bz2″ or “.sql.gz” if support for compressed formats is enabled).

This feature is useful when your file is too big to be uploaded via HTTP, or when file uploads are disabled in PHP.

Please note that if PHP is running in safe mode, this directory must be owned by the same user as the owner of the phpMyAdmin scripts.

Я не тестил последний phpmyadmin, но в используемой мною версии список файлов появляется не на закладке “SQL”, а на закладке “Import”.

« Previous PageNext Page »   
Реклама::

 
Реклама::