Полезные решения

Статус
Закрыто для дальнейших ответов.

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
В этой теме выкладываем полезные решения на PHP.

Не флудить!

Функция для конвертирования ББ-кодов в HTML-код от меня:

Код:
<?php

function bb_to_html($content) {

// Переносы строк
$content = str_replace("\n", "<br />", $content);
// Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый
$content = preg_replace("/\[B\](.+?)\[\/B\]/", "<b>\\1</b>", $content);
$content = preg_replace("/\[I\](.+?)\[\/I\]/", "<i>\\1</i>", $content);
$content = preg_replace("/\[U\](.+?)\[\/U\]/", "<u>\\1</u>", $content);
$content = preg_replace("/\[S\](.+?)\[\/S\]/", "<s>\\1</s>", $content);
// Размер шрифта
$content = preg_replace("/\[SIZE=(.+?)\](.+?)\[\/SIZE\]/", "<font size=\"\\1\">\\2</font>", $content);
// Цвет шрифта
$content = preg_replace("/\[COLOR=(.+?)\](.+?)\[\/COLOR\]/", "<font color=\"\\1\">\\2</font>", $content);
// Выравнивание (По левому краю, По центру, По правому краю)
$content = preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/", "<div align=\"left\">\\1</div>", $content);
$content = preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/", "<div align=\"center\">\\1</div>", $content);
$content = preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/", "<div align=\"right\">\\1</div>", $content);
// Вставить изображение
$content = preg_replace("/\[IMG\](.+?)\[\/IMG\]/", "<img src=\"\\1\" border=\"0\">", $content);
// Цитата
$content = preg_replace("/\[Q\](.+?)\[\/Q\]/", "<b>Цитата:</b><br /><div class=\"quote\">\\1</div>", $content);
// Смайлики
$content = preg_replace("/\*(.+?)\*/", "<img src=\"/images/smiles/\\1.gif\" border=\"0\">", $content);

return $content;

}

// Тест функции
$text = "[COLOR=blue]TEXT[/COLOR]";
$text = bb_to_html($text);
echo $text;

?>
Если у вас есть иде по ее модифицированию, добавлению чего-то - пишите сюда - добавим.
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Данная функция выводит информацию о посетителе:
1. Обычный IP (Proxy)
2. Прямой IP (Реальный IP, если ипользовать специальный proxy - недоступен)
3. Откуда пришли
4. Куда пришли (Адрес странички, где запущен скрипт)
5. Браузер и ОС
6. Текущая дата
7. Статус gZip (Поддержка сжатия страниц браузером)

Код:
<?php

function user_info() {

// IP (Через Proxy)
$info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];

// IP (Прямой)
$info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];

// Откуда пришли (Предыдущая страница)
$info['referer'] = $_SERVER['HTTP_REFERER'];

// Куда пришли (Адрес страницы, на которой выполняется этот скрипт)
$info['uri'] = $_SERVER['REQUEST_URI'];

// Браузер и ОС
$info['user_agent'] = $_SERVER['HTTP_USER_AGENT'];

// Текущая дата в формате "01.01.2006 | 00:00"
$info['date'] = date("d.m.Y | H:i");

// Статус gZip (Поддерживает ли браузер сжатие)
if ($_SERVER['SERVER_PROTOCOL'] == "HTTP/1.1") {
$info['gzip'] = 1;
} else {
$info['gzip'] = 0;
}

echo "<pre>";
print_r($info);
echo "</pre>";

}

user_info();

?>
Данную функцию можно легко переделать в логгер (Программа, которая собирает статистику о пользователях).
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Бывает, что необходимо узать содержание какого-либо массива. Для этого можно использовать простенькую функцию:

Код:
<?php

// Функция
function a_print($array) {

echo "<pre>";
print_r($array);
echo "</pre>";

}

// Тест
a_print($_SERVER);

?>
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Привожу вам функцию вывода случайной картинки. Чаще всего такая функция используется для вывода случайного баннера.

Условия:
1. Все картинки должны лежать в папке "banners" (Можно изменить)
2. Все картинки должны иметь одинаковый формат (В данном случае .gif, можно изменить)
3. Все картинки должны иметь названия типа 1.gif, 2.gif, 3.gif и т.д.

Код:
<?php

// Функция
function rand_img($count) {

$random = rand(1, $count);
$img = "banners/".$random.".gif"; // Здесь указываем папку и формат

echo "<img src=\"".$img."\" border=\"0\" />";

}

// Тест

rand_img(5); // 5 - количество баннеров в папке "banners"

?>
Результат будет примерно такой:

Код:
<img src="banners/2.gif" border="0" />
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
По мелочи...

Самописная функция http_build_query для php меньше 5.0
Превращает асоцитиативный массив в ссылку(точное описание на php.net - http_build_query )
Код:
// http_build_query for php < 5.0
if(!function_exists('http_build_query')) // если уже объявлена
{
	function http_build_query($formdata)
	{
		foreach ($formdata as $key => $value) {
			if(isset($return))
			{
				$return.='&'.urlencode($key).'='.urlencode($value);
			}else{
				$return=urlencode($key).'='.urlencode($value);
			}
		}
		return $return;
	}
}

// тест 

$data = array('foo'=>'bar',
			 'baz'=>'boom',
			 'cow'=>'milk',
			 'php'=>'hypertext processor');
			 
echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Преобразует HTML сущности в специальные символы :cool:

А по русски есть такая функция htmlspecialchars которая:
Преобразует символы типо < и > в соответствующие значения для корректного отображения в тексте
А моя функция делает обратное преобразование

Код:
function unhtmlspecialchars($string)
{
	return str_replace(array('&amp;','&quot;',''','&lt;','&gt;'),	array('&','"','\'','<','>'),$string);
}
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Мой вариант интеграции сайта на PHP с форумом IPB 2.1.3 (Должен работать и с 2.1.4):

Кусок кода из файла mainfile.php - Скрипт проверки COOKIE (Должен загружаться на каждой странице сайта):

Код:
/* Если у пользователя в COOKIE прописан параметр `id`, то запускаем проверку на совпадение пароля и идентификатора */

if(!empty($_COOKIE['member_id'])) {
require_once("includes/check.php");
if($check_ok != 1) {
echo "<b>Доступ запрещен!<b>\n";
include("includes/redir_index.php");
exit;
}
}
Файл /includes/redir_index.php - Для перенаправления пользователя на главную страницу с задержкой в 2 секунды.

Код:
<script language="javascript" type="text/javascript">
<!--
window.setTimeout("window.location.href = '/'", 2000); 
//-->
</script>
Файл /includes/check.php - Основной файл интеграции. Включает в себя проверку на совпадение id, имени пользователя и пароля (Защита от хакеров). При удачной проверке вводит новые переменныес данными пользователя.

Код:
<?php

$user_id = $_COOKIE['member_id'];
$user_password = $_COOKIE['pass_hash'];

$check_query = "SELECT * FROM ".$fp."members WHERE id = ".$user_id." AND member_login_key = '$user_password'";
$check = mysql_query($check_query) or die("<b>Ошибка подключения к базе данных!</b>");

if ($check) { $check_ok = 1; } else { $check_ok = 0; }

if ($check_ok == 1) {

$user_data = mysql_fetch_array($check);

$user_name = $user_data['name'];
$user_email = $user_data['email'];
$user_joined = $user_data['joined'];
$user_login_key = $user_data['member_login_key'];
$user_align = $user_data['mgroup'];

$md5_key = md5($user_email.'&'.$user_login_key.'&'.$user_joined);

}

?>
Примечание: Переменная $fp - это префиксы таблиц форума.

А теперь - форма для авторизации на сайте:

Код:
<?php if (isset($check_ok) || $check_ok == 1) { ?>
<table border=0><tbody><tr><td align=center>Да пребудет с тобой сила, <B><?php echo $user_name; ?>!</B> <BR>[ <a href="forum/index.php?act=Login&CODE=03&k=<?php echo $md5_key; ?>">Выход</a> | <a href="forum/index.php?act=UserCP&CODE=00">Профиль</a> ]</td></tr></tbody></table>
<?php } else { ?>
<form action="forum/index.php?act=Login&CODE=01" method="post" name="LOGIN"><TABlE border=0><TBODY>
<TR><TD ColSpan=2>Логин | <a href="forum/index.php?act=Reg&CODE=00">Регистрация</a></TD></TR>
<TR><TD ColSpan=2><input type="text" size="25" maxlength="64" name="UserName"></TD><TR>
<TR><TD ColSpan=2>Пароль | <a href="forum/index.php?act=Reg&CODE=10">Забыли?</TD></TR>
<TR><TD>
<input type="password" size="15" name="PassWord"></TD><TD><INPUT TYPE="submit" name="submit" value="Войти">
<input type="hidden" name="CookieDate" value="1">
<input type="hidden" name="Privacy" value="0">
</TD></TR>
</TBODY></TABLE></FORM>
<?php } ?>
За некрасивый код не ругать - скрипт писал более месяца назад - был не такой опытный;)

Обсуждение данного хака в соответствующем топике
.

И еще раз повторяю - флуд в этом топике запрещен, размещаем только поелзные решения на PHP.
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
Кто хочет сделать подсветку кода на своем сайте могу предложить мой код.

Код:
 <?

### (c) Creator ###
function show_code($value)
{
 $value='<?'.$value.'?>'; // Действия для выделения цветом кода

 // В символе \ кроется ошибка
 $value=str_replace('\\','right_slash',$value); // заменяю \ на right_slash для корректной подсветки
 $value=highlight_string($value,TRUE);
 $value=str_replace('right_slash','\\',$value); // обратно заменяю right_slash на \

 // Действия для выделения цветом кода
 $value=substr_replace($value,'',strpos($value,'&lt;?'),5);
 $value=substr_replace($value,'',strrpos($value,'?&gt;'),5);

 $value=str_replace(array('<font color="','</font>'),array('<span style="color: ', '</span>'),$value);
 $value=str_replace('&nbsp;',' ',$value);
 $value=str_replace('   ','&nbsp; &nbsp;',$value);
 $value=str_replace('  ','&nbsp; ',$value);
 $value=str_replace('<br />','<br>',$value);

 return $value;
}

### Пример  ###
$code='# Ф-ия отображает блок CODE
function show_code($value)
{
 $value=str_replace(\'<br>\',"\n",$value);

 $value=\'<?\'.$value.\'?>\'; // Действия для выделения цветом кода

 // В символе \ кроется ошибка
 $value=str_replace(\'\\\',\'right_slash\',$value); // заменяю \ на right_slash для корректной подсветки
 $value=highlight_string($value,TRUE);
 $value=str_replace(\'right_slash\',\'\\\',$value); // обратно заменяю right_slash на \

 // Действия для выделения цветом кода
 $value=substr_replace($value,\'\',strpos($value,\'&lt;?\'),5);
 $value=substr_replace($value,\'\',strrpos($value,\'?&gt;\'),5);

 $value=str_replace(array(\'<font color="\',\'</font>\'),array(\'<span style="color: \', \'</span>\'),$value);
 $value=str_replace(\'&nbsp;\',\' \',$value);
 $value=str_replace(\'   \',\'&nbsp; &nbsp;\',$value);
 $value=str_replace(\'  \',\'&nbsp; \',$value);
 $value=str_replace(\'<br />\',\'<br>\',$value);

 return $value;
}';

echo show_code($code);

?>
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
В PHP есть очень хорошая функция: debug_backtrace, которая создаёт массив с информацией о трассировке.
В PHP 5 повилась debug_print_backtrace, которая ещё и выводит это все в красивом виде.

К несчастью, в четвёртой версии её нет, а мне она понадобилась. Вот я и сделал:
Код:
function backtrace() { 
	   $bt=debug_backtrace(); 

	   unset($bt[0]); 
			   // удаляем ссылки на функцию backtrace() 

	   echo '<ul>'; 

	   for ($i=0; $i<=count($bt); $i++) { 
			   if (!$bt[$i]) continue; 
			   echo '<li>Файл: <em>' . $bt[$i]['file'] . '</em>'; 
			   echo '<br />Строка <b>' . $bt[$i]['line'] . '</b>: <tt>'; 
			   echo $bt[$i]['class']; echo $bt[$i]['type']; 
			   echo $bt[$i]['function']; echo ' ('; 
			   $arglist=''; 
			   for ($k=0; $k<count($bt[$i]['args']); $k++) { $arg=''; 
					   if (!$bt[$i]['args'][$k] and $bt[$i]['args'][$k]!==FALSE and $bt[$i]['args'][$k]!==NULL) continue; 
					   if (is_array($bt[$i]['args'][$k]) ) $arg='<pre>' . print_r($bt[$i]['args'][$k], TRUE) . '</pre>'; 
					   if (is_bool($bt[$i]['args'][$k]) ) $arg=(bool)$bt[$i]['args'][$k]; 
					   if (is_float($bt[$i]['args'][$k]) ) $arg=(float)$bt[$i]['args'][$k]; 
					   if (is_int($bt[$i]['args'][$k]) ) $arg=(int)$bt[$i]['args'][$k]; 
					   if (is_null($bt[$i]['args'][$k]) ) $arg='NULL'; 
					   if (is_object($bt[$i]['args'][$k]) ) $arg='{внешний объект}'; 
					   if (is_resource($bt[$i]['args'][$k]) ) $arg='{ресурс}'; 
					   if (!$arg) $arg='"' . $bt[$i]['args'][$k] . '"'; 
					   $arglist.=$arg . ', '; 
			   } 
			   if ($arglist) $arglist=substr($arglist, 0, -2); 

			   echo $arglist . ')</tt>'; 
	   } 

	   echo '</ul>'; 
}
?>
 

xrb

New Member
Регистрация
13.02.2006
Сообщения
7
Предлагаю немного переделанный кусочек кода из работающего проекта.
Код преднозначен для "безопасной" загрузки изображений с подгонкой размера и изготовлением привьюшек

Код:
$imgext[1]='gif';
$imgext[2]='jpg';

$ImgName = Array(); // Здесь будут лежать имена временных файлов длфя картинок
$ImgBName = Array(); // Здесь будут лежать имена временных файлов длфя Big (больших) картинок

$ImgNom=0; // Подсчитываем сколько полей изображений обработано, что бы там где не нужно не принемать лишних картинок
if(isset($_FILES))		 // Если изображения определились
foreach($_FILES as $fk=>$fv)
 {
  if(!$fv['error'] && $fv['size']>0) // если файл закачался
   {
	$ImgNom++; // увеличиваем счетчик обработанных изображений на 1
	list($width, $height, $imgtype, $attr) = getimagesize($fv['tmp_name']); // получаем информацию об изображении

	////1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order),
	/// 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM.
	if($imgtype!=1 && $imgtype!=2 && $imgtype!=3) // Если не gif и не jpg,PNG
	  Alarm("<h3>Файл \"".$fv['name']."\" не  является изображением типа gif, jpg или png</h3>");

	if($fv['size'] > 1024*$maximgsize) // Привышен допустимый размер изображения
	 Alarm("<h3>Файл \"".$fv['name']."\": привышен допустимый размер изображения ".round($fv['size']/1024, 1)." Кб > ".$maximgsize." Кб</h3>");

	//------------------------------------
	if(...условие...) // Если ошибок не было
	  {
	   // создали полотно для графика
	   if($imgtype==1) $Image[$fk]=@imageCreateFromGif($fv['tmp_name']);
	   if($imgtype==2) $Image[$fk]=@imageCreateFromJpeg($fv['tmp_name']);
	   if($imgtype==3) $Image[$fk]=@imageCreateFromPng($fv['tmp_name']);
		////1 = GIF, 2 = JPG, 3 = PNG
	  }

	if(...условие...) // Если ошибок не было
	if($Image[$fk]) // Если файл создался
	  {
	   // Генерируем новое временное имя для файла
	   $savename=basename(tempnam($Path->Path['img'],""));
	   $ImgName[$fk]= $Path->Path['img'].$savename;

	   // Преобразовываем, если нужно, размеры изображения
	   $changesize=false; // по умолчанию размеры изображения не менялись
	   $dstW=$width;
	   $dstH=$height;
	   if($dstW>$maximgwidth)
		 {
		  $dstH=$dstH*$maximgwidth/$dstW;
		  $dstW=$maximgwidth;
		  $changesize=true; // размеры изображения изменились
		 }
	   if($dstH>$maximgheight)
		 {
		  $dstW=$dstW*$maximgheight/$dstH;
		  $dstH=$maximgheight;
		  $changesize=true; // размеры изображения изменились
		 }
	   if($changesize) // Если размеры изображения изменились
		 {
		  //$newImage = ImageCreate($dstW,$dstH);
		  $newImage = ImageCreateTrueColor($dstW,$dstH);
		  //imagecopyresized($newImage,$Image[$fk],0,0,0,0,$dstW,$dstH,$width,$height);
		  imagecopyresampled($newImage,$Image[$fk],0,0,0,0,$dstW,$dstH,$width,$height);

		  // Если размер изменился, то сохраняем с изменным размером
		  imageJpeg($newImage,$ImgName[$fk]);// Сохраняем изображение в файл
		  imageDestroy($newImage); // Освобождаем память
		 }
	   else
		 {
		  // Если размер не изменился, то сохраняем оригинальный файл
		  imageJpeg($Image[$fk],$ImgName[$fk]);// Сохраняем изображение в файл
		 }
	   ////////////////////////////////////////////////////////////////////////////////

		  $savename=basename(tempnam($Path->Path['img'],""));
		  $ImgBName[$fk]= $Path->Path['img'].$savename;

		  // Преобразовываем, если нужно, размеры изображения
		  $changesize=false; // по умолчанию размеры изображения не менялись
		  $dstW=$width;
		  $dstH=$height;
		  if($dstW>$bmaximgw)
			{
			 $dstH=$dstH*$bmaximgw/$dstW;
			 $dstW=$bmaximgw;
			 $changesize=true; // размеры изображения изменились
			}
		  if($dstH>$bmaximgh)
			{
			 $dstW=$dstW*$bmaximgh/$dstH;
			 $dstH=$bmaximgh;
			 $changesize=true; // размеры изображения изменились
			}
		  if($changesize) // Если размеры изображения изменились
			{
			 $newImage = ImageCreateTrueColor($dstW,$dstH); // Создаем полотно, в которое скапируем "уменьшенное изображение"
			 imagecopyresampled($newImage,$Image[$fk],0,0,0,0,$dstW,$dstH,$width,$height);
			 // Если размер изменился, то сохраняем с изменным размером
			 imageJpeg($newImage,$ImgBName[$fk]);// Сохраняем изображение в файл
			 imageDestroy($newImage); // Освобождаем память
			}
		  else
			{
			 // Если размер не изменился, то сохраняем оригинальный файл
			 imageJpeg($Image[$fk],$ImgBName[$fk]);// Сохраняем изображение в файл
			}
	   ////////////////////////////////////////////////////////////////////////////////
	   imageDestroy($Image[$fk]);
	  }
   }
 }
//==================================================================
 

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Скрипт для перекачкий файлов посредствами сервера. Скорость также зависит от сервера. Очень полезный скрипт, особенно для тех у кого Dial-Up или помегабайтная оплата - все происходит быстро и бесплтано:)) Скрипт был найден на одном из форумов и основательно переделан мной.

Код:
<?php

/* Конфигурация (Начало) */

$default_dir = 'http://mysite.com/downloads/'; //Папка для загрузки по умолчанию
$default_file = 'http://othersite.com/file.zip'; // Файл для загрузки по умолчанию

/* Конфигурация (Конец) */

if(!empty($_POST['upload_file']) && !empty($_POST['upload_dir'])) {

	$fn = $_POST['upload_file'];
	$handle = @fopen($fn, "rb");
	$contents = "";

	if(!$handle) {

		$status = "Ошибка при открытии исходного файла!";

	} else {

		while(!feof($handle)) {
			$data = fread($handle, 8192);
			$contents .= $data;
		}

		fclose ($handle);

		$handle = @fopen($_POST['upload_dir'].basename($fn), "wb");

		if(!$handle) {
			$status = "Ошибка при записи файла!";
		} else {
			fwrite($handle, $contents);
			fclose($handle);
			$status = "Загрузка завершена!";
		}

	}

} else {

	$status = "Выберите файл и директорию для загрузки...";

}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
<head>
<title>Upload</title>
</head>
<br />
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="act" value="send" />
<table border="0" align="center">
<tr><td><b>Файл:</b>&nbsp;</td><td colspan="2"><input type="text" name="upload_file" size="78" value="<?php echo $default_file; ?>" onfocus="if(this.value=='<?php echo $default_file; ?>')this.value='';" /></td></tr>
<tr><td><b>Директория:</b>&nbsp;</td><td><input type="text" name="upload_dir" size="60" value="<?php echo $default_dir; ?>" onfocus="if(this.value=='<?php echo $default_dir; ?>')this.value='';" /></td><td><input type="submit" value=" Закачать " /></td></tr>
<tr><td><b>Статус:</b>&nbsp;</td><td colspan="2"><input type="text" name="status" size="78" value="<?php echo $status; ?>" /></td></tr>
</table>
<?php if($_SERVER['REMOTE_ADDR'] == '127.0.0.1') { echo "<hr />\n<div align=\"center\"><font color=\"red\"><b>Использую данный скрипт вы не экономите на траффике!</b></font></div>\n"; } ?>
</form>
</body>
</html>
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Вчера написал класс и функции для работы с направлением ветра, может кому пригодиться..
Код:
<?
class wind
{
	var $x=0;
	var $y=0;
	var $napr_arr=array(
	"С"		,
	"З","В"	,
	"Ю"	 	);
	function wind($napr_arr=NULL)
	{
		if($napr_arr!=NULL)
		{
			$this->napr_arr=$napr_arr;
		}
	}
	function add_wind($napr)
	{
		for($i=0;$i<strlen($napr);$i++)
		{
			$num=array_search($napr{$i},$this->napr_arr);
			if($num!==false)
			{
				switch ($num) {
					case 0:
					$this->y++;
					break;
					case 1:
					$this->x--;
					break;
					case 2:
					$this->x++;
					break;
					case 3:
					$this->y--;
					break;
				}
			}
		}
	}
	function get_alpha()
	{
		$count=abs($this->x)+abs($this->y);
		if($count!=0)
		{
			$x=$this->x/($count);
			$y=$this->y/($count);
			return angle($x,$y);
		}else{
			return false;
		}
	}
	function clear()
	{
		$this->x=0;
		$this->y=0;
	}
}
function wind_alpha2str($alpha)
{
	$a=$alpha/M_PI*2;
	if($a<0)
	{
		while ($a<0) {
			$a+=4;
		}
	}elseif($a>4)
	{
		while ($a>4) {
			$a-=4;
		}
	}
	//*
	switch (true) {
		case ($a>4-1/4):
			$str="В";
		break;
		case ($a<=4-1/4 & $a>=3+1/4):
			$str="Ю-В";
		break;
		case ($a<3+1/4 & $a>3-1/4):
			$str="Ю";
		break;
		case ($a<=3-1/4 & $a>=2+1/4):
			$str="Ю-З";
		break;
		case ($a<2+1/4 & $a>2-1/4):
			$str="З";
		break;
		case ($a<=2-1/4 & $a>=1+1/4):
			$str="С-З";
		break;
		case ($a<1+1/4 & $a>1-1/4):
			$str="С";
		break;
		case ($a<=1-1/4 & $a>=0+1/4):
			$str="С-В";
		break;
		case ($a<0+1/4):
			$str="В";
		break;
		default:
			break;
	}
	//*/
	return $str;
	
}
function angle($x,$y)
{
	
	if($x == 0)
	{
		if($y >= 0)
		{
			$Angle = M_PI/2;
		}else{
			$Angle = -M_PI/2;
		}
	}else{
		//print $x." - ".$y;
		if($x>0){
			$Angle = atan($y/$x);
		}elseif($y>=0)
		{
			$Angle = atan($y/$x)+M_PI;
		}
		else
		{
			$Angle = atan($y/$x)-M_PI;
		}
	}
	return $Angle;
}

$wind=new wind();
$wind->add_wind("З");
$wind->add_wind("З-С");
$wind->add_wind("З");
$wind->add_wind("З-Ю");
//print $wind->x."\n";
//print $wind->y."\n";
$alpha=$wind->get_alpha();
if($alpha!==false)
{
	//print ($alpha/M_PI)."\n";
	print wind_alpha2str($alpha);
}
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Код делает плавный переход от одного цвета к другому и изменение размера шрифта.

Не причесанный не пинать:)
Код:
<script>
function color1(check)
{
	if(check)
	{
		document.all['c'].style.display='block';
	}else{
		document.all['c'].style.display='none';
	}
}
function font1(check)
{
	if(check)
	{
		document.all['f'].style.display='block';
	}else{
		document.all['f'].style.display='none';
	}
}
</script>
<form method="POST">
<table  border="0">
<tr><td>Изменять цвет:</td><td><input type="checkbox" name="color" onclick="color1(checked)"></td></tr>
<tr><td>Изменять шрифт:</td><td><input type="checkbox" name="font" onclick="font1(checked)">
</td></tr>
</table>
<table>
<tr><td>Строка:</td><td><input type="text" name="str" style="width:300px"></td></tr>
</table>
<div id='c' style="display:none">
<table>
<tr><td>Начальный цвет:</td><td><input type="text" name="c1" value="#00ff00"></td></tr>
<tr><td>Конечный цвет:</td><td><input type="text" name="c2" value="#ff0000"></td></tr>
</table>
</div>
<div id='f' style="display:none">
<table>
<tr><td>Начальный шрифт:</td><td><input type="text" name="f1" value="10"></td></tr>
<tr><td>Конечный шрифт:</td><td><input type="text" name="f2" value="18"></td></tr>
</table>
</div>
<input type="submit" name="sub" value="Раскрасить">
</form>

<?

if($_POST['sub'])
{
	if($_POST['color'])
	$color1 = array(hexdec(substr($_POST['c1'],1,2)),hexdec(substr($_POST['c1'], 3, 2)),hexdec(substr($_POST['c1'], 5, 2)));
	$color2 = array(hexdec(substr($_POST['c2'],1,2)),hexdec(substr($_POST['c2'], 3, 2)),hexdec(substr($_POST['c2'], 5, 2)));
	if($_POST['font'])
	{	
		
		
	}
	//$color2=array('0','0','255');
	//$color1=array('192','192','192');

	$str=$_POST['str'];

	// Самая главная фишка для перехода цветов C DnAp ICQ:216655177 :P
	function c($c1,$c2,$i)
	{
		return ceil($c1-((($c1-$c2)/1000)*$i));
	}

	function rgb2hex($rgb){
		if(!is_array($rgb) || count($rgb) != 3){
			echo "Argument must be an array with 3 integer elements";
			return false;
		}
		for($i=0;$i<count($rgb);$i++){
			if(strlen($hex[$i] = dechex($rgb[$i])) == 1){
				$hex[$i] = "0".$hex[$i];
			}
		}
		return $hex[0].$hex[1].$hex[2];
	}
	
	function font($strlen,$pos)
	{
		global $_POST;
		if($_POST['f1']<$_POST['f2'])
		{
			$r=$_POST['f2']-$_POST['f1'];
			return $_POST['f2']+round(($pos/$strlen*$r));
		}elseif ($_POST['f1']>$_POST['f2'])
		{
			$r=$_POST['f1']-$_POST['f2'];
			return $_POST['f1']+round(($pos/$strlen*$r));
		}else{
			return $_POST['f1'];
		}
	}
	$txt='';
	for ($j=0;$j<strlen($str);$j++)
	{
		$i=round(($j*1000)/strlen($str));

		$txt.= "<font style='";
		if($_POST['font'])
		$txt.= "font-size:".font(strlen($str),$j)."px;";
		if($_POST['color'])
		$txt.= "color:#".rgb2hex(array(c($color1[0],$color2[0],$i), c($color1[1],$color2[1],$i), c($color1[2],$color2[2],$i)));
		$txt.="'>".$str{$j}."</font>";
	}
	print $txt."<br>";
	print "<textarea style='width:100%;height:300px'>".$txt."</textarea>";
}
?>
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Какую штуку у себя нашел...
Я маньяк я заню..
Самописный ListBox :blush:
Писал ради интереса..
Представляет из себя класс который генерирует js код вроде более менее работающий под оперой даже..
Тк класс представляет из себя почти 6 кило кода то я его зарарил
 

Вложения

Niko_aka_Guru

Новичок
Регистрация
19.05.2006
Сообщения
1
Полезный материал! Займусь-ка я его тестированием :)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ