php Выгрузкафайловизинфоблоковсогласноструктуреразделов

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php Выгрузкафайловизинфоблоковсогласноструктуреразделов相关的知识,希望对你有一定的参考价值。

<?php
define('BX_BUFFER_USED', true);
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('NO_AGENT_STATISTIC', true);
define('STOP_STATISTICS', true);
define('SITE_ID', 's1');


//$_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__ . '/../../../');

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';

//error_reporting(E_ALL);
ini_set('display_errors', 1);
set_time_limit(0);
ignore_user_abort(true);

while (ob_get_level()) {
    ob_end_flush();
}

if (!CModule::IncludeModule('iblock')) {
    echo 'Не удалось подключить модуль инфоблоков' . PHP_EOL;
    exit; 
}

$EVENT = 86; 
$REGIST_EVENT = 91; 
$REGIST_EVENT_NC = 109; 

// Получаем список секций с id
$arSelect = array('ID', 'NAME');
$arFilter = array('IBLOCK_ID' => $EVENT, 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y');
$res = CIBlockSection::GetList(array('SORT'=>'ASC'), $arFilter, true, $arSelect);
$section = array();
while($ob = $res->GetNext()) {
    $section[$ob['ID']] = $ob['NAME'];
}

// Вытаскиваем название события и его тип 
$filter = array(
    'IBLOCK_ID' => $EVENT,
);

$arSelect = array(
    'ID', 
    'IBLOCK_ID', 
    'NAME',
    'IBLOCK_SECTION_ID',
);

$events = CIBlockElement::GetList(array(), $filter, false, false, $arSelect);
$arEvents = array();
while ($dbRow = $events->GetNext()) {
    if (isset($section[$dbRow['IBLOCK_SECTION_ID']])) {
        $arEvents[md5($dbRow['NAME'])] = array(
            'section_name' => trim($section[$dbRow['IBLOCK_SECTION_ID']]),
            'original_name' => trim($dbRow['NAME']),
        );
    }
    //DebugMessage($dbRow['NAME']);
}

$filter = array(
    'IBLOCK_ID' => $REGIST_EVENT,
    'ACTIVE' => 'Y',
    "?PROPERTY_HIDDEN_EVENT_DATE" => "2017", 
);

$arSelect = array(
    'ID', 
    'IBLOCK_ID', 
    'NAME',
    'PROPERTY_HIDDEN_EVENT_DATE',
    'PROPERTY_HIDDEN_EVENT_NAME', 
    'PROPERTY_DOC_REFERENCE_FORM', 
    'PROPERTY_DOC_REGISTRY_STATEMENT', 
    'PROPERTY_ISMSPFILE', 
    'PROPERTY_ISMANUFACTURERFILE', 
    'PROPERTY_APPLICATIONDOC',
    'PROPERTY_DOCS', 
    'PROPERTY_COMPANY_NAME', 
);

$arGroupBy = array();

$arTempData = array();

// Корневая папка
$root = $_SERVER['DOCUMENT_ROOT'] . '/upload/event_docs/';
$rootFile = $_SERVER['DOCUMENT_ROOT'];

$eventsForm = CIBlockElement::GetList(array(), $filter, false, false, $arSelect);
$arFolder = array(
    'kongvist' => array(
        'folder_name' => 'Конгрессно-выставочные',
        'folders_event' => array(),
    ),
    'degust' => array(
        'folder_name' => 'Дегустационно-демонстрационные',
        'folders_event' => array(),
    ),
);

while ($dbRow = $eventsForm->GetNext()) {
    //$FILE_DOCS = CFile::GetPath($dbRow['PROPERTY_DOCS_VALUE']);
    //DebugMessage($dbRow);
    $name = trim($dbRow['~PROPERTY_HIDDEN_EVENT_NAME_VALUE']);
    $cName = trim($dbRow['~PROPERTY_COMPANY_NAME_VALUE']);
    $hName = md5($name);
    $hcName = md5($cName);
    $arDocs = array();

    if (!empty($dbRow['PROPERTY_DOCS_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_DOCS_VALUE']);
    }    

    if (!empty($dbRow['PROPERTY_DOC_REFERENCE_FORM_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_DOC_REFERENCE_FORM_VALUE']);
    }

    if (!empty($dbRow['PROPERTY_DOC_REFERENCE_FORM_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_DOC_REFERENCE_FORM_VALUE']);
    }
    if (!empty($dbRow['PROPERTY_DOC_REGISTRY_STATEMENT_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_DOC_REGISTRY_STATEMENT_VALUE']);
    }
    if (!empty($dbRow['PROPERTY_ISMSPFILE_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_ISMSPFILE_VALUE']);
    }
    if (!empty($dbRow['PROPERTY_ISMANUFACTURERFILE_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_ISMANUFACTURERFILE_VALUE']);
    }
    if (!empty($dbRow['PROPERTY_APPLICATIONDOC_VALUE'])) {
        $arDocs[] = CFile::GetPath($dbRow['PROPERTY_APPLICATIONDOC_VALUE']);
    }

    // Создадим структуру
    if (isset($arEvents[$hName])) {
        if ($arEvents[$hName]['section_name'] == 'Конгрессно-выставочные') {
            if (isset($arFolder['kongvist']['folders_event'][$hName])) {
                if (isset($arFolder['kongvist']['folders_event'][$hName]['folders_comp'][$hcName])) {
                    $arDocs_dop = $arFolder['kongvist']['folders_event'][$hName]['folders_comp'][$hcName]['folders_docs'];
                    $arFolder['kongvist']['folders_event'][$hName]['folders_comp'][$hcName]['folders_docs'] = array_merge($arDocs_dop, $arDocs);
                    //echo "STOP - НЕСКОЛЬКО ФОРМ ОТ ОДНОЙ КОМПАНИИ !!! " . $dbRow['ID'] . ' ' . $name . '<br> ';
                } else {
                    $arFolder['kongvist']['folders_event'][$hName]['folders_comp'][$hcName] = array(
                        'folder_name' => $cName,
                        'folders_docs' => $arDocs,
                    ); 
                }
            } else {
                $arFolder['kongvist']['folders_event'][$hName] = array(
                    'folder_name' => $name,
                );
            }
        } elseif ($arEvents[$hName]['section_name'] == 'Дегустационно-демонстрационные') {
            if (isset($arFolder['degust']['folders_event'][$hName])) {
                if (isset($arFolder['degust']['folders_event'][$hName]['folders_comp'][$hcName])) {
                    $arDocs_dop = $arFolder['degust']['folders_event'][$hName]['folders_comp'][$hcName]['folders_docs'];
                    $arFolder['degust']['folders_event'][$hName]['folders_comp'][$hcName]['folders_docs'] = array_merge($arDocs_dop, $arDocs);
                    //echo "STOP - НЕСКОЛЬКО ФОРМ ОТ ОДНОЙ КОМПАНИИ !!! " . $dbRow['ID'] . ' ' . $name . '<br> ';
                } else {
                    $arFolder['degust']['folders_event'][$hName]['folders_comp'][$hcName] = array(
                        'folder_name' => $cName,
                        'folders_docs' => $arDocs,
                    ); 
                }
            } else {
                $arFolder['degust']['folders_event'][$hName] = array(
                    'folder_name' => $name,
                );
            }
        }
    }
}

// Наполним каталог
foreach ($arFolder as $key => $value) {
    if (isset($value['folder_name']) &&  !empty($value['folder_name'])) {
        $type_root = $root . $value['folder_name'] . '/';
        if (isset($value['folders_event']) && is_array($value['folders_event'])) {
            foreach ($value['folders_event'] as $key2 => $events) {
                if (isset($events['folder_name']) && !empty($events['folder_name'])) {
                    $event_root = $type_root . $events['folder_name'] . '/';
                    if (isset($events['folders_comp']) && is_array($events['folders_comp'])) {
                        foreach ($events['folders_comp'] as $key3 => $comp) {
                            if (isset($comp['folder_name']) && !empty($comp['folder_name'])) {
                                $comp_root = $event_root . $comp['folder_name'] . '/';
                                // если папки не существует создаем её
                                if (!folder_exist($comp_root)) {
                                    if (mb_strlen($comp['folder_name']) > 70) {
                                        $temp = substr($comp['folder_name'], 0, 70);
                                        $comp_root = $event_root . $temp . '/';
                                        echo "создана папка с обрезанным названием компании " . $comp_root . ' <br>';
                                    }
                                    if (!mkdir($comp_root, 0777, true)) {
                                        die('Не удалось создать директории... ' . $comp_root);
                                    }
                                }
                                if (isset($comp['folders_docs']) && is_array($comp['folders_docs'])) {
                                    foreach ($comp['folders_docs'] as $key4 => $doc) {
                                        if (!empty($doc)) {
                                            if (file_exists($rootFile . $doc)) {
                                                $oldFile = $rootFile . $doc;
                                                $newFile = $comp_root . basename($doc);
                                                if (!copy($oldFile, $newFile)) {
                                                    echo "неудалось скопировать файл $doc..." . ' <br>';
                                                } else {
                                                    echo "файл $doc скопирован... " . ' <br>';
                                                }
                                            } else {
                                                echo 'Файл ' . $doc . ' не найден <br>';
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

function folder_exist($folder) {
    // Get canonicalized absolute pathname
    $path = realpath($folder);

    // If it exist, check if it's a directory
    return ($path !== false AND is_dir($path)) ? $path : false;
}


DebugMessage($_SERVER['DOCUMENT_ROOT']);

echo "string";

以上是关于php Выгрузкафайловизинфоблоковсогласноструктуреразделов的主要内容,如果未能解决你的问题,请参考以下文章

php ФормаобратнойсвязисзагрузкойфайлавWordPressнаосновеплагинаAjaxSimply。

php Рекурсивноекопированиеразделовинфоблокавновыйинфоблок

La Sylphide 仙女

sh Cоздатьtar-архивпроектаизаписатьеговфайл~/ prj.tar。 Внутринегофайлыбудутнаходитсявпапкеproj-1.2.3

php ЗагружаемфайлпоURL,перемещаемвпапкуuploads,привязываемфайлкюзеру,обновляеммету

php Загрузкафайлов,проверяемвременныйпуть,еслинеок - делаемправильнымего