Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Распаковка .mht документа на строне сервера
 
 автор: Staglu   (02.12.2007 в 19:10)   письмо автору
 
 

Вот недавно накидал функцию, для распаковки mht (веб архивов) на стороне сервера. Протестируйте, и скажите, что в ней не так. Извинити, функция была написана на быструю руку, поэтому грязно написанна.

Вот код:


<?php
//Функция импорта *.mht,*.mhtml (Веб архивов), и *.htm,*.html (Гипертекстовые документы)

//Функция принимает значения:
//$file - принимает путь к файлу
//$type_import - принимает, чем был упакован веб архив.
//               Возможные имена:word2000_mht - Word 2000(*.mht,*.mhtml)
//                               word2003_mht - Word 2003(*.mht,*.mhtml)
//                               word2007_mht - Word 2007(*.mht,*.mhtml)
//
//                               word2000_mht - Word 2000(*.htm,*.html)
//                               word2003_mht - Word 2003(*.htm,*.html)
//                               word2007_mht - Word 2007(*.htm,*.html)
//$teg_mht - Переменная заполняется тегами, которые не будут удаленны из документа
//           (*.mht,*.mhtml) Веб архива
//$teg_html - Переменная заполняется тегами, которые не будут удаленны из документа
//           (*.htm,*.html) Гипертекстовые документы
//$hide - Переменная может принимать две текстовые строки :show –отображение
//                                                         hide - скрыто
//$put_save - путь сохранения извлеченных данных
//$id_pages - Индификатор стать.

function import($file,$type_import,$teg_mht,$teg_html,$hide,$put_save,$id_pages)
 {
//Делаем запрос в БД
$sql1 "SELECT * FROM pages
         WHERE id_pages = 
$id_pages";
$sql1 mysql_query($sql1);
$mass_arc mysql_fetch_array($sql1);//Создаем массив куда заносим все элементы, извлеченные из базы

$put_save $put_save."$mass_arc[dir]/";//Путь сохранения документа к нему добовляется переменная извлеченная

$arr file($file);//Создаем массив, открыв файл.
//Проверяем на соответствие, введеных данных
if($type_import == "word2000_mht" OR $type_import == "word2003_mht" OR $type_import == "word2007_mht")
 {
   for(
$i 0$i count($arr); $i++)//Зоздаем цикл, где считтаем каждую сроку файла
   
{
                
//Проверяем, содержится в строке тег <style>
                
if(strpos($arr[$i], "</style") !== false OR strpos($arr[$i], "</STYLE") !== false)
                 {
                    
$s 0;
                 }
                 else
                 {
                   if(
strpos($arr[$i], "<style") !== false OR strpos($arr[$i], "<STYLE") !== false)
                   {
                      
$s 1;
                   }
                 }

                 if(
strpos($arr[$i], "</body") !== false OR strpos($arr[$i], "<BODY") !== false )
                 {
                    
$html 0;
                 }
                 else
                 {
                   if(
strpos($arr[$i], "<body") !== false OR strpos($arr[$i], "</BODY") !== false)
                   {
                      
$html 1;
                   }
                 }


                 if(
strpos($arr[$i+1], "------") !== false )
                 {
                    
$img 0;
                 }
                 else
                 {

                   if(
strpos($arr[$i-1], "Content-Type: image/") !== false)
                   {
                      
$img 1;
                   }
                 }




                 if(
strpos($arr[$i], "Content-Location: file:") !== false OR strpos($arr[$i], "<" !== false))
                 {
                   
$pikch++;
                   
$imges_pikch[$pikch] = '*********';
                   
$pikch++;
                   
$imges_pikch[$pikch] = substr(strrchr($arr[$i],"/"),1);

                 }


                 IF(
$img == 1)
                 {
                    
$pikch++;
                    
$imges_pikch[$pikch] = $arr[$i];
                 }

                 if(
strpos($arr[$i], "Content-Location: file:") !== false AND $exe_if != 1)
                 {
                    
$html12 substr(strrchr($arr[$i],"/"),1);
                     if(
trim(strstr($html12,".")) == ".htm" OR trim(strstr($html12,".")) == ".html" )
                    {
                        
$html_name trim($html12);
                    }
                    
$exe_if 1;
                 }

                 IF(
$html == 1)
                 {
                   
$text $text."".$arr[$i]."";
                 }
                 elseif(
$s == OR strpos($arr[$i], "</style")!== false)
                 {
                   
$style $style."".$arr[$i]."";
                 }

   }

       if(
trim(strstr($html_name,".")) == ".htm")
       {
           
$img basename($html_name,".htm");
           
$img $img.".files/";
       }
       elseif(
trim(strstr($html_name,".")) == ".html" )
       {
           
$img basename($html_name,".html");
           
$img $img.".files/";
       }
       
$style quoted_printable_decode($style);
       
$text quoted_printable_decode($text);
       
$text str_replace($img$put_save$text);
       
$text strip_tags($text$teg_mht);
       
$text $style."".$text."";
       
$text str_replace("\r\n"," ",$text);
       
$text str_replace("\n"," ",$text);
       
$text str_replace('"',"",$text);
       
$text str_replace("'","",$text);

   
unlink($_FILES['file']['tmp_name']);//удаляем файл из временной дириктории

 
for($in 0$in count($imges_pikch); $in++)
  {
   if(
strlen(strrchr($imges_pikch[$in],".")) > AND strtoupper($imges_pikch[$in-1]) == "*********")
   {
      
$exe trim($imges_pikch[$in]);
       if(
preg_match("/$exe/",$text) == 1)
       {
          
$op fopen($put_save."".$exe"w");
          
$exe_write 1;
       }
       else
       {
           
$exe_write 0;
       }
   }
   else
   {
      if(
$imges_pikch[$in] != "*********" AND $exe_write == 1)
      {
       
$str base64_decode($imges_pikch[$in]);
         
fwrite($op$str);
      }

   }
 }


$text mysql_escape_string($text);
$sql "SELECT * FROM pages_block
        WHERE id_pages = 
$id_pages";
$sql mysql_query($sql);
$all mysql_num_rows($sql);
$all $all 1;


     
$sql2 "INSERT INTO pages_block VALUES(NULL,
                                            '
$all',
                                            '
$hide',
                                            '
$text',
                                            '
$id_pages',
                                            '
$type_import')";
$sql2 mysql_query($sql2);

 if(
$sql2)//Проверяемс на выявление ошибок
 
{
   return 
true;
 }
 else
 {
   return 
false;
 }

 }
elseif(
$type_import == "word2000_html" OR $type_import == "word2003_html" OR $type_import == "word2007_html" )
 {
   for(
$i 0$i count($arr); $i++)
   {

                if(
strpos($arr[$i], "</style") !== false OR strpos($arr[$i], "</STYLE") !== false)
                 {
                    
$s 0;
                 }
                 else
                 {
                   if(
strpos($arr[$i], "<style") !== false OR strpos($arr[$i], "<STYLE") !== false)
                   {
                      
$s 1;
                   }
                 }

                 if(
strpos($arr[$i], "</body") !== false OR strpos($arr[$i], "<BODY") !== false )
                 {
                    
$html 0;
                 }
                 else
                 {
                   if(
strpos($arr[$i], "<body") !== false OR strpos($arr[$i], "</BODY") !== false)
                   {
                      
$html 1;
                   }
                 }

                 if(
strpos($arr[$i], "Content-Location: file:") !== false AND $exe_if != 1)
                 {
                    
$html12 substr(strrchr($arr[$i],"/"),1);
                     if(
trim(strstr($html12,".")) == ".htm" OR trim(strstr($html12,".")) == ".html" )
                    {
                        
$html_name trim($html12);
                    }
                    
$exe_if 1;
                 }

                 IF(
$html == 1)
                 {
                   
$text $text."".$arr[$i]."";
                 }
                 elseif(
$s == OR strpos($arr[$i], "</style")!== false)
                 {
                   
$style $style."".$arr[$i]."";
                 }

   }

$style  quoted_printable_decode($style);
$text quoted_printable_decode($text);
$text str_replace($img$put_save$text);
$text strip_tags($text$teg_html);
$text $style."".$text."";
$text str_replace("\r\n"," ",$text);
$text str_replace("\n"," ",$text);
$text str_replace('"',"",$text);
$text str_replace("'","",$text);
$text mysql_escape_string($text);

    
unlink($_FILES['file']['tmp_name']);//удаляем файл, ПОСЛЕ ИЗВЛЕЧЕНИЯ


$text mysql_escape_string($text);
$sql "SELECT * FROM pages_block
        WHERE id_pages = 
$id_pages";
$sql mysql_query($sql);
$all mysql_num_rows($sql);
$all $all 1;


     
$sql2 "INSERT INTO pages_block VALUES(NULL,
                                            '
$all',
                                            '
$hide',
                                            '
$text',
                                            '
$id_pages',
                                            '
$type_import')";
$sql2 mysql_query($sql2);

 if(
$sql2)//Проверяемс на выявление ошибок
 
{
   return 
true;
 }
 else
 {
   return 
false;
 }

}
}
?>

   
 
 автор: cheops   (03.12.2007 в 11:12)   письмо автору
 
   для: Staglu   (02.12.2007 в 19:10)
 

Такой объёмный код, лучше прикреплять в виде архива.

   
 
 автор: mihdan   (03.12.2007 в 17:08)   письмо автору
 
   для: Staglu   (02.12.2007 в 19:10)
 


if(strpos($arr[$i], "<body") !== false OR strpos($arr[$i], "</BODY") !== false)  ????


А зачем в двух регистрах сравнивать?
strtolower() есть. И регулярки с флагом i

   
 
 автор: mihdan   (03.12.2007 в 17:10)   письмо автору
 
   для: mihdan   (03.12.2007 в 17:08)
 


$sql2 = mysql_query($sql2);

 if($sql2)//Проверяемс на выявление ошибок
 {
   return true;
 }
 else
 {
   return false;
 }

}



mysql_num_rows() есть!

   
 
 автор: mihdan   (03.12.2007 в 17:12)   письмо автору
 
   для: mihdan   (03.12.2007 в 17:10)
 


$sql2 = @mysql_query($sql2) or return false; 

   
 
 автор: Trianon   (03.12.2007 в 19:00)   письмо автору
 
   для: mihdan   (03.12.2007 в 17:12)
 


return !!mysql_query($sql2);

   
 
 автор: mihdan   (04.12.2007 в 07:56)   письмо автору
 
   для: Trianon   (03.12.2007 в 19:00)
 

или даже так

   
 
 автор: kasmanaft   (04.12.2007 в 09:30)   письмо автору
 
   для: Trianon   (03.12.2007 в 19:00)
 

-

   
 
 автор: Staglu   (04.12.2007 в 17:11)   письмо автору
 
   для: kasmanaft   (04.12.2007 в 09:30)
 

Спасибо, Я исправил все указанные ошибки. Но скритп работает стабильно? Ошибок в работе скрипта никто не встретил? Если можете откоменнтируйте работу скрипта.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования