Ищете, как загрузить каталог и его содержимое с помощью SFTP

Я создаю PHP-скрипт, который будет брать определенные каталоги с локального сервера и загружать их на удаленный сервер. Я использую phpseclib для работы над этим. Я пытаюсь придумать рекурсивную функцию, которая будет загружать файлы по одному. В настоящее время я использую такой массив:

[14842] => Array
    (
        [0] => adlcp_rootv1p2.xsd
        [attachments] => Array
            (
            )

        [1] => icon_online_training.png
        [2] => icon_online_training_10_10.png
        [3] => icon_online_training_5_5.png
        [4] => ims_xml.xsd
        [5] => imscp_rootv1p1p2.xsd
        [6] => imsmanifest.xml
        [7] => imsmd_rootv1p2p1.xsd
        [8] => index_lms.html
        [9] => index_lms_html5.html
        [10] => ioslaunch.html
        [lms] => Array
            (
                [0] => AICCComm.html
                [1] => AICCFunctions.js
                [2] => API.js
            )
        [11] => meta.xml
        [mobile] => Array
            (
                [0] => 5WVFAZ5mwdE_80_DX492_DY492_CX170_CY246.png
                [1] => 5WVFAZ5mwdE_80_DX492_DY492_CX170_CY246.swf
                [2] => 5WWiJ1xMpse_80_DX800_DY800_CX400_CY193.png
                [slides] => Array
                    (
                        [0] => 5VCMBOzQqNC.gz
                        [1] => 5VCMBOzQqNC.js
                        [2] => 5ZyGS2LfXQu.gz
                        [3] => 5ZyGS2LfXQu.js
                    )
                [56] => spinner.png
                [57] => storyline_compiled.js
            )

        [12] => story.html
        [13] => story.swf
        [story_content] => Array
            (
                [0] => 5WVFAZ5mwdE_80_DX492_DY492.swf
                [1] => 5WWiJ1xMpse_80_DX800_DY800.swf
                [2] => 5YBVUTyceKY_80_DX380_DY380.swf
                [3] => 5eOmKqzCtjp_80_B-30_C-40_RB_P_0_0_830_888_DX610_DY610.swf
                [4] => 5kmpqRdjAji_80_DX716_DY716.jpg
                [5] => 5mWp2jb2eV7_80_DX330_DY330.swf
                [6] => 5qT54mLzsgr_80_DX660_DY660.jpg
                [slides] => Array
                    (
                        [0] => 5VCMBOzQqNC.swf
                        [1] => 5ZyGS2LfXQu.swf
                        [2] => 5cf9K2RD4e2.swf
                        [3] => 5kTbjeZczQg.swf
                    )

                [33] => story.js
                [34] => thumbnail.jpg
            )
        [14] => story_html5.html
        [15] => story_unsupported.html
    )

[6703] => Array
    (
        [0] => a day in the life of a rsa.docx
        [attachments] => Array
            (
            )

        [1] => icon_resources.png
        [2] => icon_resources_10_10.png
        [3] => icon_resources_5_5.png
    )

Я буду перебирать первую часть массива для верхнего уровня каждого каталога. Оттуда я хотел бы использовать функцию, которая будет рекурсивно добавлять файлы на сервер удаления, где ключи, являющиеся массивами, являются именем каталога, а массив - содержимым этого каталога. Пара примеров из первого массива в списке будет примерно такой:

/local/public_html/14842/adlcp_rootv1p2.xsd => /remote/public_html/14842/adlcp_rootv1p2.xsd

or

/local/public_html/14842/mobile/slides/5VCMBOzQqNC.gz => /remote/public_html/14842/mobile/slides/5VCMBOzQqNC.gz

Для создания этого массива у меня в настоящее время есть функция, которую я могу изменить, чтобы она загружала файлы, а не создавала файл, но у меня были некоторые проблемы. Вот этот цикл и функция для этого:

foreach($cids as $c) {
    $dirArray[$c] = dirToArray($dir . DIRECTORY_SEPARATOR . $c);
}

function dirToArray($dir)
{
$result = array();

$cdir = scandir($dir);
foreach ($cdir as $key => $value) {
    if (!in_array($value, array(".", ".."))) {
        if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
            $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
        } else {
            $result[] = $value;
        }
    }
}

return $result;
}

Если мне нужна дополнительная информация для оказания помощи, пожалуйста, дайте мне знать.


person Michael Gibson    schedule 13.07.2016    source источник
comment
Точно, КАК это не работает? были некоторые проблемы, ничего нам не говорит.   -  person Marc B    schedule 13.07.2016
comment
То, что у меня сейчас работает, работает. То, что я пытаюсь сделать, это настроить функцию, которая будет перемещать файлы, но я не могу понять, как мне нужно изменить функцию dirToArray, чтобы вместо этого можно было загружать каталоги и файлы.   -  person Michael Gibson    schedule 13.07.2016
comment
обратите внимание, что вы не загружаете каталоги. каталог - это просто контейнер. вы СОЗДАЕТЕ каталог в удаленной системе, а затем загружаете файлы для размещения в этом каталоге.   -  person Marc B    schedule 13.07.2016
comment
возможно, именно туда я и направлялся тогда. Я пытался использовать $sftp-›put() для передачи каталога. Я предполагаю, что если каталог не существует, он просто создаст его, когда я сделаю что-то вроде /home/public_html/dir/local.file.   -  person Michael Gibson    schedule 13.07.2016
comment
Учитывая ваш второй вопрос (stackoverflow.com/q/38361843/569976), вам все еще нужна помощь?   -  person neubert    schedule 15.07.2016