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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В поддержание темы:
Данный цикл поможет сделать разбитие на страницы, а именно нумеризацию (1 2 3 4...)

Код:
 
$num = 10;  // Число записей всего.
$perpage = 7; // Кол-во, показываемых записей на странице.
$pages_count = @ceil($num/$perpage);
$pages .= 'Страницы:';
  for($j=1;$j<=$pages_count;$j++)
 {
 
          if ($_GET['page'] != $j)
          {
             $pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';
          }
          else
          {
             $pages .= ' <b>'.$j.'</b> ';
          }
 }
 
 
 

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 19:45 26-07-2004 | Исправлено: SafeWay, 19:46 26-07-2004
Church



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

Код:
 
<?php
if (isset ($_REQUEST["page"])){
$page=$_REQUEST["page"];
settype($page,"integer");
}
else {$page=1;}
 
$num_p=2; //Сколько номеров будет показано слева и справа от текущей страницы.
$num_all=15; //Всего "чего-то"
$limit=2; //"Чего-то" на одной странице
 
$n=$num_all/$limit;
if (!is_integer($n)){settype($n,"integer");$n++;}
if ($n>1){
print "<center>";
$start_p=$page-$num_p;
$end_p=$page+$num_p;
if ($end_p>$n){$end_p=$n;}
$start_p=$end_p-$num_p*2;
if ($start_p<1){$start_p=1;}
$end_p=$start_p+$num_p*2;
if ($start_p>1){
$t=$start_p-1;
print "<a href=\"1.php?page=".$t."\"><== Prev</a> ";
}
for ($i=$start_p;$i<$end_p+1 && $i<$n+1;$i++){
if ($page!=$i){
print "<a href=\"1.php?page=".$i."\">[".$i."]</a> ";
}
else {
print "<a href=\"1.php?page=".$i."\" style=\"color:#cccccc\">[".$i."]</a> ";
}
}
if ($end_p<$n){
print "<a href=\"1.php?page=".$i."\">Next =>></a>";
}
print "</center>";
}
print "Всего страниц: ".$n."<hr>";
if ($num_all>$limit){
$nop2=($page-1)*$limit;
if ($nop2>$num_all or $page<1){
print "Страница не существует";
}
}
?>
 

 
Тоже страницы... Тока с "NEXT" и "PREV"... Что-то намутил такое страшное.... Вроде как работает....

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 01:08 29-07-2004 | Исправлено: Church, 13:48 29-07-2004
SafeWay



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

Код:
 
 
$text = 'Переведём-ка мы всё это хозяйство на латиницу';
 
echo ru2lat($text); // передаем функции необходимую переменную с текстом
 
function ru2Lat($string)
{
$rus = array('ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я');
$lat = array('yo','zh','tc','ch','sh','sh','yu','ya','YO','ZH','TC','CH','SH','SH','YU','YA');
$string = str_replace($rus,$lat,$string);
$string = strtr($string,
"АБВГДЕЗИЙКЛМНОПРСТУФХЪЫЬЭабвгдезийклмнопрстуфхъыьэ",
"ABVGDEZIJKLMNOPRSTUFH'I'Eabvgdezijklmnoprstufh'i'e");
 
return($string);
}
 
/////////
Функция для записи в файл.
//$input - содержимое, которое будем записывать  
//$file - полный путь и имя файла  
//$chmod - аргумент, указывающий перезаписываем мы или дописываем файл  
 
function Save2File($input,$file,$chmod='w+')
{
$fp = fopen($file,$chmod);
flock($fp,2);
fputs ($fp,$input);
flock($fp,3);
fclose($fp);
}
 
 
 

 

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 20:20 30-07-2004
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для записи/чтения думаю, что будет полезно почитать это:
http://spectator.ru/technology/php/flock_workaround

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 01:58 31-07-2004
sculderspb

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Моя функция постраничного вывода с описанием и инструкциями по использованию. Довольная мощная и можно настроить под свои нужды:  
 
http://sculder.traktir.ru/stuff/php/scripts/pager.html
 
Полагаю, пригодится, ибо в инете мало чего толкового есть.

Всего записей: 25 | Зарегистр. 01-02-2004 | Отправлено: 07:13 04-08-2004
MAGISTRATE



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

Код:
 
############# генерируем шапку
function title($pagename,$all)
{
global $SITE;
 
           ##### выводим через жаву заголовок если $all == no
  if($all == "no"):
 
    $pagename = strtolower($pagename);
    $pagename[0] = strtoupper($pagename);
    print"<script language=javascript>";
    print"window.top.document.title=\"$SITE[comp] :: $pagename\"";
    print"</script>";
 
           ##### выводим имя раздела, если all == one
  elseif($all == 'one'):
    $pagename = $pagename;
    print"<b>$pagename</b>";
 
           ##### выводим все если $all == yes
  elseif($all == 'yes'):
    $pagenametop = strtolower($pagename);
    $pagename = strtoupper($pagename);
    $pagenametop[0] = strtoupper($pagename);
 
    print"<script language=javascript>";
    print"window.top.document.title=\"$SITE[comp] :: $pagenametop\"";
    print"</script>";
 
    print"<b>$pagename</b>";
  endif;
}
 

 
А так же выдрал из регистра:
 

Код:
 
function R_strlow ($str)
{
 
// фиксит  баг со strtolower в русском апаче (русские буквы не переводятся в нижний регистр)
$str=strtolower($str);
 
if (strtolower ("ЖОпа")!="жопа") $str = strtr
(
$str,
'АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ',
'абвгдеёжзийклмнорпстуфхцчшщъьыэюя'
);  
 
 
return $str;  
 
};
 

 
И на закуску:
 

Код:
 
// очищаем строку от опасных символов
function untag ($string)  
{
        $string = ereg_replace("<","&lt;",$string);
        $string = ereg_replace(">","&gt;",$string);
        $string = ereg_replace('\\\"',"&quot;",$string);
        $string = ereg_replace(":","&#58;",$string);
        $string = ereg_replace("!","&#33;",$string);
        $string = ereg_replace("\r","",$string);
        $string = ereg_replace("\n","<br>",$string);
        $string = ereg_replace("%","&#37;",$string);  
        $string = ereg_replace("^ +","",$string);
        $string = ereg_replace(" +$","",$string);
        $string = ereg_replace(" +"," ",$string);
        return $string;
};
 

 
Все вышеперечисленное просто, но неимоверно облегчает иной раз работу.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 00:51 06-08-2004
SafeWay



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

Цитата:
function untag ($string)  
{  
        $string = ereg_replace("<","&lt;",$string);  
        $string = ereg_replace(">","&gt;",$string);  
        $string = ereg_replace('\\\"',"&quot;",$string);  
        $string = ereg_replace(":","&#58;",$string);  
        $string = ereg_replace("!","&#33;",$string);  
        $string = ereg_replace("\r","",$string);  
        $string = ereg_replace("\n","<br>",$string);  
        $string = ereg_replace("%","&#37;",$string);  
        $string = ereg_replace("^ +","",$string);  
        $string = ereg_replace(" +$","",$string);  
        $string = ereg_replace(" +"," ",$string);  
        return $string;  
};  

Имхо лучше str_replace
$string = ereg_replace('\\\"',"&quot;",$string); - убивается проще - функцией stripslashes()

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 03:06 06-08-2004 | Исправлено: SafeWay, 03:07 06-08-2004
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имхо, лучше использовать PCRE, а в данной задаче по моему достаточно $string=nl2br(htmlspecialchars($string));
PS: по поводу "убивает все нотайсы, выводы ошибок и прочее" - разве error_reporting(0) для этих целей недостаточно?

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 14:18 06-08-2004 | Исправлено: SiMM, 14:19 06-08-2004
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[POST_EDITING]
Упс.. Не внимательно прочитал содержимое тему... Лишняя месага... Всем сорьки
[/POST_EDITING]

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 15:00 06-08-2004 | Исправлено: Church, 16:41 06-08-2004
dacuan

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

Цитата:
function R_strlow ($str)  
{  
 
// фиксит  баг со strtolower в русском апаче (русские буквы не переводятся в нижний регистр)

Вообще-то этот "баг" лечится установкой локали:

Код:
 
setlocale(LC_ALL, "ru_RU.CP1251");
 

 
А вот обратное преобразование -- строки со специальными HTML-символами в обычную строку, например "&gt;" => ">"

Код:
 
function unhtmlspecialchars($str){
    $trans = get_html_translation_table(HTML_SPECIALCHARS);
    $trans[' '] = '&nbsp;';
    $trans = array_flip($trans);
 
    return strtr (str_replace("<br>", "\r\n", $str), $trans);
}
 


Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 16:36 06-08-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
Я привел то, с чем мне удобнее пользоваться.  
 
 
SiMM
Ну давай. Юзай дальше свой htmlspecialchars  
 
SafeWay
Не согласен, попробуй обработать строку и так и так и засечь время....
Во вторых, много функций лепить - не дело. Поэтому красивее
 
untug(string);
 
чем
 
nl2br(addqoutes(stripslashes(htmlspecialchars(untug(string)))))
 
Так что товарищи, совет почитать книгу по оптимизации кода.


----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 19:16 06-08-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAGISTRATE
Эта ветка для готовых решений, а не для флейма.
Ты привел свой вариант решения проблемы, тебе предложили другой.
И направлять людей "почитать книгу" тоже не есть хорошо, особенно, если не привел ссылку.
Покажи мне в следующей строке "оптимизированный" код:

Цитата:
 
if (strtolower ("ЖОпа")!="жопа") $str = strtr
 

На счет эффективности использования eregi_* интересно почитать здесь
 
А вот и сравнение скорости
Имеем скрипт

Код:
 
<?
function echo_dif($start, $end){
$aA = explode(' ',$start.' '.$end);
$duration=($aA[2]+$aA[3])-($aA[0]+$aA[1]);
echo $duration."<br>";
}
 
function untag ($string)
{
        $string = ereg_replace("<","&lt;",$string);
        $string = ereg_replace(">","&gt;",$string);
        $string = ereg_replace('\\\"',"&quot;",$string); //Эта строка не будет работать с отключенным magic_quotes
        $string = ereg_replace(":","&#58;",$string);
        $string = ereg_replace("!","&#33;",$string);
        $string = ereg_replace("\r","",$string);
        $string = ereg_replace("\n","<br>",$string);
        $string = ereg_replace("%","&#37;",$string);
        $string = ereg_replace("^ +","",$string);
        $string = ereg_replace(" +$","",$string);
        $string = ereg_replace(" +"," ",$string);
        return $string;
};
 
function untag_str ($string)
{
        $string = str_replace("<","&lt;",$string);
        $string = str_replace(">","&gt;",$string);
        $string = str_replace('\\\"',"&quot;",$string); //Эта строка не будет работать с отключенным magic_quotes
        $string = str_replace(":","&#58;",$string);
        $string = str_replace("!","&#33;",$string);
        $string = str_replace("\r","",$string);
        $string = str_replace("\n","<br>",$string);
        $string = str_replace("%","&#37;",$string);
        $string = preg_replace("/\s+/s"," ",$string);
        return trim($string);
};
 
function my_untag ($string) {
return trim(nl2br(htmlspecialchars($string)));
}
 
$text = implode('\n', file('str_replace.htm'));
 
set_time_limit(0);
define("STEPS", 1);
//eregi
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = untag($text);
}
echo "eregi: ";
echo_dif($start, microtime());
 
//str
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = untag_str($text);
}
echo "str: ";
echo_dif($start, microtime());
 
//htmlspecialchars
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = trim(nl2br(htmlspecialchars($text)));
}
echo "htmlspecialchars: ";
echo_dif($start, microtime());
 
//myuntag
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = my_untag($text);
}
echo "my_untag: ";
echo_dif($start, microtime());
?>
 

 
Парсился html-файл размером 47Kb. Вот результаты:

Цитата:
 
eregi: 5.6553299427032
str: 0.086328983306885
htmlspecialchars: 0.02831506729126
my_untag: 0.028412103652954
 

 
Как видишь по результатам твой вариант скрипта сильно отстает от str_replace и тем более от htmlspecialchars.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 21:03 06-08-2004
SiMM

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

Цитата:
Как видишь по результатам твой вариант скрипта сильно отстает от str_replace и тем более от htmlspecialchars.
Результаты вполне предсказуемы - htmlspecialchars - единственная функция, решающая задачу "внутри" в один цикл по входной строке, без всяких вложенностей (ссылка по теме).

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:18 06-08-2004
MAGISTRATE



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

Код:
 
function untag($string)
{
                $string = strip_tags($string);
                $string = str_replace('\"','&quot;',$string);
                $string = str_replace("\'","&quot;",$string);
                $string = str_replace("\&","&",$string);
                $string = str_replace("<","&lt;",$string);
                $string = str_replace('\\\"',"&quot;",$string);
                $string = str_replace('\\"',"&quot;",$string);
                $string = str_replace("!","&#33;",$string);
                $string = str_replace("\r\n","<br>",$string);
                $string = str_replace("\n","<br>",$string);
                $string = str_replace("%","&#37;",$string);
                $string = str_replace("^ +","",$string);
                $string = str_replace(" +$","",$string);
                $string = str_replace(" +"," ",$string);
 
                return $string;
}
 

(По просьбе xntx'a изменил на str_ ему так лучше смотрится видимо)
 
Валиден ли и-мейл?

Код:
 
function check_email_addr($email) {
        if (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) return 1;
          else return 0;
}
 

 
Добавляем ссылку в строку

Код:
 
         function strings_addlinks($string)
         {
                 return preg_replace("%((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/~*$\.\'\%]*)(?<![\.,?!)])%i","<a href='\\1'>\\1<a>",$string);
         }
 

 
Иной раз тупость людей убивает...
Интересно, а как htmlspecialchars поможет, если в строке надо оставить
только <b> <i> <u>.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 22:15 06-08-2004 | Исправлено: MAGISTRATE, 01:20 18-08-2004
SiMM

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

Цитата:
Иной раз тупость людей убивает...
Заносит на поворотах? Если до тебя не доходит - как минимум, PCRE быстрее POSIX, суть некоторой части твоих замен для браузера совершенно бесполезна.

Цитата:
Интересно, а как htmlspecialchars поможет, если в строке надо оставить  
только <b> <i> <u>.
Это другая задача, которая решается при помощи strip_tags, и не имеет никакого отношения к htmlspecialchars, так же, как eregi не имеет отношения к отправке почты.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 22:38 06-08-2004
SafeWay



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

Цитата:
nl2br(addqoutes(stripslashes(htmlspecialchars(untug(string)))))  
 
Так что товарищи, совет почитать книгу по оптимизации кода

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

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 00:02 07-08-2004
SafeWay



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

Код:
class thumbnail
{
var $imgfile;
 
function thumb($imgfile)
{
   if (!file_exists($imgfile)) die ("Cannot read the file!");
  //detect image format
//$this->img["format"] = ereg_replace(".*\.(.*)$","\\1",$imgfile);
  $hz = explode(".", $name);
  $this->img["format"] = $hz[sizeof($hz-1)];
  $this->img["format"] = strtoupper($this->img["format"]);
  if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG")
  {
     //JPEG
    $this->img["format"]="JPG";
    $this->img["src"] = ImageCreateFromJPEG($imgfile);
  }
  elseif ($this->img["format"]=="PNG")
  {
     //PNG
     $this->img["format"]="PNG";
     $this->img["src"] = ImageCreateFromPNG($imgfile);
  }
  elseif ($this->img["format"]=="GIF")
  {
     //GIF
     $this->img["format"]="GIF";
     $this->img["src"] = ImageCreateFromGIF($imgfile);
 
}
 else {
//DEFAULT
echo "Not Supported File! Thumbnails can only be made from .gif, .jpg and .png images!";
exit();
}
$this->img["lebar"] = imagesx($this->img["src"]);
$this->img["tinggi"] = imagesy($this->img["src"]);
//default quality jpeg
$this->img["quality"]=100;
}
 
function size_auto($size=100)
{
  //size
  if ($this->img["lebar"]>=$this->img["tinggi"])
  {
    $this->img["lebar_thumb"]=$size;
    $this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"];
  }
  else
  {
    $this->img["tinggi_thumb"]=$size;
    $this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"];
  }
}
 
function jpeg_quality($quality=100)
{
//jpeg quality
$this->img["quality"]=$quality;
}
 
 
 
function show($gd_version)
{
  Header("Content-Type: image/".$this->img["format"]);
  if($gd_version==2)
  {
     $this->img["des"] = imagecreatetruecolor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
     imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"],$this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
  }
  if($gd_version==1)
  {
     $this->img["des"] = imagecreate($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
     imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"],$this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
  }
  if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG")
  {
     //JPEG
     imageJPEG($this->img["des"],"",$this->img["quality"]);
  }
  elseif ($this->img["format"]=="PNG")
  {
     //PNG
     imagePNG($this->img["des"]);
  }
  elseif ($this->img["format"]=="GIF")
  {
     //GIF
     imageGIF($this->img["des"]);
  }
}
 
function save($save="",$gd_version)
{
 
       if($gd_version==2)
       {
          $this->img["des"] = imagecreatetruecolor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
          @imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
       }
       if($gd_version==1)
       {
          $this->img["des"] = imagecreate($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
          @imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"],     $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
       }
       if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG")
       {
          //JPEG
          imageJPEG($this->img["des"],"$save",$this->img["quality"]);
       }
       elseif ($this->img["format"]=="PNG")
       {
           //PNG
           imagePNG($this->img["des"],"$save");
       }
       elseif ($this->img["format"]=="GIF")
       {
           //GIF
           imageGIF($this->img["des"],"$save");
       }
}
 
 
   function open_save($open, $save, $size, $gd)
   {
      $this->thumb($open);
      $this->size_auto($size);
      $this->save($save, $gd);
   }
 
}
 

Делать превьюшки ) Если надо сохранить копию картинки (уменьшенную, увеличенную), то:
$thumbnail = new thumbnail;
$thumbnail->open_save('1.jpg', 'copy.jpgf', $size, 2);
Где $size = размер полученной картинки.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 16:38 08-08-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Класс, который позволяет создать zip-архив из нескольких файлов.
Взят из phpMyAdmin/
Недостаток: не устанавливается время создания файла в архиве.

Код:
 
/**
 * Zip file creation class.
 * Makes zip files.
 *
 * Based on :
 *
 *  http://www.zend.com/codex.php?id=535&single=1
 *  By Eric Mueller (eric@themepark.com)
 *
 *  http://www.zend.com/codex.php?id=470&single=1
 *  by Denis125 (webmaster@atlant.ru)
 *
 * Official ZIP file format: http://www.pkware.com/appnote.txt
 *
 * @access  public
 */
class zipfile
{
    /**
     * Array to store compressed data
     *
     * @var  array    $datasec
     */
    var $datasec      = array();
 
    /**
     * Central directory
     *
     * @var  array    $ctrl_dir
     */
    var $ctrl_dir     = array();
 
    /**
     * End of central directory record
     *
     * @var  string   $eof_ctrl_dir
     */
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
 
    /**
     * Last offset position
     *
     * @var  integer  $old_offset
     */
    var $old_offset   = 0;
 
 
    /**
     * Adds "file" to archive
     *
     * @param  string  file contents
     * @param  string  name of the file in the archive (may contains the path)
     *
     * @access public
     */
    function addFile($data, $name)
    {
        $name = str_replace('\\', '/', $name);
 
        $fr   = "\x50\x4b\x03\x04";
        $fr   .= "\x14\x00";            // ver needed to extract
        $fr   .= "\x00\x00";            // gen purpose bit flag
        $fr   .= "\x08\x00";            // compression method
        $fr   .= "\x00\x00\x00\x00";    // last mod time and date
 
        // "local file header" segment
        $unc_len = strlen($data);
        $crc     = crc32($data);
        $zdata   = gzcompress($data,9);
        $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
        $c_len   = strlen($zdata);
        $fr      .= pack('V', $crc);             // crc32
        $fr      .= pack('V', $c_len);           // compressed filesize
        $fr      .= pack('V', $unc_len);         // uncompressed filesize
        $fr      .= pack('v', strlen($name));    // length of filename
        $fr      .= pack('v', 0);                // extra field length
        $fr      .= $name;
 
        // "file data" segment
        $fr .= $zdata;
 
        // "data descriptor" segment (optional but necessary if archive is not
        // served as file)
        $fr .= pack('V', $crc);                 // crc32
        $fr .= pack('V', $c_len);               // compressed filesize
        $fr .= pack('V', $unc_len);             // uncompressed filesize
 
        // add this entry to array
        $this -> datasec[] = $fr;
        $new_offset        = strlen(implode('', $this->datasec));
 
        // now add to central directory record
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec .= "\x00\x00";                // version made by
        $cdrec .= "\x14\x00";                // version needed to extract
        $cdrec .= "\x00\x00";                // gen purpose bit flag
        $cdrec .= "\x08\x00";                // compression method
        $cdrec .= "\x00\x00\x00\x00";        // last mod time & date
        $cdrec .= pack('V', $crc);           // crc32
        $cdrec .= pack('V', $c_len);         // compressed filesize
        $cdrec .= pack('V', $unc_len);       // uncompressed filesize
        $cdrec .= pack('v', strlen($name));  // length of filename
        $cdrec .= pack('v', 0 );             // extra field length
        $cdrec .= pack('v', 0 );             // file comment length
        $cdrec .= pack('v', 0 );             // disk number start
        $cdrec .= pack('v', 0 );             // internal file attributes
        $cdrec .= pack('V', 32 );            // external file attributes - 'archive' bit set
 
        $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
        $this -> old_offset = $new_offset;
 
        $cdrec .= $name;
 
        // optional extra field, file comment goes here
        // save to central directory
        $this -> ctrl_dir[] = $cdrec;
    } // end of the 'addFile()' method
 
 
    /**
     * Dumps out file
     *
     * @return  string  the zipped file
     *
     * @access public
     */
    function file()
    {
        $data    = implode('', $this -> datasec);
        $ctrldir = implode('', $this -> ctrl_dir);
 
        return
            $data .
            $ctrldir .
            $this -> eof_ctrl_dir .
            pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries "on this disk"
            pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries overall
            pack('V', strlen($ctrldir)) .           // size of central dir
            pack('V', strlen($data)) .              // offset to start of central dir
            "\x00\x00";                             // .zip file comment length
    } // end of the 'file()' method
 
} // end of the 'zipfile' class
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:42 09-08-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Класс для отправления почтовых сообщений в виде html с прикрепленными файлами

Код:
 
class html_mime_mail {
  var $headers;
  var $multipart;
  var $mime;
  var $html;
  var $parts = array();
 
  function html_mime_mail($headers="") {
    $this->headers=$headers;
  }
 
  function add_html($html="") {
    $this->html.=$html;
  }
 
  function build_html($orig_boundary,$kod) {
    $this->multipart.="--$orig_boundary\n";
    if ($kod=='w' || $kod=='win' || $kod=='windows-1251') $kod='windows-1251';
    else $kod='koi8-u';
    $this->multipart.="Content-Type: text/html; charset=$kod\n";
    $this->multipart.="Content-Transfer-Encoding: Quot-Printed\n\n";
    $this->multipart.="$this->html\n\n";
  }
 
 
  function add_attachment($path="", $name = "", $c_type="application/octet-stream") {
    if (!file_exists($path.$name)) {
      print "File $path.$name dosn't exist.";
      return;
    }
    $fp=fopen($path.$name,"r");
    if (!$fp) {
      print "File $path.$name coudn't be read.";
      return;
    }
    $file=fread($fp, filesize($path.$name));
    fclose($fp);
    $this->parts[]=array("body"=>$file, "name"=>$name,"c_type"=>$c_type);
  }
 
 
  function build_part($i) {
    $message_part="";
    $message_part.="Content-Type: ".$this->parts[$i]["c_type"];
    if ($this->parts[$i]["name"]!="")
       $message_part.="; name = \"".$this->parts[$i]["name"]."\"\n";
    else
       $message_part.="\n";
    $message_part.="Content-Transfer-Encoding: base64\n";
    $message_part.="Content-Disposition: attachment; filename = \"".
       $this->parts[$i]["name"]."\"\n\n";
    $message_part.=chunk_split(base64_encode($this->parts[$i]["body"]))."\n";
    return $message_part;
  }
 
 
  function build_message($kod) {
    $boundary="=_".md5(uniqid(time()));
    $this->headers.="MIME-Version: 1.0\n";
    $this->headers.="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $this->multipart="";
    $this->multipart.="This is a MIME encoded message.\n\n";
    $this->build_html($boundary,$kod);
    for ($i=(count($this->parts)-1); $i>=0; $i--)
      $this->multipart.="--$boundary\n".$this->build_part($i);
    $this->mime = "$this->multipart--$boundary--\n";
  }
 
 
  function send($server, $to, $from, $subject="", $headers="") {
    $headers="From: $from\nX-Mailer: Zveno\n$headers";
    $res=mail($to, $subject, "", $this->headers.$headers.$this->mime);
    return $res;
/*    $headers="To: $to\nFrom: $from\nSubject: $subject\nX-Mailer: The Mouse!\n$headers";
    $fp = fsockopen($server, 25, &$errno, &$errstr, 30);
    if (!$fp)
       die("Server $server. Connection failed: $errno, $errstr");
    fputs($fp,"HELO $server\n");
    fputs($fp,"MAIL FROM: $from\n");
    fputs($fp,"RCPT TO: $to\n");
    fputs($fp,"DATA\n");
    fputs($fp,$this->headers);
    if (strlen($headers))
      fputs($fp,"$headers\n");
    fputs($fp,$this->mime);
    fputs($fp,"\n.\nQUIT\n");
    while(!feof($fp))
      $resp.=fgets($fp,1024)."<br>";
    echo "<br><br><br>RESP=$resp<br><br><br>";
    fclose($fp);*/
  }
}
 

 
PS Если есть необходимость не использовать стандартную функцию mail(), то достаточно раскоментировать код в методе send, удалив тот, который сейчас работает. Но в этом случае почему-то не работает с некоторыми серверами, если кто разберется, отпишите

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 20:47 10-08-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 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