Загрузка папок php - PullRequest
       4

Загрузка папок php

2 голосов
/ 11 июля 2011

Допустим, у меня есть папка, содержащая около пятидесяти фотографий, которые я только что сделал на фотосессии, и я хотел загрузить их все на свой веб-сайт.Поэтому вместо того, чтобы выбирать каждый из них и загружать его, я мог бы просто загрузить папку, в которой они находятся. Но поскольку браузеры не позволяют выбирать папки, я знаю, что могу сделать это, чтобы вы скопировали и вставилипуть к этой папке, но это было бы ужасно, хакерски и сложно.Есть ли лучший способ обойти загрузку папки вместо того, чтобы делать это?И если мне придется это сделать, будет ли copy () работать с папками или мне придется использовать рекурсивный цикл, чтобы получить все изображения из этой папки и любые папки внутри нее?

Ответы [ 6 ]

3 голосов
/ 11 июля 2011

Вы должны добавить атрибут multiple к элементу input:file.Таким образом, вы можете выбрать столько файлов, сколько хотите, в одном поле input:file.

2 голосов
/ 11 июля 2011

Сам PHP не может справиться с такой задачей, потому что для связи с клиентом он должен полагаться на интерфейс HTML. Если вы используете HTML5 или если ваши клиенты используют браузеры с соответствующей поддержкой, вы можете использовать множественный атрибут для элемента file input для выполнения этой задачи.

Для версий HTML, предшествующих HTML5, вам потребуется добавить инструмент, который может обрабатывать несколько загрузок файлов, например SWFUpload (Flash), jUpload (Java-апплет), или Загрузить (jQuery).

0 голосов
/ 11 июля 2011

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

0 голосов
/ 11 июля 2011

Я делаю это для моего сайта жены http://www.beccablake.com. Она также фотограф. Я создал собственный модуль (она использует drupal в качестве CMS) для загрузки zip-файла, содержащего все картинки. После загрузки я извлекаю zip и перебираю все файлы и создаю новые узлы для каждого. Вот фрагмент кода из этого модуля, который может помочь вам сделать то, что вы хотите.

<?php
$file = 'path/to/zip/pictures.zip';
$dest = 'path/to/pictures/directory';
exec('unzip "'. $file .'" -d '. $dest);
// If you need to do something with each file (like I do)
$files = scandir($dest);
?>

Это предполагает, что вы можете выполнить exec на вашем сервере, чтобы распаковать его. Мой код сильно отличается, так как я делаю больше с фотографиями, так как он в Drupal, я создаю галерею пробных проверок, и каждая картинка - это свой собственный узел, чтобы пользователи могли комментировать / оценивать / добавлять фотографии в избранное ... и т.д.

Удачи!

0 голосов
/ 11 июля 2011

Пока браузеры HTML5 не завладеют миром или вы не используете клиентские решения на основе Flash или Java, ЕДИНСТВЕННЫЙ способ, которым вы сможете загружать несколько файлов, - это предоставление <input type="file" ...> для каждого файла, который вы хотите загрузить.

Разрешение загрузки файлов из браузеров представляет собой серьезную угрозу безопасности, поэтому входные данные файлов являются одним из наиболее строго регламентируемых / регулируемых элементов в браузерах - предоставление возможности любого вида программирования открывает возможность для эксплойта, способного высосать любой файл (ы). ) атака хочет с клиентского компьютера.

0 голосов
/ 11 июля 2011

Просто: это невозможно только с помощью HTML-формы.Просто заархивируйте их и разархивируйте на стороне сервера.

...