Как загрузить папку с PHP?

Возможно ли загрузить папку в браузере?

Я ищу в Google и узнаю, что это ограничение для браузера, и что я должен использовать Java Applet или Flash.

Есть ли способ загрузить папку с помощью Flash? Я не могу понять это. Есть ли способ получить только путь к папке с браузером?

Это становится возможным с использованием webkitdirectory.

<input type="file" webkitdirectory directory multiple /> 

Хотя он пока не поддерживается другими браузерами.

Попробуйте это для загрузки папки:

 <form method="post" enctype="multipart/form-data"> <input type="file" name="files[]" id="files" multiple="" directory="" webkitdirectory="" mozdirectory=""> <input class="button" type="submit" value="Upload" /> </form> 

См. Swfupload – способ Flash для загрузки нескольких файлов одновременно. В любом случае, невозможно загрузить папку, вы можете загружать только все файлы из папки.

Одновременно можно загружать несколько файлов, перетаскивая их, без каких-либо плагинов для браузера. Это новая разработка с HTML5 и javascript, поэтому вам, вероятно, понадобится резерв для старых браузеров.

Он называется « перетаскивание HTML5 ». Я еще не использовал его, поэтому я не могу дать вам образец кода, но поиск этой фразы и чтение связанной статьи в блоге Mozilla могут дать вам несколько указателей.

Вы можете архивировать каталог с чем-то вроде tar а затем загружать его как один файл. Но будьте осторожны, вы можете превысить php upload max, который по умолчанию установлен на 2MB. Однако это настраивается.

для загрузки папки в php, выполните следующие действия.

 <form id="form1" action="myCurrent.php" method="post"> <label>Upload All Files From Folder</label> <br/> <input id="input" name="input[]" type="file" multiple webkitdirectory > <div id="errorBlock" class="help-block"></div> <br/> <input type="submit" name="btnDesFolder" id="btnDesFolder" value="send file" /> </form> <?php if(isset($_POST['btnDesFolder'])){ $myFiles = $_POST['input-folder-2']; if(isset($_POST['input-folder-2'])){ $files = scandir("path/to/your/folder"); $oldfolder = "path/to/your/folder/"; $newfolder = "path/to/new/folder"; foreach($files as $fname) { if($fname != '.' && $fname != '..' && $fname != 'index.php') { rename($oldfolder.$fname, $newfolder.$fname); } } } } ?> 

Невозможно загрузить папку только с помощью PHP, но Javascript может обнаруживать папки, поэтому я решил это, выполнив следующие два действия:

  1. Создайте функцию Javascript, которая читает каталог и файлы, которые будут загружены, и добавьте это в массив (я назвал это Filestructure), который будет отправлен вместе с POST. Например:

     { 'foldername/': {'file1.txt','file2.txt}, 'foldername/folder2': {'foo.txt', 'bar.png'} } 

В Dropzone.js есть аналогичная функция, которая уже обрабатывает это, что мне пришлось изменить (_addFilesFromDirectory ()). Но вы можете создать свою собственную функцию для этого. См. Этот https://stackoverflow.com/a/20431117/6760554, если вам нужна дополнительная помощь в этом отношении.

  1. В Php вы должны сначала загрузить свои файлы в определенную папку, где они будут храниться временно. После того, как ваши файлы были загружены, вам необходимо передать свой массив javascript на ваш phpcode. Там вам нужно перебрать массив и создать папки, а затем переместить загруженные файлы из временной папки в соответствующее место. Например:

     $_filetree = $_POST['filetree']; function createFoldersAndMoveFiles($_filetree) { $nFolders = count($_filetree); foreach ($_filetree as $folder => $files) { createFolder($folder); moveFiles($files, $folder); } } function moveFiles($_files, $_folder) { $source = 'tmpuploads/'; $destination = 'mypath/'; $nFiles = count($_files); for($i = 0; $i < $nFiles; $i++) { $file = $_files[$i]; rename($source . $file, $destination .$_folder. '/' .$file); } } function createFolder($foldername) { $folders = explode("/", $foldername); $path = 'mypath/'; $nFolders = count($folders); for($i = 0; $i < $nFolders; $i++){ $newFolder = '/' . $folders[$i]; $path .= $newFolder; if (!file_exists($path) && !is_dir($path)) { mkdir($path); } } } 

Надеюсь, это поможет.