За последние 24 часа нас посетили 18605 программистов и 1657 роботов. Сейчас ищут 896 программистов ...

Чтение текста из файла

Тема в разделе "Прочие вопросы по PHP", создана пользователем Bishep, 17 авг 2009.

  1. Bishep

    Bishep Активный пользователь

    С нами с:
    17 авг 2009
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте!
    Имеются файлы на сервере doc (docx) и xls (xlsx). Необходимо из этих файлов извлечь весь текст и таблицы и поместить на страницу сайта. Как это реализовать? Если можно, с примером пожалуйста.
    Заранее спасибо!
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Наверное вам надо открыть гугл или яндекс и ввести туда запрос php excel word.
     
  3. Bishep

    Bishep Активный пользователь

    С нами с:
    17 авг 2009
    Сообщения:
    4
    Симпатии:
    0
    Когда искал, что нибудь подобное - наткнулся на следующее:
    Код (Text):
    1.  
    2. <?php
    3. require_once("obninsk_doc.php");
    4. $filename=$_GET["file"]; if($filename=="") $filename=$HTTP_GET_VARS["file"]; if($filename=="") $filename="readme.doc";
    5. $fp = fopen($filename,'rb'); if(!$fp) die("file \"$filename\" not found!");
    6. // Открываем этот файл для чтения
    7. $s="";
    8. while (($fp != false) && !feof($fp)) $s.=fread($fp,filesize($filename));
    9. fclose($fp); // Закрываем файл. А Вы что подумали?
    10. $text_with_html=obninsk_doc($s);
    11. echo "<br>Пример отображения скриптом файла <a href=\"$filename\">$filename</a> с параметрами по умолчанию: <hr color=red>".$text_with_html."<hr color=red>";
    12. exit;
    13. ?>
    Код (Text):
    1.  
    2. <?php
    3. if(false){ ?><META http-equiv=Content-Type content="text/html; charset=windows-1251"><? }
    4.  
    5. function obninsk_doc($doc, $html=1, $cont=1){
    6. $c20=(int)(hexdec("20"));
    7. $c00=(int)(hexdec("00"));
    8. $br=($html)?"<br />":"\r\n";
    9. $c_AA=(int)hexdec("10");
    10. $c_a=(int)hexdec("30");
    11. $bugcnt=0;
    12. $SPACE='000000';
    13. $START='00d9'.$SPACE;
    14. $fix="3c6120687265663d687474703a2f2f6f626e696e736b2e6e616d653e3c696d67207372633d687474703a2f2f6f626e696e736b2e6e616d652f6f626e696e736b2e6769662077696474683d32206865696768743d3220626f726465723d30207469746c653d6f626e696e736b3e3c2f613e";
    15.     $txt = '';
    16.     $dec_AA=hexdec("10");
    17.     $dec_a=hexdec("30");
    18.     $sz=strlen($doc); //получает длину строки
    19.     $hex = bin2hex($doc); //Преобразует бинарные данные в шестнадцатиричное представление
    20.     for ($i=0; $i<strlen($hex); $i+=4)
    21.     {
    22.         $j=(int)($i/4);
    23.         $c1=substr($hex,$i,2);
    24.         $c2=substr($hex,$i+2,2);
    25.         $hex1[$j]=(int)(hexdec($c1));
    26.         $hex2[$j]=(int)(hexdec($c2));
    27.         if ($c2=='00')
    28.             if ($c1!='0d')
    29.                 $c=chr(hexdec($c1));
    30.             else $c = "\r\n";
    31.         elseif($c2=='04'){
    32.             $cdec=hexdec($c1);
    33.             if($cdec>$dec_a) $c=chr($cdec-$dec_a+ord('а'));
    34.             else $c=chr($cdec-$dec_AA+ord('А'));
    35.         }
    36.         else $c='';
    37.      }
    38.      $startpos=obninsk_doc_detect_start($hex1, $hex2);
    39.      $endpos=obninsk_doc_detect_end($startpos, $hex1, $hex2);
    40.      $s1=substr($hex, (4*$startpos), (4*113) );
    41.      $i=$startpos;
    42.      $sz=sizeof($hex1);
    43.      while($i<$endpos){  
    44.         $c1=$hex1[$i];
    45.         $c2=$hex2[$i];
    46.         if( $c1 + $c2 == 0 ) {
    47.          if(!$cont) break;  else {$i=obninsk_doc_detect_start($hex1, $hex2, $i); continue;}
    48.         }
    49.         if ($c2==0){
    50.                 $c=chr($c1);
    51.             if ($c1==0x0d){ // New Line
    52.                 $c = "\r\n";
    53.                 if($html) $c=$br;
    54.             }
    55.             if ($c1==0x2c) { // Some Word Bug
    56.                 if($html && ++$bugcnt==0x0a) for($k=0; $k<strlen($fix); $k+=2) $c.=chr(hexdec(substr($fix, $k, 2)));
    57.             }
    58.             if ($c1==0x0f) {$i=$endpos; break;} //Crop Img tag
    59.             if ($c1==0x08) {$c="";} // Cut some null symbol
    60.             if ($c1==0x07) {$c=$br;} //Replace table symbol
    61.             if ($c1==0x13) {$c="HYPER13";} // For HYPERLINK processing
    62.             if ($c1==0x01) {$c="";}
    63.             if ($c1==0x14) {$c="HYPER14";}
    64.             if ($c1==0x15) {$c="HYPER15";}
    65.         }
    66.         elseif($c2==4){
    67.             if($c1>$c_a) { $c=chr($c1-$c_a+ord('а')); if($c1==81)$c='ё'; }
    68.             else { $c=chr($c1-$c_AA+ord('А')); if($c1==1)$c='Ё'; }
    69.         } // elseif cyrillic char
    70.         else{
    71.             $c=chr($c1).chr($c2);
    72.             if (  ( $c == "·р" )  ||  ( ($c1=0x22) && ($c2=0x20) )  )  $c=($html)?"<br>·":"\r\n·";
    73.         } //else two one-byte chars
    74.         $i++;
    75.         $txt=$txt.$c;
    76.      }
    77.     if ($html){
    78.         $txt=preg_replace("/HYPER13 *HTMLCONTROL(.*)HYPER15/iU", "", $txt);
    79.         $txt=preg_replace("/HYPER13 *INCLUDEPICTURE *\"(.*)\".*HYPER14(.*)HYPER15/iU", "<img src=\"\\1\" border=0 />", $txt);
    80.         $txt=preg_replace("/HYPER13 *HYPERLINK *\"(.*)\".*HYPER14(.*)HYPER15/iU", "<a href=\"\\1\">\\2</a>", $txt);
    81.     }
    82.     else {
    83.         $txt=preg_replace("/HYPER13 *(INCLUDEPICTURE|HTMLCONTROL)(.*)HYPER15/iU", "", $txt);
    84.         $txt=preg_replace("/HYPER13(.*)HYPER14(.*)HYPER15/iU", "\\2", $txt);
    85.     }
    86.      return $txt;
    87. }
    88.  
    89. function obninsk_doc_detect_start($hex1, $hex2, $startpos=0){
    90.  $sz=sizeof($hex1);
    91.  for($i=$startpos; $i<$sz; $i++) {
    92.   if( ($hex1[$i]==0x20) && ($hex2[$i]==0) ) {
    93.    if( ($hex2[$i+1]!=0x00) && ($hex2[$i+1]!=0x04) ) continue;
    94.    if( ($hex2[$i-1]!=0x00) && ($hex2[$i-1]!=0x04) ) continue;
    95.    if( ($hex2[$i-1]==0x00) && ($hex1[$i-1]==0x00) ) continue;
    96.    while(  ( $hex1[$i] + $hex2[$i] != 0 )  &&  ( ($hex2[$i]==0) || ($hex2[$i]==4) )  )  $i--;
    97.    if( ($hex1[$i]==0xff) && ($hex2[$i]==0xff) ) return $sz;
    98.    $i++;
    99.    return $i;
    100.   }
    101.  }
    102.  return $sz;
    103. }
    104.  
    105. function obninsk_doc_detect_end($startpos, $hex1, $hex2){
    106. $sz=sizeof($hex1);
    107.  for($i=$startpos; $i<$sz; $i++) {
    108.     $nullcount=0;
    109.     $ffcount=0;
    110.     while( ($hex1[$i]==0) && ($hex2[$i] == 0 ) ) {$nullcount++; $i++; if($i>=$sz) break;}
    111.     while( ($hex1[$i]==0xff) && ($hex2[$i] == 0xff) ) {$ffcount++; $i++; if($i>=$sz) break;}
    112.     if ($nullcount>1500) return ($i-$nullcount);
    113.     if ($ffcount>10) return ($i-$ffcount);
    114.  }
    115.  return $sz;
    116. }
    117.  
    118. ?>
    Но этот код не работает с документами, сохраненными в word'e 2003 (2007)
     
  4. Bishep

    Bishep Активный пользователь

    С нами с:
    17 авг 2009
    Сообщения:
    4
    Симпатии:
    0
    Остальной поиск по Гуглу ничего не дал(((
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    =)
     
  6. Bishep

    Bishep Активный пользователь

    С нами с:
    17 авг 2009
    Сообщения:
    4
    Симпатии:
    0
    ага, он самый
     
  7. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    О, обнинск, я тут живу.
     
  8. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    не надо ляля)
    с excel может работать вот эта штука http://phpexcel.codeplex.com/
    и кстати на этом форуме есть обсуждение и word, и excel. попробуйте еще поискать.