Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Полезные (интересные и оригинальные) решения

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Открыть новую тему     Написать ответ в эту тему

SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Начну:

Код:
 
  function err_handler ($errno, $errstr, $errfile, $errline) {
    global $display_errors;
    if(($errno != E_NOTICE && $errno != E_WARNING) && $display_errors){
      echo '';
    }
  }
  $error_flags = E_ALL & ~E_NOTICE;
  @error_reporting($error_flags);
  @ini_set ('error_reporting', $error_flags);
  $old_error_handler = set_error_handler("err_handler");
 

 
Бывает полезным, убивает все нотайсы, выводы ошибок и прочее.
 
ЗЫ: Желательно прикрепить.



Публикуем решения, а не задаем вопросы!
Тех же, кто этого не понимает, будем БАНИТЬ!  
Тема именно для уникальных, оригинальных и красивых решений. Если ты только взялся изучать php - не стоит сюда писать, так как, заведомо, у тебя не будет такого решения
 
ps: выделил специально для тех, у кого проблемы со зрением.





Цитата:
ЗЫ: Желательно прикрепить.
В ПМ по этому поводу писать надо. — Svarga.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 07:30 26-07-2004 | Исправлено: Cheery, 16:57 25-03-2007
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[подлежит удалению]

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 20:14 05-05-2005 | Исправлено: SiMM, 20:20 05-05-2005
silhouet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
// Ф-ция возвращает $_POST без пустых полей.
<?
function clean($arg)
{
   return strlen(trim($arg));
}
 
$post = array_filter($_POST, 'clean');
?>

Всего записей: 1 | Зарегистр. 18-05-2005 | Отправлено: 11:38 19-05-2005
svserg

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья!
Нужна php4apache.dll  (или php4apache-eapi.dll)
откомпиленая с опцией -DEAPI  
для apache 1.3.33 и php 4.3.11
 
Может у кого есть?





Шапку читай.. Название прочитай.. Если не помогает, то к врачу. /Cheery/

Всего записей: 396 | Зарегистр. 11-12-2001 | Отправлено: 17:37 26-05-2005 | Исправлено: Cheery, 21:28 26-05-2005
g00d

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ подскажите "красивое" решение....
есть массив переменных в HTTP_POST_VARS
на форме около 22-х чекбоксов, не нажатый чекбокс неотправляется т.е. такой переменной нет в этоммассиве...., а послать такую переменную в случае не нажатого чекбокса все равно надо со значением false ( потому как если он нажат, то отправляется true ) я конечно понимаю что можно перебирать весь массив и если нет заданной переменной то создавать её со значением false. но это как то не красиво...  
Спасибо.




ну, что, тебе индивидуальное замечание нужно ? /Cheery/

Всего записей: 172 | Зарегистр. 10-01-2004 | Отправлено: 08:56 27-05-2005 | Исправлено: Cheery, 09:11 27-05-2005
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
g00d:
 
if (isset($твоя переменная)) { $твоя переменная=true; } else {$твоя переменная=false; }
 
сорри за оффтоп, но помогать меня всем учили

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 20:23 27-05-2005
zerkms

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
g00d
если очень хочется - то сделай хидден поля для каждого чекбокса с тем же именем, но со значением false

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию





Хватит! Иначе прикрою тему /Cheery/

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 10:53 06-06-2005 | Исправлено: Cheery, 22:03 06-06-2005
oppo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
очень все позновательно ...
я требую продолжения банкета.




Надеюсь, что понятно, за что.. /Cheery/

Всего записей: 84 | Зарегистр. 02-06-2003 | Отправлено: 03:30 07-06-2005 | Исправлено: Cheery, 03:37 07-06-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот исходник который помогает защититься от спама, полную версию с примером качайте здесь.
 

Код:
 
<?php
  /*===============================
  Programed by Vitali
  E-mail: Administrator@GeSoft.org
  ================================*/
 
  session_start();
 
  $ServerName = 'localhost';
  $DBUserName = 'root';
  $DBPassword = '';
  $DBName = 'reg_user';
  $SessionTable = 'sessionkey';
 
  $ImageWidth = 100;
  $ImageHeight = 45;
 
  //Генерирую случайный ключ
  function GetRandomKey() {
    srand ((float) microtime() * 10000000);
    return strtoupper(md5(uniqid(rand(),true)));
  }
 
  //Процедура выбирает случайный графический файл из заданного каталога,
  //данное изображение будет использоваться как фон. Я дополнительно указал
  //фильтр *.jpg
  function LoadRandomPatern($Path) {
    $FileList = array();
    if ($Handle = opendir($Path)) {
      while (false !== ($File = readdir($Handle))) {
        if (($File !== '.')and($File !== '..')and(preg_match('/.+\.jpg/', $File))) {
          array_push($FileList, $File);
        }
      }
      closedir($Handle);
    }
    $Index = array_rand($FileList,1);
    return @imagecreatefromjpeg($Path.$FileList[$Index]);
  }
 
  //Данная функция дает возможность выводить текст "Center" и если текст не
  //помешается на изображении то она автоматом уменьшает размер шрифта
  function ImageStringCentered($Picture,$Font,$Y,$Text,$Color) {
    while (strlen($Text) * imagefontwidth($Font) > imagesx($Picture)) {
      if ($Font > 1) {
        $Font--;
      } else {
        break;
      }
    }
    imagestring($Picture,$Font,imagesx($Picture) / 2 - strlen($Text) * imagefontwidth($Font) / 2,$Y,$Text,$Color);
  }
 
  //Здесь генерируется само изображение которое пользователь уведет
  function CreateCodePicture() {
    global $ImageWidth;
    global $ImageHeight;
    global $ID;
 
    $Patern = LoadRandomPatern('patern\\');
 
    $CodeImage = imagecreate($ImageWidth,$ImageHeight);
    $TextColor = imagecolorallocate($CodeImage, 255, 255, 0);
    imagecopyresized($CodeImage,$Patern,0,0,0,0,$ImageWidth+1,$ImageHeight+1,imagesx($Patern),imagesy($Patern));
    ImageStringCentered($CodeImage, 4, 15, substr($ID, 0, 10), $TextColor);
    return $CodeImage;
  }
 
  //Функция для сохранения номера сессии, ключа и даты
  function SaveSessionKey() {
    global $ServerName;
    global $DBUserName;
    global $DBPassword;
    global $DBName;
    global $SessionTable;
    global $ID;
 
    //Получаю номер данной сессии
    $SessionID = session_id();
 
    //Попытка подключится к серверу
    if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Попытка подключится к базе данных
    if (!mysql_select_db($DBName)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Пытаюсь создать таблицу для хранения ключей. Если такова существует то ничего не делаю.
    $CreateQuery = "
      CREATE TABLE `$SessionTable` (
        `ID` INT NOT NULL AUTO_INCREMENT,
        `PHPID` VARCHAR(40) NOT NULL,
        `SessionKey` VARCHAR(10) NOT NULL,
        `Date` DATE NOT NULL,
        PRIMARY KEY (`ID`)
      );";
    //Если ошибка не "Table '$SessionID' already exists"
    if ((!mysql_query($CreateQuery))and(mysql_errno()!==1050)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Получаю все записи идентичные данной сессии (макс. одна, в том случае
    //если пользователь запускает скрипт повторно или сделал refresh страницы)
    $SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID'";
    if (!($SelectResult = mysql_query($SelectQuery))) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    if (mysql_num_rows($SelectResult)>0) {
      //Запись уже существует, значит обновляем значение ключа
      $UpdateQuery = "UPDATE `$SessionTable` SET `SessionKey`='$ID' WHERE `PHPID`='$SessionID';";
      if (!mysql_query($UpdateQuery)) {
        echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
        exit;
      }
    } else {
      //Запись пока не существует, значит добавляем значение ключа
      $InsertQuery = "INSERT INTO `$SessionTable` (`ID`, `PHPID`, `SessionKey`, `Date`) VALUES
        ('', '$SessionID', '$ID', '".date('Y-m-j')."');";
      if (!mysql_query($InsertQuery)) {
        echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
        exit;
      }
    }
  }
 
  //Функция по проверке правильности ключа, есть ли ключ в базе
  function IsTrueKey($SessionKey) {
    global $ServerName;
    global $DBUserName;
    global $DBPassword;
    global $DBName;
    global $SessionTable;
 
    //Получаю номер данной сессии
    $SessionID = session_id();
    $SessionKey = strtoupper($SessionKey);
 
    //Попытка подключится к серверу
    if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Попытка подключится к базе данных
    if (!mysql_select_db($DBName)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Получаю все записи идентичные данной сессии и ключу
    $SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID' AND `SessionKey`='$SessionKey'";
    if (!($SelectResult = mysql_query($SelectQuery))) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    if (mysql_num_rows($SelectResult)>0) {
      return true;
    } else {
      return false;
    }
  }
 
  //Проверка что должен делать скрипт, если указано что надо генерировать
  //изображение то выводит в противном случае ничего не делает (нужно в том
  //случае если скрипт вызывается с помощью include)
  if ($_GET['op']=='pic') {
    $ID = GetRandomKey();
    SaveSessionKey();
    header("Content-type: image/jpeg");
    imagejpeg(CreateCodePicture());
  }
?>
 

 
Пример пользования:

Код:
index.php
<form method="POST" action="result.php">
...
<img border="0" src="codepicture.php?op=pic" width="100" height="45">
...
 

 

Код:
result.php
include_once 'codepicture.php';
if (IsTrueKey($_POST['sessionkey'])) {
  echo 'Good key.';
} else {
  echo 'Wrong key.';
}

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 18:22 11-06-2005 | Исправлено: Delphi6, 18:27 11-06-2005
pimple



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, уважаемые. Следующий вопрос:
хочу поставить скрипт на php (news blog 1.1-как то вроде этого называется) для
удобного добавления новостей и возможности для пользователей писать комментсы.
 
 
ЧИТАЕМ ШАПКУ И НАЗВАНИЕ ТЕМЫ!!!




Неужели у большинства проблемы со зрением? /Cheery/

Всего записей: 100 | Зарегистр. 21-09-2003 | Отправлено: 18:33 15-06-2005 | Исправлено: Cheery, 21:23 15-06-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если было не пинайте - но вроде такого невстретил...
Для меня сие открытие было откровением!
 
Если в код до вывода хидеров и контента вписать такую строчку кода - то в результате размер страницы кардинально уменьшится...

Код:
ob_start('ob_gzhandler');

ob_start()
ob_gzhandler()

Цитата:
Замечание:  In PHP 4.0.4, ob_gzhandler() was introduced to facilitate sending gz-encoded data to web browsers that support compressed web pages. ob_gzhandler()  determines what type of content encoding the browser will accept and will return its output accordingly.


----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 14:55 23-06-2005 | Исправлено: Mamay, 15:00 23-06-2005
chillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тот класс что давали по поводу "рисования" таблиц как в phpMyAdmin, ну уж слишком здоровый =) Да и применение класса в этом случае не обязательно.
Написал свой, состоит из одной функции.

Код:
 
function display_table($table) {
$sql = "select * from $table";
$q = mysql_query($sql);
$total = mysql_num_fields($q);
$fields = mysql_num_rows($q);
echo "<table border=1><tr>";
for($i=0;$i<$total;$i++) {  
echo "<td>" . mysql_field_name($q,$i) . "</td>";
}
echo "</tr>";
for($n=0;$n<$fields;$n++) {
echo "<tr>";
for ($k=0;$k<$total;$k++) {
echo "<td>" . mysql_result($q,$n,$k) . "</td>";
}
echo "</tr>";
}
}
 

Применение: display_table("myLETTtable");

Всего записей: 16 | Зарегистр. 23-05-2005 | Отправлено: 17:27 05-07-2005
YM1979

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такая идея: большинство спамерских писем имеют заголовки, в которых символы кириллицы стоят рядом с латинскими - чтобы сложнее было по автору или теме в фильтре заблокировать. А вот в нормальной почте так никто не пишет - значит если перебрать все комбинации и отфильтровать найденные псьма, можно избавиться если не от всего спама, так от большей его части.




1) при чем тут PHP?
2) тема о решениях, а не идеях..
/Cheery/

Всего записей: 63 | Зарегистр. 18-12-2004 | Отправлено: 02:46 14-07-2005 | Исправлено: Cheery, 02:50 14-07-2005
CYberMaster



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хочу реализовать на страничке обновление только определнной области. Например есть сайт, на нем небольшой логотип или кнопка помощи, при нажатии на него в небольшое по размерам место сайта загружался файл. Мой товарищь, говорит, что нужно использовать <?php include('header.php');?>. Тоесть делаем другую страничку по ссылке и грузим туда участки сайта. Я же хочу, чтобы не обновлялся весь сайт а только определнные области. Чтобы сам сайт как бы статичный оставался.
Как реализовывать???

Всего записей: 212 | Зарегистр. 02-06-2005 | Отправлено: 10:21 17-07-2005
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CYberMaster
епрст, выше глаза поднять не в состоянии, ЗДЕСЬ ВОПРОСЫ НЕ ЗАДАЮТ
используй HTML тег <frame> или <iframe>

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 13:47 17-07-2005 | Исправлено: sket4, 13:48 17-07-2005
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
 
<?php
if(!empty($_POST["ip"]))
{
$sock = fsockopen("whois.ripe.net", 43, $errno, $errstr);
if (!$sock)
{
echo("$errno($errstr)");
return;
}
else
{
fputs ($sock, $_POST["ip"]."\r\n");
while (!feof($sock))
{
echo (str_replace(":",":&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", fgets ($sock, 128))."<br>");
}
}
fclose ($sock);
}
?>
 


----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 20:09 28-07-2005
ripperm



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chillz
Ну что за мания усложнять простые вещи...  Скока раз сталкиваюсь все время прикалываюсь. Не прще ли немного будет поитав ман по SQL выяснить что бля получения полей есть замечательный запрос... и даже функции не надо
 
$res = mysql_query("show fields from table1");
echo "<table><tr>";
while($arr = mysql_fetch_array($res))
{
echo "<td>{$arr['Field']}</td>";
}
echo "</tr></table>";
 
 
Не правда ли все намного короче и проще?
 
Добавлено:

Цитата:
Спокойнее, плиз. Тот вариант для любой таблицы без знания столбцов в ней. Аналогия, как и сказано, с myPHPadmin /Cheery/
ps: и толку от нее больше, чем от твоего примера.

Прости пожалуйста за манеру разговаривать, Еще я хронической безграмотрстью страдаю...
 
Да. Кое чего не заметил.. Вывод данных из таблиц. =) Ночное время влияет так сказать.
сори за оффтоп...  Хотя вывод данных из таблиц дописывается ровно в три строчки к моему скрипту... Поправь если я не прав =)




Спокойнее, плиз. Тот вариант для любой таблицы без знания столбцов в ней. Аналогия, как и сказано, с myPHPadmin /Cheery/
ps: и толку от нее больше, чем от твоего примера.

Всего записей: 302 | Зарегистр. 03-06-2002 | Отправлено: 03:04 08-08-2005 | Исправлено: ripperm, 02:58 14-08-2005
foxweb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема:
импортировать 9мб SQL-скрипт (дамп MySQL), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематично, особенно на модемемном соединении.
 
Решение
можно залить на ftp и попросить админов восстановить базу, но не факт, что вам помогут. Можно попробовать через MySQL клиент типа SQLyog, MySQL-Front и т.д., но опять же не факт, что это закончится благополучно...
 
Перепробовав все перечисленные способы, я выяснил, что основная проблема - непрерывная передача 9мб файла.
 
И решил написать простенькую утилиту на PHP, которая будет читать SQL-файл построчно, точнее покомандно: выбирает команду (ограниченную точкой-с-запятой, исполняет её, и так далее). То есть все операции происходят внутри сервера, без участия клиента. Скорость бешеная, 9мб SQL-скрипт за 5 секунд!!! Ессесно файлик должен лежать там же, где скрипт.
 
Минусы
занимает большое количество ресурсов сервера, весь файл читается в память. Можно усовершенствовать, читая из файлового только отдельные SQL-команды.
 

Код:
<?php
 
mysql_connect("localhost", "login", "password");
mysql_select_db ("database");
 
if (!file_exists($fname)) die ("Файл $fname не существует!");
$fp = fopen ($fname, "r");
$buffer = fread($fp, filesize($fname));
fclose ($fp);
 
$prev = 0;
 
while ($next = strpos($buffer,";",$prev+1))
{
$i++;
$a = substr($buffer,$prev+1,$next-$prev);
mysql_query($a);
$prev = $next;
}
 
echo "Выполнено $i команд";
 
?>
 

 
Что-то вроде этого.
 
$fname - имя файла SQL-дампа
$prev - позиция предыдущей ";"
$next - позиция следующей ";" начиная с позиции $prev
 
Вызываем скрипт примерно так: sqlbackup.php?fname=backup.sql, будет выполнен файл backup.sql. В конце выводится число выполненных команд. Я замеряю время выполнения, здесь для упрощения убрал.

Всего записей: 8 | Зарегистр. 08-08-2005 | Отправлено: 18:24 08-08-2005
ripperm



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
foxweb
Хотел заметить, что такой вариант не отработает у тебя при встрече ; в самом запросе. Тогда он выполнит половину запроса до ; и естественно вернется ошибка.
 
Так же как и при дампе базы я бы просто лимитировал обьемы записываемые за одно обращение. Т.е.  записал мегабайт в базу например пошел далее. И ресурсы такое меньше жрет...  
 
Если exec на серваке не в бане тогда вообще пара строк нужна
exec("mysql -uusername -ppass") и т.п. )

Всего записей: 302 | Зарегистр. 03-06-2002 | Отправлено: 02:56 14-08-2005
foxweb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, всё вполне логично.
Я делал, что разбиение на запросы производилось не просто по ";", а по ";\n"
Хотя то же не очень универсально.
По поводу exec - отличная идея, но скрипт был написан прежде, чем разобрался с ней

Всего записей: 8 | Зарегистр. 08-08-2005 | Отправлено: 02:01 28-08-2005
oppo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
..вывод  
<? phpinfo();
 
include("../class.Thumbnail.php");  
$tn_image = new Thumbnail("sample.gif", 0, 0, 25);  
 
 
 
$tn_image->show();  
 
 
?>  
 
 
<?  
/*  
* class.Thumbnail.php  
*  
* Copyright (C) 2001 Hidayet Dogan (hdogan@bilcag.net)  
*  
* This program is free software; you can redistribute it and/or modify  
* it under the terms of the GNU General Public License as published by  
* the Free Software Foundation; either version 2, or (at your option)  
* any later version.  
*  
* This program is distributed in the hope that it will be useful,  
* but WITHOUT ANY WARRANTY; without even the implied warranty of  
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
* GNU General Public License for more details.  
*  
* You should have received a copy of the GNU General Public License  
* along with this program; if not, write to the Free Software  
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
*  
*/  
 
class Thumbnail {  
    var $errmsg        = "";  
    var $error        = false;  
    var $format        = "";  
    var $file        = "";  
    var $max_width  = 0;  
    var $max_height = 0;  
    var $percent    = 0;  
 
    function Thumbnail($file, $max_width = 0, $max_height = 0, $percent = 0) {  
    if (!file_exists($file)) {  
        $this->errmsg = "File doesn't exists";  
        $this->error  = true;  
    }  
    else if (!is_readable($file)) {  
        $this->errmsg = "File is not readable";  
        $this->error  = true;  
    }  
 
    if (strstr(strtolower($file), ".gif"))  
        $this->format = "GIF";  
    else if (strstr(strtolower($file), ".jpg") ||  
         strstr(strtolower($file), ".jpeg"))  
        $this->format = "JPEG";  
    else if (strstr(strtolower($file), ".png"))  
        $this->format = "PNG";  
    else {  
        $this->errmsg = "Unknown file format";  
        $this->error  = true;  
    }  
 
    if ($max_width == 0 && $max_height == 0 && $percent == 0)  
        $percent = 100;  
 
    $this->max_width  = $max_width;  
    $this->max_height = $max_height;  
    $this->percent      = $percent;  
    $this->file      = $file;  
    }  
 
    function calc_width($width, $height) {  
    $new_width  = $this->max_width;  
    $new_wp     = (100 * $new_width) / $width;  
    $new_height = ($height * $new_wp) / 100;  
    return array($new_width, $new_height);  
    }  
 
    function calc_height($width, $height) {  
    $new_height = $this->max_height;  
    $new_hp     = (100 * $new_height) / $height;  
    $new_width  = ($width * $new_hp) / 100;  
    return array($new_width, $new_height);  
    }  
 
    function calc_percent($width, $height) {  
    $new_width  = ($width * $this->percent) / 100;  
    $new_height = ($height * $this->percent) / 100;  
    return array($new_width, $new_height);  
    }  
 
    function return_value($array) {  
    $array[0] = intval($array[0]);  
    $array[1] = intval($array[1]);  
    return $array;  
    }  
 
    function calc_image_size($width, $height) {  
    $new_size = array($width, $height);  
 
    if ($this->max_width > 0) {  
        $new_size = $this->calc_width($width, $height);  
 
        if ($this->max_height > 0) {  
        if ($new_size[1] > $this->max_height)  
            $new_size = $this->calc_height($new_size[0], $new_size[1]);  
        }  
 
        return $this->return_value($new_size);  
    }  
 
    if ($this->max_height > 0) {  
        $new_size = $this->calc_height($width, $height);  
        return $this->return_value($new_size);  
    }  
 
    if ($this->percent > 0) {  
        $new_size = $this->calc_percent($width, $height);  
        return $this->return_value($new_size);  
    }  
    }  
 
    function show_error_image() {  
    header("Content-type: image/png");  
    $err_img   = ImageCreate(220, 25);  
    $bg_color  = ImageColorAllocate($err_img, 0, 0, 0);  
    $fg_color1 = ImageColorAllocate($err_img, 255, 255, 255);  
    $fg_color2 = ImageColorAllocate($err_img, 255, 0, 0);  
    ImageString($err_img, 3, 6, 6, "ERROR:", $fg_color2);  
    ImageString($err_img, 3, 55, 6, $this->errmsg, $fg_color1);  
    ImagePng($err_img);  
    ImageDestroy($err_img);  
    }  
 
    function show() {  
    if ($this->error) {  
        $this->show_error_image();  
        return;  
    }  
 
    $size      = GetImageSize($this->file);  
    $new_size  = $this->calc_image_size($size[0], $size[1]);  
    $new_image = ImageCreate($new_size[0], $new_size[1]);  
 
    switch ($this->format) {  
        case "GIF":  
        $old_image = ImageCreateFromGif($this->file);  
        break;  
        case "JPEG":  
        $old_image = ImageCreateFromJpeg($this->file);  
        break;  
        case "PNG":  
        $old_image = ImageCreateFromPng($this->file);  
        break;  
    }  
 
    ImageCopyResized($new_image, $old_image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);  
 
    switch ($this->format) {  
        case "GIF":  
        header("Content-type: image/gif");  
        ImageGif($new_image);  
        break;  
        case "JPEG":  
        header("Content-type: image/jpeg");  
        ImageJpeg($new_image);  
        break;  
        case "PNG":  
        header("Content-type: image/png");  
        ImagePng($new_image);  
        break;  
    }  
 
    ImageDestroy($new_image);  
    ImageDestroy($old_image);  
    return;  
    }  
}  
?>  
клысс для генерации тумб

Всего записей: 84 | Зарегистр. 02-06-2003 | Отправлено: 17:11 28-08-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Полезные (интересные и оригинальные) решения


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru