За последние 24 часа нас посетил 52731 программист и 1768 роботов. Сейчас ищут 1070 программистов ...

Архивация данных из бд и сайта в один zip архив

Тема в разделе "PHP и базы данных", создана пользователем aziz, 16 ноя 2007.

  1. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Здравствуйте друзья! Хотелось бы спросить Вашего совета.

    Имеетса база данныхв нём определённый текст (на подобии форума) а так же ссылки на jpg изображения которые должны присуствовать на странице с этим текстом.

    Вопрос: Возможно ли сделать архивацию в zip этой страницы для дольнейшего скачивания (или хранения на сервере).
    К примеру: Страница в нём текст и изображение, пользователь нажимает на кнопку "АРХИВИРОВАТЬ" после чего вся страница с содержимым архивируетса после чего пользователь её скачивает (копия архива остаётса на сервере).

    Буду весьма признателен за Ваш совет.
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    лучше будет использовать gzip сжатие в браузере.
     
  3. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    мне не нужно прием сжатой информации, ее декомпрессию «на лету» и вывод в файл и на экран, мне нужна именно архивация. То есть при нажатии на кнопку "Архивировать" у меня должен пулучиться zip архив. к примеру страничка test.htm в ней текст и изображение жмём "Архивировать" и получаем test.zip (или что то на подобии)
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    не знаю

    что-то на тему
    PHP:
    1. $content=file_get_content('http://mysite.ru/my.php');
    2.  
    3. $content= ... //замена ссылок на jpg на локальные
    4.  
    5. fwrite($f,$content);
    6.  
    7. copy($jpg...
    8.  
    9. exec('zip.exe ...
    10.  
    11.  
    12. unlink(...
     
  5. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    написать shell скрипт и вызывать его
    у меня такой архивирует базу и отправляет мне на почту по средам
    прописан в крон на каждую ночь
    Код (Text):
    1.  
    2. #!bin/sh
    3. DTW=`/bin/date +%w`
    4. rm /www/allrecla/backup/${DTW}.tar.gz
    5. /usr/local/bin/mysqldump --user=user --password=pwd --add-locks -Q -e nameDB > /backup/${DTW}.sql
    6. cd /backup/
    7. tar -cf ${DTW}.tar *.sql
    8. chmod 777 /backup/${DTW}.tar
    9. gzip /backup/${DTW}.tar
    10. rm /backup/*.sql
    11. if [ ${DTW} -eq 3 ]
    12. then
    13. uuencode /backup/${DTW}.tar.gz /backup/${DTW}.tar.gz | mail -s 'backup' моя@почта.ру
    14. fi
     
  6. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Спасибо за отзыв, но это не совсем то что я искал
     
  7. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    к примеру имеетса код:
    Код (Text):
    1. <?PHP
    2.  
    3. /**
    4.  * export object as a zipped folder with
    5.  * xml + binary objects (images etc ...)
    6.  *
    7.  */
    8.  
    9.  
    10. // define plugin name
    11. $ipath->plugins['export']['object']['zip']->title = "export object as zip file";
    12. $ipath->plugins['export']['object']['zip']->url = "object/export";
    13.  
    14.  
    15. function object_export(){
    16.   global $ipath;
    17.  
    18.   $id = $ipath->ARGV['id'];
    19.   if( $id<0 )
    20.     return error_message( "no such object" );
    21.  
    22.   $obj = object_factory($id);
    23.   if( !is_object($obj)  OR  !$obj->getPerm() ){
    24.     return access_denied();
    25.   } else {
    26.  
    27.     $exp = new ipathExport_object($id);
    28.     if( $exp->prepare() ){
    29.       $fn = basename( $exp->getFileName() );      
    30.  
    31.       if(isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT'])) {
    32.     // IE Bug in download name workaround
    33.     header("Content-Type: application/octetstream");
    34.     ini_set( 'zlib.output_compression','Off' );
    35.       } else {
    36.     header( "Content-Type: ".$exp->getMimeType().";  charset=UTF-8" );
    37.       }
    38.  
    39.       header( "Content-Length: ".filesize($exp->getFileName()) );    
    40.       header( "Content-disposition: ".
    41.           (strpos($HTTP_USER_AGENT,"MSIE 5.5")?"" :"attachment; ").
    42.           "filename=\"" . $fn. "\"" );
    43.      
    44.  
    45.       header( "Pragma: public" );
    46.       header( "Expires: 0" );
    47.       header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
    48.       header( "Cache-Control: public" );
    49.       header( "Content-Description: File Transfer" );
    50.       header( "Content-Transfer-Encoding: binary" );
    51.  
    52.       readfile_chunked( $exp->getFileName() );
    53.       $exp->cleanUp();
    54.       exit;    
    55.     }
    56.  
    57.     return error_message("export failed");
    58.   }
    59. }
    60.  
    61.  
    62. class iPathExport_object{
    63.  
    64.   function __construct($tmp=-1){
    65.     if(is_object($tmp) ){
    66.       $this->obj = $tmp;
    67.     } elseif( is_numeric($tmp) AND $tmp>0 ){
    68.       $this->obj = object_factory($tmp);  
    69.     }
    70.   }
    71.  
    72.   function prepare(){
    73.     global $ipath;
    74.  
    75.     if( !$this->obj ){
    76.       $this->error = "no object specified";
    77.       return false;
    78.     }
    79.    
    80.     $exp_dir = $ipath->conf['data_dir']."/tmp/o".$this->obj->getVal("id").
    81.       "_".trim_filename($this->obj->getTitle());
    82.     // print "export to $exp_dir|";
    83.     mkdir( $exp_dir );
    84.    
    85.     $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
    86.       $this->obj->getXML(OBJECTXML_RECURSE | OBJECTXML_EXPORT);
    87.     $fp = fopen($exp_dir."/object.xml", "w+");
    88.     fwrite( $fp, $xml );
    89.     fclose($fp);
    90.  
    91.     $dom = DOMDocument::LoadXML($xml);
    92.     // print_r($dom);
    93.     $children = $dom->getElementsByTagName("object");
    94.     foreach( $children as $child ){
    95.       $c_id = $child->getAttribute("id");
    96.       if( $id != $c_id  ){
    97.     $c_object = object_factory($c_id);
    98.     if( $c_object->binaryPath() ){
    99.       copy( $c_object->binaryPath(),
    100.         $exp_dir."/".$c_id."_".$c_object->binaryName() );
    101.     }
    102.       }
    103.     }
    104.  
    105.     // hard wired copy of icons - this must become
    106.     // dynamic some time:
    107.     mkdir( $exp_dir."/images/" );
    108.     if( !file_exists("images/folder.png") )
    109.       die( "no images/folder.png" );
    110.     copy( "./images/folder.png", $exp_dir."/images/folder.png" );
    111.     copy( "./images/document.png", $exp_dir."/images/document.png" );
    112.  
    113.    
    114.     $xslfile = "modules/io/xsl/object.xsl";
    115.     if( file_exists($xslfile) ){
    116.       $xsl = file_get_contents($xslfile);
    117.       $html = xml2html( $this->obj->getXML(OBJECTXML_RECURSE | OBJECTXML_COMMENTS), $xsl );
    118.       file_put_contents( $exp_dir."/preview.html", $html );
    119.       // print "<hr>$html<hr>";
    120.     }
    121.  
    122.    
    123.     // create the zip file
    124.     $this->zip_file = $exp_dir.".zip";
    125.  
    126.     // this line is specific for UNIX OS - will not work on Windows
    127.     // and may not work on some hosting servers.
    128.     system( "cd ".$ipath->conf['data_dir']."/tmp; ".
    129.         "zip -r ".basename($this->zip_file)." ".
    130.         basename($exp_dir). " > /dev/null" );
    131.     system( "rm -r $exp_dir" );
    132.  
    133.  
    134.     // check encryption
    135.    
    136.     if( $this->obj->getGroup()->getInfoVal("gpg_export")==1  OR
    137.     $ipath->user->getInfoVal("gpgencrypt")==1 ){
    138.       if( strlen( $ipath->user->getInfoVal("gpgkey") )<10 ){
    139.     // must encrypt but user has no key
    140.    
    141.     $this->_error = "user has no GPG key";
    142.     return false;
    143.       } else {
    144.  
    145.     if( ipath_gpgFileEncrypt( $this->zip_file, $this->zip_file.".gpg" ) ){
    146.       $this->zip_file = $this->zip_file.".gpg";
    147.       $this->_mimetype = "application/pgp-encrypted";
    148.       return true;
    149.     } else {
    150.       $this->_error = "encryption failed.";
    151.       return false;
    152.     }
    153.    
    154.       }
    155.     }
    156.  
    157.     return true;
    158.   }
    159.  
    160.   function getFileName(){
    161.     return $this->zip_file;
    162.   }
    163.  
    164.   function getMimeType(){
    165.     if( $this->_mimetype )
    166.       return $this->_mimetype;
    167.     return "application/x-zip";
    168.   }
    169.  
    170.   function cleanUp(){
    171.     unlink( $this->zip_file );
    172.   }
    173. }
    174.  
    175.  
    176. ?>
    но не пойму что не работает , при попытке создать архив в tmp папке создаётся файлы предназначенные для архивации в браузере происходит закачка zip файла, но при попытке открыть этот файл получаю сообщение об ошибке а сам архив пустой, уже и не знаю как быть.....
     
  8. dodo

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

    С нами с:
    21 апр 2011
    Сообщения:
    1
    Симпатии:
    0
    Адрес:
    Pakistan
    hi


    dear i am also stuked in the same problem which you are facing can you guide to solve issue b/c i have to solve it