| Вот недавно накидал функцию, для распаковки 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 == 1 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],".")) > 0 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 == 1 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;
}
}
}
?>
|
| |