Створення ZIP-архіву на PHP. Створюємо довільну сторінку архівів у WordPress
Якщо я запитаю вас, який стандартний тип сторінок у WordPress використовуєте найрідше, то, швидше за все, ваша відповідь буде – шаблон архівів. Або, що ще ймовірніше, ви взагалі навіть не чули про шаблон архівів – він настільки непопулярний. Причина проста. Стандартний спосіб використання архівів далекий від розуміння «дружнього користувача».
Давайте виправимо це сьогодні! Давайте створимо сторінку архівів WordPress, яка буде справді корисною. Найприємніша річ – те, що ви зможете використовувати ці архіви у будь-якій сучасній темі WordPress, встановленій на вашому сайті. Однак давайте спочатку розберемося, що ми маємо на увазі під «сторінкою архівів»?
Історія архівів WordPress
У WordPress ви працюєте з масою різних шаблонів та структурних елементів, які входять до стандартної конфігурації. Якщо поглянути на список директорій стандартної теми Twenty Fifteen, то побачимо таке:
- Сторінка помилок 404
- Сторінка архівів (наш сьогоднішній гість)
- Сторінка вкладених зображень
- Індексна сторінка (головна сторінка)
- Шаблон сторінок (для стандартних сторінок)
- Сторінка результатів пошуку
- Сторінки окремих записів та вкладень
Незважаючи на різні цілі, всі ці сторінки дуже схожі за своєю структурою, і часто вони відрізняються лише кількома ділянками або кількома рядками коду. Єдина видима різниця між індексною сторінкою та архівною сторінкою – це додатковий заголовок вгорі, який змінюється в залежності від сторінки, що переглядається.
Ідея, яка була покладена в основу архівної структури, полягає в тому, щоб запропонувати адміністратору блогу зручний та простий спосіб виведення архівів за різними критеріями. Зрештою, всі ці різні архівні сторінки – це версії індексної сторінки; вони виводять контент, опублікований у певний часовий проміжок, певним автором, з певними мітками та рубриками.
Звучить добре, якщо дивитися на це з позицій програміста, проте це не найзручніший підхід з погляду користувачів. У цьому випадку відсутній один важливий рівень – рівень, який пролягає між наміром користувача знайти контент та окремими елементами архівів.
Ось що я маю на увазі. Наразі єдиний вбудований спосіб виведення архівних посилань на сайті WordPress – це висновок через віджет. Таким чином, якщо ви хочете дозволити користувачам заглиблюватися в архіви, причому ви хочете зробити це зрозумілим для людей способом, вам довелося б присвятити весь сайдбар під одні архіви (лише для того, щоб розкрити різні види структурування: архіви за датою, архіви рубрик, архіви (міток, авторські архіви і т.д.).
Нам потрібен якийсь посередник, якась сторінка, яка вітатиме відвідувача, пояснюватиме йому, що він знаходиться в архіві, і вказувати на той контент, яким він цікавиться, або пропонувати популярний контент.
Саме з цієї причини ми вирішили створити довільну сторінку архівів.
Як створити довільну сторінку архівів у WordPress
Ось те, що ми збираємось зробити. Наша довільна архівна сторінка буде заснована на спеціальному шаблоні сторінок. Цей шаблон дозволить нам зробити таке:
- Додати довільне повідомлення (може містити текст, зображення, форму реєстрації тощо – стандартний контент WordPress).
- Виводити 15 останніх записів (налаштовується)
- Відображати посилання на авторські архіви
- Показувати посилання на архіви по місяцях
- Мати додаткові області віджетів (щоб виводити такі речі, як популярний контент, рубрики, теги).
Зрештою, сторінка буде адаптивною, і її можна буде використовувати на будь-якому сайті.
Однак нам справді доведеться взяти за основу певну тему. Я скористався темою Zerif Lite. Зізнаюся, що це одна із наших власних тем. Тим не менш, це одна з 10 найпопулярніших тем, опублікованих торік у каталозі тем WordPress. Тому я сподіваюся, що ви скористаєтеся з нею.
І так, якщо вам не подобається тема, не треба лаятись. Ви можете використовувати підхід, представлений у статті з будь-якою іншою темою.
Починаємо з основного файлу
Найкраща модель для створення архівної сторінки – це файл page.php вашої поточної теми, на що є деякі причини:
- Його структура вже оптимізована для виведення довільного контенту у межах основного контентного блоку
- Це, мабуть, один із найпростіших шаблонів сторінок у структурі вашої теми
Тому скористаємося файлом page.php теми Zerif Lite. Я створю його копію і назву її tmpl_archives.php.
(Переконайтеся, що ви не назвали сторінку page-archives.php. Усі назви файлів, що починаються з «page-», будуть розглядатися як нові шаблони сторінок у межах основної ієрархії файлів WordPress тем. Саме з цієї причини ми використовували префікс tmpl_) .
Змінимо її на наступне:
Все, що робить цей рядок, це передає відповідний контентний файл для нашої сторінки архівів.
Ви можете видалити й інші елементи, які виглядають зайвими, з вашої архівної сторінки (як коментарі, наприклад), однак переконайтеся, що ви видалили всі елементи, які відносяться до HTML-структури. І, загалом, не бійтеся експериментувати. Зрештою, якщо щось раптом перестане працювати, ви завжди можете повернутися до попереднього коду та легко провести його налагодження.
Крім того, не забувайте про стандартний коментар - опис шаблону, - який повинен знаходитися на самому початку вашого файлу (у нашому випадку, у файлі tmpl_archives.php):
Зрештою, ми залишимося з наступною структурою (деякі елементи видалені з неї для зручності):
У цьому файлі нам потрібно буде видалити все зайве, залишивши лише структурні елементи, а також виклики базових функцій WordPress:
Коментар-заповнювач у самій середині коду – те, куди ми потім вставимо наші довільні елементи.
Додаємо довільне вітання
Про це вже подбав сам WordPress. Нам достатньо вставити наступний рядок:
Додаємо нові області віджетів
Давайте налаштуємо нові області віджетів WordPress, використовуючи стандартний процес. Ми зробимо це за допомогою додаткового файлу функцій, щоб зберегти речі реюзабельними від теми до теми. Ми створимо новий файл, archives-page-functions.php, помістивши його в основний каталог теми, а також зареєструємо дві нові області віджетів:
If(!function_exists("archives_page_widgets_init")) : function archives_page_widgets_init() ( /* First archive page widget, відтворений на LEFT. */ register_sidebar(array("name" => __("Archives page widget) -lite"), "description" => __("Цей widget буде показано на лівій стороні вашої архівної сторінки.", "zerif-lite"), "id" => "archives-left", "before_widget" => "
", "before_title" => "", "after_title" => "
",)); /* Second archive page widget, displayed to the RIGHT. */ register_sidebar(array("name" => __("Archives page widget RIGHT", "zerif-lite"), "description" => __ ("Цей widget буде показано на правій стороні вашої архівної сторінки.", "zerif-lite"), "id" => "archives-right", "before_widget" => " ", "before_title" => "", "after_title" => "
",));) endif; add_action("widgets_init", "archives_page_widgets_init");If(!function_exists("archives_page_styles")) : function archives_page_styles() ( if(is_page_template("tmpl_archives.php")) ( wp_enqueue_style("archives-page-style", get_template-page-directory_uri). css"); // standard way of adding style sheets in WP. ) ) endif; add_action("wp_enqueue_scripts", "archives_page_styles");
Це умовна операція постановки у чергу. Вона працюватиме лише в тому випадку, якщо відвідувач переглядає архівну сторінку.
Потрібно не забути включити наш новий файл archives-page-functions.php шляхом додавання наступного рядка до кінця файлу functions.php поточної теми:
Require get_template_directory() . "/archives-page-functions.php";
Нарешті новий блок, який ми будемо використовувати в нашому основному файлі content-tmpl_archives.php, досить простий. Розмістіть наступний код під викликом the_content();:
Все, що нам тепер залишиться - це подбати про єдино відсутній файл, archives-page-style.css. Однак давайте залишимо його на потім, оскільки ми будемо використовувати його як сховище всіх стилів нашої довільної архівної сторінки, у тому числі і для віджетів.
Виведення останніх 15 записів
Для цього нам потрібно провести деяке ручне кодування PHP. Навіть враховуючи те, що виведення записів можна реалізувати за допомогою різноманітних віджетів, давайте уникнемо одноманітності і поринемо в написання коду, щоб продемонструвати більше різних можливостей.
Ви, мабуть, запитаєте, чому саме 15 записів? Не знаю, просто взяв це число зі стелі. Давайте зробимо його за допомогою довільних полів.
Ось що ми зробимо:
- Задаємо кількість записів через довільне поле archived-posts-no.
- Якщо число не є коректним, шаблон буде використовуватись стандартне значення в останніх 15 записів.
Нижче наведено код, який робить це. Помістіть його під попередньою секцією у файлі content-tmpl_archives.php, який обробляє нові області віджетів.
ID, "archived-posts-no", true)); /* Here, we"re making sure that the number fetched is reasonable. In case it"s higher than 200 or lower than 2, we"re just resetting it to the default value of 15. */ if($how_many_last_posts ||$how_many_last_posts< 2) $how_many_last_posts = 15; $my_query = new WP_Query("post_type=post&nopaging=1"); if($my_query->have_posts()) ( echo "
"; echo"
- $counter = 1; while($my_query->have_posts() && $counter<= $how_many_last_posts) {
$my_query->the_post(); ?>
- ">
Все, що робить цей код – це отримує значення довільного поля, задає кількість записів, що виводяться, після чого вибирає ці записи з бази даних, використовуючи WP_Query();. Також я використовую деякі іконки Font Awesome, щоб додати даному блоку певний шарм.
Виведення посилань на авторські архіви
Цей розділ корисний лише в тому випадку, якщо ви працюєте з блогом із численними авторами. Пропустіть його, якщо у вас є один автор.
Ця функціональність може бути реалізована за допомогою простого блоку коду, який потрібно помістити до нашого файлу content-tmpl_archives.php (під попереднім блоком):
Our Authors
Ми перейдемо до стилів за кілька хвилин. На даний момент зверніть увагу на те, що все робиться за допомогою виклику функції wp_list_authors().
Виведення посилань на архіви по місяцях
Я додав цей елемент у кінець, оскільки це не найкорисніший компонент з погляду читачів. Однак його важливо мати на архівній сторінці, щоб вам не довелося використовувати віджети для виведення архівів по місяцях в інших місцях сайту.
Ось, як це виглядатиме у файлі content-tmpl_archives.php:
By Month
У цьому випадку ми виведемо це у вигляді окремого абзацу із записами, розділеними прямим слешем (|).
Повний шаблон архівної сторінки
Погляньмо на повний файл content-tmpl_archives.php, який є нашим основним файлом для виведення довільного архіву:
Last ".$how_many_last_posts." Posts
"; echo" $counter = 1; while($my_query->have_posts() && $counter<= $how_many_last_posts) {
$my_query->the_post(); ?>
Our Authors
By Month
Таблиця стилів
Зрештою, давайте подивимося на таблицю стилів. Ось як виглядає файл archives-page-style.css:
Archives-widget-left ( float: left; width: 50%; ) .archives-widget-right ( float: left; padding-left: 4%; width: 46%; ) .archives-latest-section ( ) .archives -latest-section ol ( font-style: italic; font-size: 20px; padding: 10px 0; ) .archives-latest-section ol li ( padding-left: 8px; ) .archives-authors-section ( ) .archives -authors-section ul ( list-style: none; text-align: center; border-top: 1px dotted #888; border-bottom: 1px dotted #888; padding: 10px 0; font-size: 20px; margin: 0 0 20px 0; . ext-align: центр; word-spacing: 5px; .archives-by-month-section p ( border-top: 1px dotted #888; by-month-section pa (text-decoration:none; ) @media only screen and (max-width: 600px) ( .archives-widget-left ( width: 100%; ) .archives-widget-right ( width: 100 %; )
В основному стилі стосуються шрифтів та кількох структурних елементів, за винятком пари вирівнювань, а також блоку адаптивного дизайну наприкінці.
Давайте подивимося, як це буде на практиці. Ось сайт, який має масу контенту в архіві:
Як інтегрувати цей шаблон у будь-яку тему
Довільна сторінка архівів, яку ми створили тут, представлена на тему Zerif Lite, яка є в офіційному каталозі WordPress. Однак, як я вже казав, вона може використовуватись разом із будь-якою темою. Ось як це зробити:
- Беремо файли archives-page-style.css та archives-page-functions.php, які ми створили в посібнику, після чого поміщаємо їх у головний каталог теми.
- Редагуємо теми functions.php і додаємо наступний рядок в самий кінець: require get_template_directory() . '/archives-page-functions.php';
- Беремо файл page.php теми, робимо його копію, перейменовуємо її, змінюємо виклик функції get_template_part() на get_template_part('content', 'tmpl_archives');, після чого додаємо описовий коментар на початок: /* Template Name: Archive Page Custom */.
- Беремо файл content-page.php вашої теми, робимо його копію, перейменовуємо його в content-tmpl_archives.php, і додаємо до нього всі довільні блоки, які ми створили в посібнику, одразу під викликом функції the_content();.
- Тестуємо та насолоджуємося.
Ось як це виглядатиме у стандартній темі Twenty Fifteen:
Зрозуміло, що творцям шаблонів простіше стандартними функціями та тегами шаблонів WordPress вивести стандартні види всіх сторінок сайту, але це створює одноманітність зовнішнього вигляду та відчуття переходу на ті самі сторінки сайту.
Відразу покажу, що отримаємо в результаті.
Вигляд архівів wordpress: архів рубрик до зміни
Архів рубрик з прибраними мініатюрами та посиланням докладніше.
Важливо!Так як це завдання вирішується зміною коду шаблону, то перед роботами робимо (базу даних + файли сайту). У додатку, робимо дві копії робочого шаблону, одну для редагування, другу для відновлення неправильної редагування.
Змінюємо зовнішній вигляд архівів WordPress
Щоб змінити вигляд архівів WordPress, потрібно знайти, вірніше, визначити, який файл у вашому робочому шаблоні виводить архіви. У більшості шаблонів усі архіви виводяться єдиним файлом, називається він (archive.php).
Повторююсь, для безпеки втратити сайт, не використовуємо редактор в адміністративній панелі сайту, а керуємо заздалегідь зроблені резервні копії файлів шаблону.
У текстовому редакторі (типу Notepad++) відкриваємо файл archive.php і починаємо редагування. У файлі archive.php (наприкінці файлу) шукаємо функцію, що виводить блог архіву:
Ім'я - це ім'я файлу, який використовується для виведення блогу архівів.
Перша ідея виконання завдання проста: нам потрібно поміняти код файлу архіву (content.php), а саме, прибрати в ньому кілька функцій, і тим самим змінити зовнішній вигляд всіх архівів сайту (рубрик, авторів, дат і т.д.).
Але виникає питання, якщо ми змінимо код файлу шаблону, він повернеться до попереднього стану після першого оновлення шаблону, нам це не потрібно. Тому, ми не редагуватимемо файл content.php, а копіюємо його і створюємо свій файл, під іншою назвою, наприклад content-cat.php і редагуємо його .
Шукаємо у файлі функцію, що виводить мініатюри. Функція виведення мініатюр буде вгорі. Забираємо виведення мініатюри.
абота прибираємо рядок з 'Read More', 'назва шаблону'.
Створений та відредагований файл content-cat.php зберігаємо та заливаємо до каталогу сайту до папки робочого шаблону. Цей файл з'явиться в адміністративній панелі сайту на вкладці Зовнішній вигляд→Редактор.
Переходимо до другого кроку. У файлі, який виводить архіви (archive.php), змінюємо назву файлу content на content-cat.
Зберігаємось і дивимося результат. Якщо це не так, система покаже помилку, файл помилки і рядок помилки. Для виправлення помилки, збережені резервні файли шаблону, повертаємо на місце і повторюємо все заново.
Порада.Якщо хочете почитати більше, про теги шаблонів і стандартні функції WordPress, зверніть увагу на цей сайт: https://wp-kama.ru . Це не реклама і навіть не посилання, цей сайт зрозуміліший, ніж офіційний сайт WordPress, у розділі тегів шаблонів та функцій.
У розвиток теми
На мою думку, тема анонсів на сайтах WordPress вимагає продовження. У найближчих постах проговорю теми: і .
WordPress Codex
Прихований текст
Функція the_post_thumbnail
Функція
the_post_thumbnail
Призначення
Функція the_post_thumbnail виводить html код картинки-мініатюри посту порожнє значення, якщо картинка відсутня.
Застосування
Цей тег шаблону, функція the_post_thumbnail, має використовуватись усередині
Використання
the_post_thumbnail(string|array $size = "post-thumbnail", string|array $attr = "")Джерело
Файл: wp-includes/post-thumbnail-template.php
Function the_post_thumbnail($size = "post-thumbnail", $attr = "") ( echo get_the_post_thumbnail(null, $size, $attr); )
Параметри
$size (рядок/масив)
Розмір мініатюри, яку необхідно отримати. Може бути рядком з умовними розмірами: thumbnail, medium, large, full або масив двох елементів (ширина і висота картинки): array(60, 60).
За замовчуванням: ‘post-thumbnail’, тобто розмір, який встановлюється для поточної теми функцією set_post_thumbnail_size()
$attr (рядок/масив)
Масив атрибутів, які потрібно додати одержуваному html тегу img (alt - альтернативна назва).
За замовчуванням:
приклад
" title= "_("permalink"), the_title_attribute("echo=0")); ?>"> !}get("layout", "imgwidth"), $SMTheme->get("layout", "imgheight")), array("class" => $SMTheme->get("layout","imgpos") . featured_image")); if (!is_single())( ?>Тут є найбільш важливі новини людей, які публікувалися в 2008 році на сайті.
Update (2016 рік): Added missing zip security fix
Вони повинні бути великим числом інших повідомлень і поступів без останніх альпійських, але тут є короткий перегляд з найбільших змін:
- (Documentation has been updated to the current state)
- ext / msql has been removed, while ext / ereg will now raise E_DEPRECATED notices
- ext/mhash has been replaced by ext/hash but full BC is maintained
- PHP now uses cc, як default compiler, instead of gcc
- Число кнопок bug fixes ext/pdo, ext/soap, stream layer among others
Неодноразово під дією зміни також вимагається в глибині випробування з існуючими пристосуваннями для того, щоб any backwards compatibility breaks є minimized.
Будуть love developers, designers, managers or anyone else with a interest in the PHP programming language to join us for what promises to be awesome event at are reasonable rate:
- Standard tickets: £60.00
- Early bird (until 8th November): £50.00
- Concessionary tickets: £35.00
* Confirmation with your company"s letter head
** With Student ID. Limited seating available
Природа цього alpha release is to encourage users to non actively participate in identifying bugs, but also in susuring that all new features or necessary backwards compatibility breaks noted in the documentation. Please report any findings to the or the.
Там буде дуже велика кількість інших повідомлень і Improvements, але вона є коротким переглядом most значних змін:
- (documentation maybe out dated)
- Addition of the , (phar is scheduled for some more work a head of alpha2), and extensions
- Optional cyclic garbage collection
- Optional support for MySQLnd replacement driver for libmysql
- Windows older than Windows 2000 (Windows 98, NT4, etc.) не supported anymore ()
- Нові syntax нюанси, обмежені GOTO, ternary short cut "?:"
Неодноразово під ходами зміни також вимагається в глибині випробувань з існуючими пристосуваннями для того, щоб any backwards compatibility breaks є minimized. Це є особливо важливим для користувачів, які потребують undocumented Zend engine multibyte support.
Наші top submitter Felix De Vliegher має насправді поміщені його останні submission himself since, спираючись на високу якість його підписів, він був більш віддаленим командним правом до PHP репозиторію. Ми не маємо backback з усіх учасників, але ми повинні вивчити кожну тему до blogу про їхнє життєдіяльність і передбачають нас з backback на те, щоб сприяти майбутнім явищам.
Now better late than never, here are the 10 winners of the promised elePHPant raffle sponsored by Nexen . Зауважте, що Felix вирішив, що я не маю на меті в raffle, тому що я можу скористатися ним, щоб отримати номер номера phphants at home.
- Eric Stewart
- Håvard Eide
- Marc Veldman
- Michelangelo van Dam
- Rein Velt
- Rob Young
- Sami Greenbury
- Sebastian Deutsch
- Sebastian Schürmann
- Stefan Koopmanschap
Вони будуть реалізувати Nexen з електронною поштою адреси вихованців, так що вони можуть налагодити отримати elePHPants shipped. Також для всіх людей, які можуть, ви можете продовжувати досліджувати тести на . А bit thank you to all participers and TestFest organizers! Без countless людей, які сприяли організації місцевих заходів, реалізовуючи infrastructure і submission reviewers, TestFest неодноразово не працює, як добре, як це. We will surely do similar events в майбутньому базується на величезному успіху TestFest 2008.
Security Enhancements and Fixes in PHP 5.2.6:
- Використовується можливий stack buffer overflow в FastCGI SAPI identified by Andrei Nigmatulin.
- Зменшений integer overflow in printf() identified by Maksymilian Aciemowicz.
- Знижена сфера безпеки detailed in CVE-2008-0599 identified by Ryan Permeh.
- Змінено на safe_mode bypass в URL identified by Maksymilian Arciemowicz.
- Достатньо адреси вповні multibyte chars inside escapeshellcmd() identified by Stefan Esser.
- Upgraded bundled PCRE to version 7.6
The Internet Archive offers over 15,000,000 freely downloadable books and texts. Там є також колекція того, що може бути borrowed anyone with a free сайт account.
Крім того, наш портативний Table Top Scanner може також бути виготовлений і використаний на сайті з libraries and archives. Докладніше більше про наш TT Scribe, please visit .
Since 2005, Internet Archive has collaborated and built digital collections with over 1,100 Library Institutionsі інші вмісту дизайнерів. Partnerships включає: , the and the . Ці колекції є digitized з різних типів, включаючи: , і широке різноманіття . Значні contributions have come from partners in North America ( and Libraries), and , що становлять більше 184 languages.
Веб-архів архівів обумовлює нашу глобальну громадськість до сприяння фізичним предметам, як добре, як оновлення цифрових матеріалів безпосередньо в Веб-архів. Якщо ви маєте цифрові елементи, які ви повинні отримати до Інтернет-архіву, дізнатися про новий елемент, використовуючи uploader interface. Натисніть тут, щоб скористатися конкретними творчими літерами Creative Creative Commons license до комунікації, як матеріали можуть бути використані.
Для donation of physical books or items, please contact info@сайт
Free to read, download, print, and enjoy. Деякий має обмеження на bulk re-use і комерційної use, please see the collection or the sponsor of a book. Для забезпечення близького-необмеженого доступу до цих повідомлень, ми знаємо, що вказує широкі способи використання текстів у нових контекстах людей, які не можуть бути використані для них.
Коли потрібно швидко викачати вихідні дані сайту з сервера, навіть відносно швидкий SSH тонель не дає потрібної швидкості. І чекати доводиться дуже довго. А ще багато хостинг-провайдерів не надають цього доступу, а змушують задовольнятися FTP, який у рази повільніший.
Особисто для себе я визначив вихід. На сервер закачується маленький скрипт і запускається. Через деякий час отримуємо архів із усіма вихідними джерелами. А один файл, навіть по старому FTP коливається набагато швидше, ніж сотня дрібних.
Раніше на сторінках цього блогу бібліотека zipArchive. Однак тоді йшлося про розпакування архіву.
Для початку нам потрібно буде дізнатися, чи є на сервері підтримка zipArchive. Ця популярна бібліотека встановлена на переважній кількості хостингів.
Бібліотека жорстко обмежена параметрами php та сервера. Величезні бази та банки фотографій заархівувати не вдасться. Навіть бази старої доброї програми 1С для бухгалтерії. Здавалося б у них мають бути лише текстові дані. Але немає.
Раджу використовувати бібліотеку лише при архівуванні відносно невеликих сайтів, з величезною кількістю дрібних файлів.
Перевіримо чи доступна робота з бібліотекою
If (!extension_loaded("zip")) ( return false; )
Якщо все гаразд, скрипт продовжить своє виконання далі.
Невеликий оффтоп для таких перевірок. Перевірки варто робити саме так, уникаючи великих конструкцій із вкладеними дужками. Так код буде більш атомарним, і легко піддаватиметься налагодженню. Порівняйте
If(a==b)( if(c==d)( if(e==f)( echo "Всі умови спрацювали"; )else echo "e<>f"; )else echo "c<>d"; )else echo "a<>b;
і такий код
If(a!=b) exit("a<>b); if(c!=d) exit("c<>d); if(e!=f) exit("e<>f); echo "Всі умови спрацювали";
Код приємніший і не розростається на великі вкладені конструкції.
Вибачте за оффтоп, але хотілося поділитися цією знахідкою.
Тепер створимо об'єкт та архів.
$zip = новий ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) ( return false; )
де $destination – це повний шлях до архіву. Якщо архів вже створений, файли будуть до нього записуватися.
$zip->addEmptyDir(str_replace($source . "/", "", $file . "/")));
де $source це повний шлях до нашої категорії (яку ми спочатку архівували), $file - це повний шлях до поточної папки. Це зроблено у тому, щоб у архіві був повних шляхів, лише відносні.
Додавання файлу працює схожим чином, але спочатку потрібно прочитати його в рядок.
$zip->addFromString(str_replace($source . "/", "", $file), file_get_contents($file));
Наприкінці треба закрити архів.
Return $zip->close();
Як пробігти всі файли та піддиректорії у папці, думаю пояснювати не треба. Погуглить, щось на зразок Рекурсивний обхід папок на php
Мені підійшов такий варіант
Function Zip($source, $destination)( if (!extension_loaded("zip") || !file_exists($source)) ( return false; ) $zip = new ZipArchive(); if (!$zip->open( $destination, ZIPARCHIVE::CREATE)) ( return false; ) $source = str_replace("\\", "/", realpath($source)); if (is_dir($source) === true)( $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); and ".." folders if(in_array(substr($file, strrpos($file, "/")+1), array(".", ".."))) continue; );$file = str_replace("\\", "/", $file); , $file . "/")); file)); ) ) )else if (is_file($source) === true)( $zip->addFromString(basename($source), file_get_contents($source)); ) return $zip->close(); )