Автор Тема: PHP:Полезные решения. Зайди сначало сюда!  (Прочитано 6402 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AdminFlash

  • Администратор
  • Титулярный советник
  • *****
  • Сообщений: 108
  • Репутация: 2
  • Пол: Мужской
Здесь публикуем наиболее часто используемые скрипты на PHP. Я начну )

Класс для отправления почтовых сообщений в виде html с прикрепленными файлами:

Код: (php) [Выделить]
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, удалив тот, который сейчас работает. Но в этом случае почему-то не работает с некоторыми серверами...
« Последнее редактирование: ПЭТРам 21, 2007, 07:27:22 pm от AdminFlash »

Оффлайн AdminFlash

  • Администратор
  • Титулярный советник
  • *****
  • Сообщений: 108
  • Репутация: 2
  • Пол: Мужской
Re: PHP:Полезные решения. Зайди сначало сюда!
« Ответ #1 : ПЭТРам 19, 2007, 11:20:40 pm »
Ну и еще примерчик...
Данный цикл поможет сделать разбитие на страницы, а именно нумеризацию (1 2 3 4...)
Код: (php) [Выделить]
$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> ';
          }
 }

Оффлайн ivan-hohol

  • Титулярный советник
  • ****
  • Сообщений: 114
  • Репутация: 4
  • Пол: Мужской
  • SkypeID: ivan-hohol
Re: PHP:Полезные решения. Зайди сначало сюда!
« Ответ #2 : ПЭТРам 26, 2007, 11:45:27 pm »
Вот и мой примерчик: функция замены названия смайлов на рисунки (база с названиями - файл "autochange.dat"). Названия смайлов и ссылки на рисунки должны быть записаны следующим образом:
:name_smile:|<img src=img/Smile/smile.gif border=0 width=15 height=15>. Таким же образом можно вырезать маты.

Код: (php) [Выделить]
function replaceMent ($string)
        {
        $exech="autochange.dat";
        $string = " ".$string;
        $autochange = file ($exech);
        $lines = count ($autochange);
        for($i=0;$i<$lines;$i++)
                {
                list($change1,$change2)=explode("|", $autochange[$i]);
                $string = eregi_replace($change1,$change2,$string);
                }
        return trim($string);
        }
« Последнее редактирование: ДХТаРЫм 24, 2007, 01:04:28 am от ivan-hohol »
Код: (php) [Выделить]
$php->hypertext($Preprocessor);

Оффлайн Romantic

  • Коллежский регистратор
  • *
  • Сообщений: 13
  • Репутация: 0
  • Пол: Мужской
Re: PHP:Полезные решения. Зайди сначало сюда!
« Ответ #3 : ёоЭм 08, 2007, 12:31:19 am »
ivan-hohol. Подкинь пример использования! Или роскажи как использовать!
JenyaStudio(team) 2007

Оффлайн ivan-hohol

  • Титулярный советник
  • ****
  • Сообщений: 114
  • Репутация: 4
  • Пол: Мужской
  • SkypeID: ivan-hohol
Re: PHP:Полезные решения. Зайди сначало сюда!
« Ответ #4 : ЅЮпСам 14, 2007, 02:03:43 am »
Вот пример класса для работы с шифрованием алгоритмами mcrypt:
Код: (php) [Выделить]
class Enmcrypt
{
 static $cypher = 'blowfish';
 static $mode = 'cfb';
 static $key = 'Very primitiv key';

 
 public function encrypt($plaintext)
 {
  $td = mcrypt_module_open(self::$cypher,'', self::$mode,'');
  $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  mcrypt_generic_init($td,self::$key,$iv);
  $crypttext = mcrypt_generic($td,$plaintext);
  mcrypt_generic_deinit($td);
  return $iv.$crypttext;
 }


 public function decrypt($crypttext)
 {
  $td = mcrypt_module_open(self::$cypher, '', self::$mode, '');
  $ivsize = mcrypt_enc_get_iv_size($td);
  $iv = substr($crypttext, 0, $ivsize);
  $crypttext = substr($crypttext, $ivsize);
  $plaintext= '';
  if($iv)
  {
   mcrypt_generic_init($td, self::$key, $iv);
   $plaintext = mdecrypt_generic($td, $crypttext);
   mcrypt_generic_deinit($td);
  }
  return $plaintext;
 }
}

Данный код работает при наличии расширения mcrypt.
Работать с этим кодом очень просто: достаточно статично вызвать метод $crypttext = Enmcrypt::encrypt('текст для шифрования') для шифрования текста и также статично вызвать для расшифровки метод $plaintext = Enmcrypt::decrypt($crypttext).
Код: (php) [Выделить]
$php->hypertext($Preprocessor);