зависит от того корректно ли закрывается скрипт.
в любом случае смысла в деструкторе нет - скрипт(точнее исполняюзая среда) и сам освободит все ресурсы
Меня интересует, спадет ли блокировка файла flock, если скрипт внезапно прекратит работу.
Прочитал, что с версии php 5.3.2 автоматическое снятие блокировки при закрытии было удалено. А значит, что разблокировать файл необходимо самому.
Создал для этого небольшой класс и хочу убедиться, что он будет исправно работать.
Вызывается ли деструктор при сбое в работе скрипта? Например, если скрипт прерывает работу из-за лимитов сервера, либо если его закрывают через консоль, либо возникат фатальная ошибка? Могут ли быть такие случаи, когда скрипт прекратил работу, а деструктор класса не был вызван?
Здравствуйте
На сайте ~98% постов не имеют заголовка и краткого описания (превью новости)
Поэтому задумался над вопросом, как лучше хранить эти два поля
Первый вариант:
-Таблица posts
--post_id
--post_title
--post_description
--post_text
WHEN (SELECT`categories`.`class_id`FROM`categories`WHERE`categories`.`cat_url`='/patch/to/page/')
THEN (SELECT`classes`.`class_file`FROM`classes`,`categories`WHERE`classes`.`class_id`=`categories`.`class_id`AND`categories`.`cat_url`='/patch/to/page/')
ELSE (SELECT`classes`.`class_file`FROM`classes`WHERE`classes`.`class_id`=4) END
Но когда пытаюсь вытащить не одно поле `classes`.`class_file`, а два: `classes`.`class_file` и `classes`.`class_name` вылезает ошибка о количестве столбцов
WHEN (SELECT`categories`.`class_id`FROM`categories`WHERE`categories`.`cat_url`='/patch/to/page/')
THEN (SELECT`classes`.`class_file`,`classes`.`class_name`FROM`classes`,`categories`WHERE`classes`.`class_id`=`categories`.`class_id`AND`categories`.`cat_url`='/patch/to/page/')
ELSE (SELECT`classes`.`class_file`,`classes`.`class_name`FROM`classes`WHERE`classes`.`class_id`=4) END
На сайте ЧПУ
Структура таблиц:
Нажмите для увеличения
То есть, алгоритм примерно такой:
Нажмите для увеличения
Подскажите, пожалуйста, как вытащить 2 поля `classes`.`class_file` и `classes`.`class_name` по алгоритму, описанному выше
Руки отвалятся прописывать для каждой страницы свой url
Ну вот пример, где там руки отвалятся? (Добавление)
Он там автоматом от названия генерится.
Понял суть. Возьму на заметку, как запасной вариант
Пугает лишь такая картина:
Была категория "Новости" с url "/Новости". Редактирую url на "/Новости2"
Захожу на сайт, перехожу на страницу со статьей (адрес "/Новости/Статья...")
В силу своей привычки я не нажимаю "Назад" в браузере, а стираю в адресной строке "/Статья...", ожидая попасть в раздел с новостями. Попадаю на 404
Ваш вариант отличается от моего лишь тем, что у меня в планах было редактировать все значения в базе, а у Вас - одну запись
Благодарю за вариант
Вот ты гемор себе нашел..
Сделай каждому документу уникальный УРЛ и не парься.
Ожидается около 50-100 категорий (родительские, дочерние)
В каждой категории от 50 до 1000 страниц (постраничная навигация)
+ страницы с постами
Руки отвалятся прописывать для каждой страницы свой url. А если добавится новая страница в категории, то придется прибавлять +1 ко всем имеющимся (постраничная навигация)
Есть ссылка вида: site.ru/category/sub-cat1/sub-ca t2/sub-cat3/cat-with-post/post.h tml
Есть 3 таблицы:
-categories
--cat_id
--cat_parent_id
--cat_title (название категории на русском)
--cat_name (название категории транслитом. Именно эта строка находится в url: "sub-cat1", "cat-with-post")
-posts
--post_id
--post_title (название на русском)
--post_text
--post_name (название на транслите)
-links (Так как статья может принадлежать сразу нескольким категориям, создана эта таблица)
--link_id
--post_id
--cat_id
Нужно:
1. Определить cat_id категории статьи (cat-with-post)
2. Проверить корректность url.
Поясняю:
Первое:
Если делать запрос типа
SELECT `cat_id` FROM `categories` WHERE `cat_name`='cat_with_post'
То нельзя будет использовать одинаковые имена категорий, иначе они будут путаться
Чтобы путаницы не было, необходимо искать cat_id исходя из поля cat_parent_id (идентификатор категории-родителя). Проблема тут в том, что при большой вложенности к базе будет очень много запросов
Выход из данной ситуации вижу один - хранить в базе не отдельные кусочки ("sub-cat3", cat-with-post"...), а полностью url ("category/sub-cat1/sub-cat2/sub-cat3/cat-with-post/"). Но тут возникает другая проблема. Если я захочу изменить название какой-нибудь категории, то редактировать придется всю таблицу (Например, захочу заменить "sub-cat2" на "subcat-2").
Второе:
Если определять идентификатор только cat-with-post, а на остальное просто не смотреть, то статья станет доступной по адресам:
site.ru/cat-with-post/post.html
site.ru/sub1/cat-with-post/post. html и т.д.
А это не очень хорошо. Поэтому нужно проверять правильность иерархии. Тут бы отлично бы справился второй вариант, но меня отпугивает возможная проблема с редактированием
UPD: Раньше использовал ссылки типа site.ru/1.cat/5.sub/123.post.hym l
Где 1,5,123 - идентификаторы статьи и категорий. Я просто брал эти id, а на сами названия не смотрел. Поэтому в скором времени обнаружилась ошибка, что одна и та же статья доступна по адресам 1./5.sub/123.----.hyml, 1.caaaat/5./123.pt.hyml и т.д.
Да и смотрятся такие url'ы ужасно, раздражают глаза. Куда лучше, когда в ссылке нет id Поэтому в новом варианте хочу использовать формат, как писал в начала сообщения
Еще есть вариант, изменить таблицу stats, а именно добавить поле source
В этом поле будет храниться в формате json массив:
Array(
'Site1.ru' => array( 'views' => 20, 'hits' => 10, 'a_clicks' => 5, 'u_clicks' => 2),
'Site2.ru' => array( 'views' => 30, 'hits' => 20, 'a_clicks' => 6, 'u_clicks' => 4),
...
)
И каждый раз, при обновлении статистики, обновлять этот массив.
Алгоритм:
Сайтом пользуются N человек ( 10<N<500 )
Каждый из них может создать по 1-100 потоков для приема трафика
Нужно отслеживать статистику по этим потокам по след.пунктам:
-хиты
-просмотры
-уникальный клики по ссылке http://site[dot]ru/go/123
-все клики по этой ссылке
-источники трафика
С первыми 4-мя проблем не возникло. Создал 2 таблицы для этого:
xsql("UPDATE `stats` SET `views`=`views`+1, `hits`=`hits`+1 WHERE `id`=".$s_row['id']);
//Заносим ip в базу данных
xsql("INSERT INTO `ips` (`id_flow`, `type`, `ip`) VALUES (".$id_flow.", 0, ".$ip.")");
}else{//Если это не уникальный посетитель
//Прибаляем +1 к просмотрам
xsql("UPDATE `stats` SET `views`=`views`+1 WHERE `id`=".$s_row['id']);
}
}
}
Этот код инклудится в скрипт отдачи страниц для приема трафика (Его содержимое не важно. За исключением 2-х моментов: $id_flow - поток трафика, который создает юзер, $id_go используется для того, чтобы отличить переход на целевую страницу от просмотра одностраничника)
Вот так собирается стата по просмотрам и кликам. Ее можно сортировать по дате (Например, просмотреть статистику с 1 по 20 числа)
Теперь вопрос. Как лучше прикрутить сюда сортировку по сайтам-источникам? Статистику по ним нужно будет сортировать по дням (Посмотреть, сколько с источника было уникальных посетителей, сколько кликов по ссылке за определенный срок). То есть, должны собираться первые 4 параметра!
Была идея создать таблицы: хиты, просмотры, уник.клики, все клики. А при просмотре статистики запрашивать количество записей. Но думаю, что это плохой вариант, и должен быть другой способ. Не будут ведь так хранить данные какие-нибудь гиганты статистик, как я.метрика, или партнерские программы, например, CPA-пп
В общем, как нужно сконструировать таблицы в бд для моих целей? Заранее спасибо
На деле хочу сделать следующее:
Есть класс-обертка для curl
Хочу написать класс, с помощью которого буду авторизовываться/совершать действия/выходить из аккаунта на одном сайте
Для этого мне надо использовать некоторые методы из класса-обертки
Может неправильно строю код? Набросайте пример, как надо действовать в таком случае (где и как создавать объект). Спасибо!
P.S. Как я понял
class my_class{...} - сам класс, а
$my_obj = new my_class(); - его объект. Поправьте, если не прав
например через FTP, SSH. Ну и через шел по любому доступному протоколу.
Никогда не используйте исходные файлы. Сохраняйте обработанную (отресайзенную) копию, оригинал зачем держать?
SSH отключен.
Чтобы залить через FTP, нужно знать логин и пароль для доступа, верно?
Цитата:
Ну и через шел
Шелл еще нужно загрузить, если мы думаем об одном и том же... Я имею ввиду шеллы типа WSO
Есть папка на сервере с правами 777
Папка доступна пользователям для просмотра, то есть, находится она внутри каталога сайта, а не выше него.
Может ли кто-нибудь загрузить в нее файл, не используя интерфейс сайта?
вопрос 2.
Будьте добры, укажите на ошибки в коде (в плане безопасности)