Перейти к контенту

Журнал - Дневник


Рекомендуемые сообщения

  • Ответы 1k
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Разбор полетов с IE7 и MIME-TYPES

 

var $mime_allowed = array (

'application/msword' => '.doc',

'application/zip' => '.zip',

'application/x-zip-compressed' => '.zip',

'audio/x-mpeg' => '.mp3',

'audio/mpeg' => '.mp3',

'audio/mp3' => '.mp3',

'text/plain' => '.txt');

 

Гарантировано работают zip, mp3, doc, txt (тестировал на apache c включенным mod_mime и mime_magic), браузеры ie 6-7, opera 9, firefox 2

Ссылка на комментарий
Поделиться на других сайтах

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

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

Ну а переделать на прямую ссылку - всего 2 строчки заменить :D

Ссылка на комментарий
Поделиться на других сайтах

replicant

разбор полетов...
на всякий случай еще раз (извините за навязчивость :D ) позволю себе напомнить: вот еще 2 mime типа, которых нет в вашем списке:

'image/x-png' => '.png'

'image/jpg' => '.jpg'

вдруг у кого-то еще, как у меня, была проблема - некоторые пользователи не могли загружать jpg и png.

Ссылка на комментарий
Поделиться на других сайтах

(правда нет проверки на закрытые записи (можно легко добавить))...

Ну а переделать на прямую ссылку - всего 2 строчки заменить ;)

 

Добавляем проверку запрета просмотра по прямой ссылке на файл через .htaccess в папке upload

 

RewriteEngine On
RewriteOptions MaxRedirects=100
RewriteCond %{HTTP_REFERER} !^http://(www\.)?site1\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?site2\.ru/ [NC]
#RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpe?g|gif|png|jpg|mp3|doc|txt|zip)$ http://www.site.ru/fake.gif [L]

 

Если у вас папка UPLOAD состоит из подкаталогов, куда аттачи скидываются по-юзерным или по-месячным методом прокатит такой код

 

RewriteEngine On
RewriteOptions MaxRedirects=100
RewriteCond %{HTTP_REFERER} !^http://(www\.)?site1\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?site2\.ru/ [NC]
#RewriteCond %{HTTP_REFERER} !^$
RewriteRule /*/*\.*$ http://www.site.ru/fake.gif  [L]

 

в таком случае файл должен лежать в /upload/ и будет защищать все подкаталоги со всеми файлами, дальше уже возможны любые вариации на ваше усмотрение

 

site1 site2 список разрешенных url, www.site.ru/fake.gif - картинка или файл заглушка, который будет подставляться в случае попытки прямого обращения по url файла из папки аттачей

 

За основу взята идея Anna из мода запрета обращения к папкам и файлам.

 

replicant
разбор полетов...
на всякий случай еще раз (извините за навязчивость :D ) позволю себе напомнить: вот еще 2 mime типа, которых нет в вашем списке:

'image/x-png' => '.png'

'image/jpg' => '.jpg'

вдруг у кого-то еще, как у меня, была проблема - некоторые пользователи не могли загружать jpg и png.

 

Эти типы есть у меня в image_lib.php, я в своем разборе полетов указывал типы для zip, mp3, doc, txt, которые позволят работать моду опубликованному мною выше и использующему upload_lib.php

 

Вобщем указанные мной типы подходят для этого поста Журнал - Дневник

 

Вопрос залу: кто-нибудь использует метод хранения аттачей как /uploads/user_id/ т.е. сохранение аттачей в каталогах по id юзера?

 

ИМХО очень логичное решение проблемы кучи файлов в одном каталоге.

 

У кого-нибудь идеи такого мода?

Ссылка на комментарий
Поделиться на других сайтах

идея проста, нам же известен номер пользователя, от которого грузится файл?

(он передается в названии файла)

этот номер оттуда забираем регуляркой

при аплоаде смотрим, есть ли уже такая папка

нет - создать и @chmod 777

если не создалось, то тут уж в главную директорию пихаем

плюс возвращаем некоторые данные типа directory после загрузки

эти данные пишем в новую колонку в таблице аттачей (которую создаем ALTER TABLE)

Ссылка на комментарий
Поделиться на других сайтах

я в своем разборе полетов указывал типы для zip, mp3, doc, txt, которые позволят работать моду опубликованному мною выше и использующему upload_lib.php
Понятно. Туплю! :D

 

Я использую систему хранения аттачей, как в Invision Gallery - новый подкаталог создается, когда количество файлов в старом превысит порог, установленный в админке. Было бы, конечно, здорово сделать так, как ты предлагаешь, но на момент, когда я добавляла эту систему, у нас на форуме были уже десятки тысяч загруженных файлов и не захотелось это разгребать.

ИМХО очень логичное решение проблемы кучи файлов в одном каталоге.

Да, так было бы удобней! Только опять-таки - проблема с переходом на эту систему. Придется распихивать имеющиеся файлы по папкам.

Ссылка на комментарий
Поделиться на других сайтах

Arhar, да, конечно. Но если не перемещать уже загруженные файлы, тогда теряется основной плюс решения "все файлы пользователя - в одном месте, в папке с его id". Тогда все равно, как именно дробить файлы по подкаталогам.
Ссылка на комментарий
Поделиться на других сайтах

Перемещать? Конечно. Копируем файл на новом месте, а на старом - стираем.

 

PHP много чего может, было бы время и желание все это сделать :D

 

хехе, "о сколько нам открытий чудных"... вот php.net мне подсказывает, что и для перемещения файла есть функция, называется rename()

Ссылка на комментарий
Поделиться на других сайтах

Arhar

идея проста, нам же известен номер пользователя, от которого грузится файл?

(он передается в названии файла)

этот номер оттуда забираем регуляркой

не надо регуляркой. зачем усложнять. $journal->users['id'] всегда содержит ID текущего дневника. только про global $journal; надо не забыть там где он нужен. :D

 

 

replicant

Добавляем проверку запрета просмотра по прямой ссылке на файл через .htaccess в папке upload

Я не это имел ввиду. Так нельзя запретить просмотр аттачей в закрытом дневнике/записи. Ну вобщем каждый выберет то, что ему больше подходит... Вариантов много.

Ссылка на комментарий
Поделиться на других сайтах

Я смотрю еще не все сделали вынос CSS-кода из кода страницы

Если кому-то надо кроме меня :D , то вот так делаем:

 

В файле /journal/journal.php

 

находим: (в функции output)

$output['CSS'] .= "\n".implode(" ",@file($ibforums->vars['j_user_css_dir']."/style_".$this->users['id'].".css"));

 

и заменяем на это:

$output['CSS'] .= "\n<link rel='stylesheet' type='text/css' href='".$ibforums->vars['j_user_css_url']."/style_".$this->users['id'].".css'>";

 

находим: (в функции redirect_screen)

$css .= "\n".implode(" ",@file($ibforums->vars['j_user_css_dir']."/style_".$this->users['id'].".css"));

 

и заменяем на это:

$css .= "\n<link rel='stylesheet' type='text/css' href='".$ibforums->vars['j_user_css_url']."/style_".$this->users['id'].".css'>";

 

 

Lera

.....

Вот как было пару дней назад

http://img70.imageshack.us/img70/2133/22bl1.jpg

 

А вот как сегодня. Текст прижимается к полям. Я себе и ещё паре человек из-за этого переделывала, а сейчас как представлю снова дизайн переписывать, так руки опускаются.

http://img166.imageshack.us/img166/3348/11lx5.jpg

 

Может есть решение без переделывания дизайнов?

как я и говорил в стиле все дело

а конкретнее вот в этом у .post свойство прописано PADDING-LEFT: 3px;

либо до 6-ки увелич, либо просто вместо этого поставь padding: 6px;

Ссылка на комментарий
Поделиться на других сайтах

Я не это имел ввиду. Так нельзя запретить просмотр аттачей в закрытом дневнике/записи. Ну вобщем каждый выберет то, что ему больше подходит... Вариантов много.

 

Я есс-но понял что ты имел ввиду совсем другое, но вариант с htaccess - это скажем так первый шаг избавиться от слишком "подозрительных" друзей, которые попав в список доступа к журналу начинают трезвонить обо всех фотках и раскидывать по сети url'ы приватных файлов.

 

Еще это удобный способ запретить автоматическое создание ресурсов на других сайтах, которые создает из картинок робот, бегающий и дергающий url аттачей.

 

 

Я смотрю еще не все сделали вынос CSS-кода из кода страницы

 

А какова основная цель данного изменения? Экономия на размере страницы или решение проблем с кеширование стиля некоторыми браузерами?

Ссылка на комментарий
Поделиться на других сайтах

А какова основная цель данного изменения? Экономия на размере страницы или решение проблем с кеширование стиля некоторыми браузерами?

 

1. ДА уменьшаем размер. что имхо вполне логично. Особено если юзверь внес кучу изменений с выбраный стиль то размер страницы растет и растет.

2. ДА кеширование, помоему очевидно что CSS не так часто и менется же. ну и зачем пользователям регулярно читающим эти блоги получать все снова и снова?

3. Поисковикам пофиг на оформление им нужно мясо (ну это как добивающий фактор :D )

4. У форума есть настроечка которая позволяет "кешить" CSS вот и Дневникам такое тоже нужно.

Ссылка на комментарий
Поделиться на других сайтах

Сократим размер css

 

1. SQL

ALTER TABLE ibf_jmembers ADD j_css_cache tinyint(1) default 0 AFTER j_css_custom

2. ./journal/journal.php

найти

$output['CSS'] .= "\n".implode(" ",@file($ibforums->vars['j_user_css_dir']."/style_".$this->users['id'].".css"));

заменить на

	if($this->users['j_css_cache'])
{
	$output['CSS'] .= "\n<link rel='stylesheet' type='text/css' href='".$ibforums->vars['j_user_css_url']."/style_".$this->users['id'].".css'>";
}
else
{
	$output['CSS'] .= "\n".implode(" ",@file($ibforums->vars['j_user_css_dir']."/style_".$this->users['id'].".css"));
}

найти

$css .= "\n".implode(" ",@file($ibforums->vars['j_user_css_dir']."/style_".$this->users['id'].".css"));

заменить на

	if($this->users['j_css_cache'])
{
	$css .= "\n<link rel='stylesheet' type='text/css' href='".$ibforums->vars['j_user_css_url']."/style_".$this->users['id'].".css'>";
}
else
{
	$css .= "\n".implode(" ",@file($ibforums->vars['j_user_css_dir']."/style_".$this->users['id'].".css"));
}

3. ./journal/dosetup.php

найти

		  'j_settings'  => $do_setting,

добавить после

		  'j_css_cache' => intval($ibforums->input['j_css_cache']),

4. ./journal/setup.php

найти

  $blocks = array('j_show_img','j_auto_mail');

заменить на

  $blocks = array('j_show_img','j_css_cache','j_auto_mail');

5. ./journal/skin_cache/1/skin_setup.php

найти

  <tr>
  <td class='row'>{$ibforums->lang['j_show_img']}</td>
  <td class='row'>{$row['j_show_img']}</td>
 </tr>

добавить после

  <tr>
  <td class='row'><b>Кешировать свой дизайн?</b></td>
  <td class='row'>{$row['j_css_cache']}</td>
 </tr>

 

пробуем

Ссылка на комментарий
Поделиться на других сайтах

Ребят, НЕ ЗАБУДЬТЕ ПРО ИЗМЕНЕНИЕ ДАТ ЗАПИСЕЙ!!!

 

Это же всем пригодится!

 

l-k, а можно ссылочку на твой сервис дневников?

И может ты выложишь измененные файлики, чтобы мы могли покопаться и взять нужное? :D

Ссылка на комментарий
Поделиться на других сайтах

Что-то с кешированием странное, по идее после установки мода в исходной странице не должно быть кода CSS при включении кеширования, а там он есть. Хм, буду копать.
Ссылка на комментарий
Поделиться на других сайтах

1. SQL

ALTER TABLE ibf_jposts ADD pinned tinyint(1) default 0 AFTER closed

2. ./journal/journal.php

найти

												'close'	 => 'misc/post_misc',
											'open'	  => 'misc/post_misc',

добавить после

												'pin'	   => 'misc/post_misc',
											'unpin'	 => 'misc/post_misc',

3. ./journal/misc/post_misc.php

найти

			case 'close':
				$this->close_post(1);
				break;
		case 'open':
				$this->close_post(0);
				break;

добавить после

			case 'pin':
				$this->pin_post(1);
				break;
		case 'unpin':
				$this->pin_post(0);
				break;

найти

	// --------------------------------
// Delete journal post
// --------------------------------
function delete_post()

добавить ПЕРЕД

	function pin_post($id)
{
	global $ibforums, $DB, $journal;

	// Check post

	$DB->query("SELECT pid FROM ibf_jposts WHERE pid='".$ibforums->input['pid']."' AND journal_id='".$journal->users['id']."'");

	if (!$DB->get_num_rows())
	{
		$journal->err_journal($ibforums->lang['j_err_data']);
	}

	// Update database

	$DB->query("UPDATE ibf_jposts SET pinned='".$id."' WHERE pid='".$ibforums->input['pid']."' AND journal_id='".$journal->users['id']."'");

	// jump back

	$journal->redirect_screen(($id == 1) ? 'Запись Закреплена' : 'Запись Откреплена',$journal->base_url."user=".$journal->users['id']."&view=".$ibforums->input['pid']);
}

4. ./journal/posts.php

найти

		// Get posts

	$DB->query("SELECT p.*, m.mgroup
				FROM ibf_jposts p
				LEFT JOIN ibf_jmembers m ON (m.id=p.author_id)
				WHERE p.journal_id='".$journal->users['id']."'
				ORDER BY p.post_date DESC LIMIT ".$ibforums->input['st'].",".$journal->users['j_post_page']);

ЗАМЕНИТЬ на

		$DB->query("SELECT p.*, m.mgroup
				FROM ibf_jposts p
				LEFT JOIN ibf_jmembers m ON (m.id=p.author_id)
				WHERE p.journal_id='".$journal->users['id']."' AND p.pinned = 1
				ORDER BY p.post_date DESC");


	// Start show posts

	if ($DB->get_num_rows())
	{
		// Process all posts

		$attach_pids = array();
		$poll_pids = array();
		$old_date = "";
		$start_post = true;

		while ($row = $DB->fetch_row())
		{
			$post = '';
			list($row['date'],$row['time']) = explode("|",$journal->get_date($row['post_date'],"d F Y|H:i"));

			// New day ?

			if ($old_date != $row['date'])
			{
				if (!$start_post)
				{
					$output['PINNED'] .= $journal->skin->html['posts']->post_bottom();
				}

				$output['PINNED'] .= $journal->skin->html['posts']->post_top($row);
				$old_date = $row['date'];
			}

			// show closed post ?

			if ($row['closed'] == 1 and !$ibforums->member['j_view'])
			{
				$output['PINNED'] .= $journal->skin->html['posts']->post_closed($row);
			}
			else
			{
				if ($row['has_poll'])
				{
					$poll_pids[$row['pid']] = $row['journal_id'];
				}

				if ($row['attach_key'] != "")
				{
					$attach_pids[] = $row['pid'];
				}

				// render post

				$output['PINNED'] .= $journal->skin->html['posts']->post_row($this->post_render->process_post($row));
			}

			$start_post = false;
		}

		$output['PINNED'] .= $journal->skin->html['posts']->post_bottom();

		// process polls

		if (count($poll_pids))
		{
			$output['PINNED'] = $this->post_render->render_poll($output['PINNED'],$poll_pids);
		}

		// process attached pic's

		if (count($attach_pids))
		{
			$output['PINNED'] = $this->post_render->render_attach($output['PINNED'],$attach_pids,0,0,1);
		}
	}

	// Get posts

	$DB->query("SELECT p.*, m.mgroup
				FROM ibf_jposts p
				LEFT JOIN ibf_jmembers m ON (m.id=p.author_id)
				WHERE p.journal_id='".$journal->users['id']."' AND p.pinned = 0
				ORDER BY p.post_date DESC LIMIT ".$ibforums->input['st'].",".$journal->users['j_post_page']);

не забудьте добавить тег cut и ваши моды!

 

5. ./journal/misc/post_render.php

найти

				$row['edit_btn'] .= $journal->skin->html['posts']->post_btn($row,$row['closed'] ? 'open' : 'close',$row['closed'] ? $ibforums->lang['j_open_btn'] : $ibforums->lang['j_close_btn']);

заменить на

				$row['edit_btn'] .= $journal->skin->html['posts']->post_btn($row,
																		$row['closed'] ? 'open' : 'close',$row['closed'] ? $ibforums->lang['j_open_btn'] : $ibforums->lang['j_close_btn'],
																		$row['pinned'] ? 'unpin' : 'pin',$row['pinned'] ? 'Открепить' : 'Закрепить');

 

6. ./journal/skin_cache/1/skin_posts.php

найти

<!--J.PAGE_LINKS-->
{$row['POSTS']}

добавить ПЕРЕД

{$row['PINNED']}

найти

$close="",$close_text=""

добавить

,$pin="",$pin_text=""

найти

<a href="{$journal->base_url}user={$row['journal_id']}&pid={$row['pid']}&aid={$close}">{$close_text}</a> & #149;

добавить после

<a href="{journal.script_url}user={$row['journal_id']}&pid={$row['pid']}&aid={$pin}">{$pin_text}</a> & #149;

& #149; Слитно

http://img71.imageshack.us/img71/7937/pinnedjpostgs7.jpg

Ссылка на комментарий
Поделиться на других сайтах

2 Arhar: на ленте друзей закрепленный пост не сказывается каким-нибудь образом?

 

Вопрос: Кто-нибудь тестировал дневники на превышение лимита на весь дневник отведенного для загрузки файлов? У меня почему-то перескакивает за лимит и загружает файлы дальше, хотя может быть не детально тестировал.

Ссылка на комментарий
Поделиться на других сайтах

Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.