Создание ZIP-архива на PHP. Внешний вид архивов WordPress по умолчанию В развитие темы

Here are the most important news items we have published in 2008 on сайт.


Update (December 6th): Added missing zip security fix

There have been a great number of other additions and improvements since the last alpha, but here is a short overview of the most important changes:

  • (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 as the default compiler, instead of gcc
  • A number of bug fixes to ext/pdo, ext/soap, the stream layer among others

Several under the hood changes also require in depth testing with existing applications to ensure that any backwards compatibility breaks are minimized.

We would love developers, designers, managers or anyone else with an interest in the PHP programming language to join us for what promises to be an awesome event at a very 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

THIS IS A DEVELOPMENT PREVIEW - DO NOT USE IT IN PRODUCTION!

The purpose of this alpha release is to encourage users to not only actively participate in identifying bugs, but also in ensuring that all new features or necessary backwards compatibility breaks are noted in the documentation. Please report any findings to the or the .

There have been a great number of other additions and improvements, but here is a short overview of the most important changes:

  • (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 the MySQLnd replacement driver for libmysql
  • Windows older than Windows 2000 (Windows 98, NT4, etc.) are not supported anymore ()
  • New syntax features like , limited GOTO, ternary short cut "?:"

Several under the hood changes also require in depth testing with existing applications to ensure that any backwards compatibility breaks are minimized. This is especially important for users that require the undocumented Zend engine multibyte support.

Our top submitter Felix De Vliegher has actually committed his last submissions himself since, based on the high quality of his submissions, he has been granted commit rights to the PHP repository. We have not heard back from all participants, but we encourage everybody to blog about their experience and provide us with feedback on how to improve future events.

Now better late than never, here are the 10 winners of the promised elePHPant raffle sponsored by Nexen . Note that Felix asked me not to include him in the raffle, since he is already herding quite a number of elePHPants 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

We will provide Nexen with the email addresses of the winners, so that they can arrange to get the elePHPants shipped. Also for those people wondering, you can continue to submit tests on the . A bit thank you to all participants and TestFest organizers! Without the countless people that helped organize local events, implement the infrastructure and submissions reviewers, the TestFest would have obviously not worked out as well as it has. We will surely do similar events in the future based on the big success of TestFest 2008.

Security Enhancements and Fixes in PHP 5.2.6:

  • Fixed possible stack buffer overflow in the FastCGI SAPI identified by Andrei Nigmatulin.
  • Fixed integer overflow in printf() identified by Maksymilian Aciemowicz.
  • Fixed security issue detailed in CVE-2008-0599 identified by Ryan Permeh.
  • Fixed a safe_mode bypass in cURL identified by Maksymilian Arciemowicz.
  • Properly address incomplete multibyte chars inside escapeshellcmd() identified by Stefan Esser.
  • Upgraded bundled PCRE to version 7.6

Когда нужно быстро выкачать исходники сайта с сервера, даже относительно быстрый 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 = new 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); foreach ($files as $file){ $file = str_replace("\\", "/", $file); // Ignore "." and ".." folders if(in_array(substr($file, strrpos($file, "/")+1), array(".", ".."))) continue; $file = realpath($file); $file = str_replace("\\", "/", $file); if (is_dir($file) === true){ $zip->addEmptyDir(str_replace($source . "/", "", $file . "/")); }else if (is_file($file) === true){ $zip->addFromString(str_replace($source . "/", "", $file), file_get_contents($file)); } } }else if (is_file($source) === true){ $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); }

Вчера на форуме у меня спросили про создание ZIP-архивов на PHP . Я немного подумал и понял, что это тема будет интересна большому числу людей, ведь ZIP-архивирование на PHP весьма популярная тема. И в этой статье я покажу пример, как создаётся ZIP-архив через PHP-скрипт .

Давайте я сразу приведу пример создания ZIP-архива , а потом его тщательно прокомментирую:

$zip = new ZipArchive(); //Создаём объект для работы с ZIP-архивами
$zip->open("archive.zip", ZIPARCHIVE::CREATE); //Открываем (создаём) архив archive.zip
$zip->addFile("index.php"); //Добавляем в архив файл index.php
$zip->addFile("styles/style.css"); //Добавляем в архив файл styles/style.css
$zip->close(); //Завершаем работу с архивом
?>

В результате выполнения данного скрипта появится ZIP-архив , у которого в корне будет лежать файл index.php , а также будет создана директория styles , в которой будет находиться файл style.css . Я думаю, что это всё очевидно и логично. А теперь комментирую, что мы с Вами делали:

  • Создали объект ZipArchive с помощью конструктора.
  • Создали архив с помощью метода open() объекта ZipArchive . Мы передали название архива (archive.zip ) и константу ZIPARCHIVE::CREATE , которая сообщает, если архива не существует, то его надо создать.
  • Метод addFile() добавляет в архив файлы. Сначала мы добавили файл "index.php ", который находится в одной директории со скриптом. Далее мы добавили файл style.css , так же указав к нему правильный путь относительно скрипта.
  • Метод close() завершает работу с архивом. Всегда его выполняйте, чтобы освободить ресурсы компьютера, а также избежать самых различных проблем, связанных с работой этого скрипта и других скриптов, которым необходим доступ к этому архиву.

Вот таким простым способом Вы можете создавать в автоматическом режиме ZIP-архивы с помощью PHP . В следующей статье мы с Вами разберём, как извлекать ZIP-архив через PHP .

The Internet Archive offers over 15,000,000 freely downloadable books and texts. There is also a collection of that may be borrowed by anyone with a free сайт account.

Alternatively, our portable Table Top Scanner can also be purchased and used on-site within libraries and archives. To read more about our TT Scribe, please visit .

Since 2005, the Internet Archive has collaborated and built digital collections with over 1,100 Library Institutions and other content providers. Partnerships include: , the and the . These collections are digitized from various mediatypes including: , and a wide variety of . Significant contributions have come from partners in North America ( and Libraries), and , representing more than 184 languages.


The Internet Archive encourages our global community to contribute physical items, as well as uploading digital materials directly to the Internet Archive. If you have digital items that you would like to add to the Internet Archive, please a new item using the uploader interface. Click here to apply the specific creative commons license Creative Commons license to communicate how the material can be used.

For donation of physical books or items, please contact info@сайт


Free to read, download, print, and enjoy. Some have restrictions on bulk re-use and commercial use, please see the collection or the sponsor of a book. By providing near-unrestricted access to these texts, we hope to encourage widespread use of texts in new contexts by people who might not have used them before.

Понятно, что создателям шаблонов проще стандартными функциями и тегами шаблонов 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()){ ?>
mob_info