Архивация файла перед сохранением ноды

Главные вкладки

Аватар пользователя animan animan 19 декабря 2015 в 15:45

У меня стояла задача сжимать файл (xml) при загрузке, ибо при большом количестве ощутимо места занимает. Плюс я еще проверяю на валидность xml загружаемого файла, если же вам не нужна проверка, то можете немного переделать код и все.

Возможно кому-то нужен такой функционал:

<?php
/**
 * Implementation of hook_file_presave()
 */
function xml_import_file_presave($file) {
    
$path pathinfo($file->uri);
    if (
$file->status == && $path['extension'] == 'xml' && $file->source == 'field_xml_file_und_0') { //field_xml_file - машинное имя поля
        
try {
            
$full_path drupal_realpath($file->uri);
            
libxml_use_internal_errors(true);
            
$xml = new SimpleXMLElement("compress.zlib://$full_path"NULLTRUE);

            global 

$base_url;
            
$domain str_replace('http://''-'$base_url);
            
$title = (array) $xml->description->{'name'}; //получаем название из xml файла
            
$title_lower transliteration_get(str_replace(' ''-'mb_strtolower($title[0])) . $domain'');

            

$file_name $title_lower '.xml';
            
$dir_file file_create_filename($file_namedrupal_dirname($file->uri));
            
$new_link $dir_file '.gz'//path to file in archive
            //dpm($dir_file);

            

rename($file->uri$dir_file);
            
$file->filename $file_name;
            
$file->origname $file_name;
            
$file->uri $dir_file;
            
$data implode(''file($file->uri));
            
$gzdata gzencode($data9);
            
$fp fopen($new_link'w');
            
fwrite($fp$gzdata);
            
fclose($fp);
            
file_unmanaged_delete($file->uri); // delete old file from "public://"

            //Replace all data
            

$file_name .= '.gz';
            
$file->filename $file_name;
            
$file->origname $file_name;
            
$file->uri $new_link;
            
$file->destination $new_link;
            
$file->filesize filesize($new_link);
            
$file->filemime 'application/x-gzip';
            
$file->type 'archive';
        } catch (
Exception $ex) {
            
//Display message when error loading xml-file
            
libxml_clear_errors();
            
drupal_set_message(t('Expected data in a XML-format.'), 'error');
        }
        
//dpm($file);
    
}
}
?>

Лучший ответ

Аватар пользователя animan animan 27 декабря 2015 в 20:46

Не могу изменить запись из-за того что "Не используйте матерные или агрессивные слова", хотя какие агрессивные у меня слова в коде я не знаю.

Поскольку код я не могу закинуть, напишу так. Используйте в $title_lower preg_replace(), вместо str_replace() для того что б не брать в название всякие спец. символы.

Комментарии

Аватар пользователя animan animan 27 декабря 2015 в 20:46

Не могу изменить запись из-за того что "Не используйте матерные или агрессивные слова", хотя какие агрессивные у меня слова в коде я не знаю.

Поскольку код я не могу закинуть, напишу так. Используйте в $title_lower preg_replace(), вместо str_replace() для того что б не брать в название всякие спец. символы.