Как уменьшить размер php файла

Обновлено: 06.07.2024

Я ищу php-скрипт или класс, который может минимизировать html-вывод моей php-страницы, как это делает скорость страницы google.

Как я могу это сделать?

Однострочный текст на основе ответа @RakeshS: ob_start(function($b)); @FranciscoPresencia Это действительно плохой поступок. Вы нарушаете теги сценария, предварительные теги и т. Д. Это правда, как отмечалось в его комментариях к ответу, они не работают с тегами <pre> или, <code> поскольку им нужны пробелы для правильной структуры. Однако <script> обычно он должен быть внешним или встроенным, но с ; строгим использованием, чтобы он также работал. Какие еще теги могут нарушить @Brad? Я не мог думать о других. Однако я должен был добавить быстрый и грязный путь до моего предыдущего комментария.

CSS и Javascript

Скажите Apache доставлять HTML с помощью GZip - это обычно уменьшает размер ответа примерно на 70%. (Если вы используете Apache, модуль настройки gzip зависит от вашей версии: Apache 1.3 использует mod_gzip, а Apache 2.x использует mod_deflate.)

Принятие кодировки: gzip, deflate

Кодирование содержимого: gzip

Используйте следующий фрагмент, чтобы удалить пробелы из HTML с помощью буфера ob_start:

Это хорошая функция, но будьте осторожны, если вы используете теги PRE , иногда там удаляются новые строки. Где должен быть этот код, вверху или внизу вашего скрипта? Это также нарушает встроенный JavaScript (то есть в <script> тегах), который не находится ; в конце каждого оператора или имеет комментарии, которые используются // это удалит пробелы из textarea, pre, input, img, также это нарушит встроенные javascripts. если кто-то не счастлив использовать громоздкий класс с DOM, анализируя это решение на основе регулярного выражения, отлично работает

Включите gzip, если хотите, чтобы это было правильно. Вы также можете сделать что-то вроде этого:

Это удаляет около 30% размера страницы, превращая ваш html в одну строку, без вкладок, без новых строк, без комментариев. Пробег может отличаться

И то, и другое снизит количество необходимых байтов еще больше. на самом деле выполнение обоих аналогично использованию gzip, на странице 700 КБ gzip уменьшит его примерно до 400 КБ, а preg_replace () около 450 КБ (все в зависимости от содержимого), оба будут как 399 КБ, поскольку gzip удаляет пробелы одинаково, а затем сжимает его Это может быть потенциально опасно, так как при этом также удаляются условные обозначения IE . - вам нужно будет изменить его на /<!--(?![if).*?-->/ Не работает, удаляю лишнее, испортил код. Раньше это было действительным W3C, а после этого нет. К сожалению, он также нарушает код Javascript, например, для создания более сложных реализаций Google Maps - именно для этого мне понадобится такая функция.

У всех preg_replace() вышеперечисленных решений есть проблемы с однострочными комментариями, условными комментариями и другими ловушками. Я бы рекомендовал воспользоваться хорошо протестированным проектом Minify, а не создавать собственное регулярное выражение с нуля.

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

Я пробовал, не работает. В моем файле php есть css между тегами <style> и javascript, встроенный с php между тегами <script>, где вы размещаете этот код? последний в нижнем колонтитуле или заголовке? @francesco Это должен быть самый первый фрагмент кода на вашей странице.

Я пробовал несколько минификаторов, и они либо удаляют слишком мало, либо слишком много.

Этот код удаляет лишние пустые места и необязательные HTML-теги (завершающие). Кроме того, он играет осторожно и не удаляет ничего, что потенциально может нарушить работу HTML, JS или CSS.

Также в коде показано, как это сделать в Zend Framework:

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

Вот мои результаты (загрузка через сеть 3G):

Да, я согласен с тем, что это кажется бессмысленным, но он может принести вам один или два драгоценных балла в скорости страницы для Google, что имеет отношение к вашему рейтингу в Google. Ваш код идеально подходит для удаления ненужных пробелов. Спасибо :-) это отлично работает, были проблемы с = "/", поэтому я взял / из '

([\ r \ n \ t])? ([a-zA-Z0-9] +) = "([a-zA -Z0-9 _ / \\ -] +) "([\ r \ n \ t])?

S '=>' $ 1 $ 2 = $ 3 $ 4 ', // $ 1 и $ 4 вставляют первый символ пробела, найденный перед / после атрибута

Что ж, так получилось, что я не хочу удалять пробелы, чтобы ускорить процесс, а скорее потому, что таким должен быть HTML , чтобы что-то не облажалось полностью, например, встроенные блочные элементы, но я также ищу один способный игнорирования вещей, которые должны иметь один пробел до или после (например, жирные элементы в текстовом блоке). Я обнаружил проблему с некоторыми материалами JQuery / Foundation . если я не закомментировал следующие строки: // удалить "пустые" строки, содержащие только символ конца блока JS; присоединиться к следующей строке (например, "> \ n> \ n </script>" -> ">> </script>" // '/> [\ r \ n \ t] + / s' => '> », // '/> [\ г \ п \ т] + [\ г \ п \ т] + / с' => '>,', Если вы используете кеширование на стороне сервера (для меня Smarty V3), min + gzip - хорошее решение, за исключением первого вызова. Так что, если после 15-го звонка, будет интересно по серверному времени. rule = 40x15 = (30x15 + 150) Но для второго звонка посетителю уже будет быстрее.

Эта работа для меня.

Это удалило пробелы, которые не были удалены принятым ответом. 👏 Спасибо! На мой взгляд, лучший ответ, это отлично работает для меня . Спасибо

Создайте файл PHP вне корня вашего документа. Если корень вашего документа

создайте файл с именем minify.php на один уровень выше него

Скопируйте и вставьте в него следующий код PHP

Сохраните файл minify.php и откройте файл php.ini. Если это выделенный сервер / VPS, найдите следующую опцию, добавьте ее на общий хостинг с настраиваемым php.ini.

Его можно установить как модуль PHP, и он (правильно и безопасно) удалит пробелы и все прочие неприятности, в то же время выводя совершенно корректную разметку HTML / XHTML. Он также очистит ваш код, что может быть как отличным, так и ужасным, в зависимости от того, насколько вы хороши в написании правильного кода в первую очередь ;-)

Кроме того, вы можете сжать выходные данные, используя следующий код в начале вашего файла:

проблема в том, что сайт будет размещен в общем доступе, и у меня не будет доступа для установки таких модулей. Скорее всего, он уже будет установлен. Проверить phpinfo() . По крайней мере zlib должен быть установлен, чтобы вы могли использовать ob_gzhandler . я уже пользуюсь if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); , разве это не то же самое? Да, вам действительно не нужна эта else ob_start() часть, ни проверка gzip . ob_gzhandler определяет, поддерживает ли браузер какой-либо метод сжатия внутри. Достаточно просто иметь ob_start('ob_gzhandler'); .

Прежде всего, gzip может помочь вам больше, чем Html Minifier.

Во-вторых: с помощью gzip + Html Minification вы можете значительно уменьшить размер файла .

Вы можете получить его через композитор: composer require arjanschouten/htmlminifier dev-master .

Есть поставщик услуг Laravel. Если вы не используете Laravel, вы можете использовать его из PHP.

Как видите, здесь можно многое расширить и передать различные параметры. Проверьте readme, чтобы увидеть все доступные параметры.

Этот HtmlMinifier полный и безопасный. Для процесса минификации требуется 3 шага:

  1. Временная замена критически важного содержимого заполнителем.
  2. Запустите стратегии минификации.
  3. Восстановите исходный контент.

Четких тестов на данный момент не создается. Однако минификатор может уменьшить размер страницы на 5-25% в зависимости от вашей разметки!

Если вы хотите добавить вы будете собственные стратегии , которые вы можете использовать addPlaceholder и те addMinifier методы.

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

Введение

Чтобы дать вам быстрый обзор того, чего мы пытаемся достичь с помощью нашего класса, он должен быть:

  • Прост в использовании
  • Независимый от формата. То есть, открывает, изменяет размер и сохраняет несколько различных форматов изображений.
  • Интеллектуальный размер - отсутствие искажения изображения!

Примечание. Это не учебное пособие о том, как создавать классы и объекты, и, если это вы сами умеете, нет необходимости следовать этому руководству.

Нам есть, чем заняться - Давайте начнём.

Шаг 1 Подготовка

Начнём с простого. В рабочей папке создайте два файла: один называется index.php, другой resize-class.php




Шаг 2 Вызов объекта

Чтобы дать вам представление о том, чего мы пытаемся достичь, начнём с кодирования вызовов, которые мы будем использовать для изменения размеров изображений. Откройте файл index.php и добавьте следующий код.

Как вы можете видеть, в наших действиях есть логика. Мы открываем файл изображения, устанавливаем размеры, до которых мы хотим изменить изображение и тип изменения размера.
Затем мы сохраняем изображение, выбираем нужный формат и качество изображения. Сохраните из закройте файл index.php.

Из вышеприведённого кода видно, что мы открываем файл jpg, но сохраняем gif. Помните, это насчёт пластичности.

Шаг 3 Скелет класса

Объектно-ориентированное программирование (ООП) делает эту возможность легкодоступной. Думайте о классе как о шаблоне; вы можете инкапсулировать данные - ещё один термин, который на самом деле означает скрытие данных. Мы можем снова и снова использовать этот класс без необходимости переписывать какой-либо код изменения размера - вам нужно только вызвать соответствующие методы, как мы делали на втором шаге. Когда шаблон создан, мы создаём экземпляры этого шаблона, называемые объектами.

«Функция конструирования, известная как конструктор, - это специальный метод класса, который вызывается классом при создании нового объекта».

Давайте начнём создавать наш класс resize. Откройте файл resize-class.php. Ниже приведена базовая структура скелета классов, которую я назвал 'resize'. Обратите внимание на строку с именем переменной класса; здесь мы начнём добавлять наши важные переменные класса позже.

Функция конструирования, известная как конструктор, является специальным методом класса (термин «метод» аналогичен функции, однако при разговоре о классах и объектах часто используется термин «метод»), который вызывается классом при создании нового объекта. Это делает возможным для нас некоторую инициализацию, что мы и сделаем в следующем шаге.

Обратите внимание: это двойное подчеркивание для метода construct.

Шаг 4 Конструктор

Мы собираемся изменить метод конструктора. Во-первых, мы передадим имя файла (и путь) нашего изображения, которое нужно изменить. Назовём эту переменную $ fileName.

Нам нужно открыть файл, переданный с помощью PHP (более конкретно, PHP GD Library), чтобы PHP мог читать изображение. Мы делаем это с помощью настраиваемого метода 'openImage'. Я расскажу, как этот метод
работает, но пока нам нужно сохранить результат как переменную класса. Переменная класса - это просто переменная, но она специфична для этого класса. Помните комментарий переменной класса, о котором я упоминал ранее? Добавьте 'image' как приватную переменную, набрав 'private $ image;'. Установив переменную как 'Private', вы устанавливаете область видимости этой переменной, поэтому доступ к ней может получить только класс. С этого момента мы можем сделать вызов нашему открытому изображению, известному как ресурс, который мы будем делать позже, когда изменим размер.

Пока мы на нём, давайте сохраним высоту и ширину изображения. У меня такое чувство, что они пригодятся позже.

Теперь у вас должно получиться следующее.

Методы imagesx и imagesy встроены в функции, которые являются частью библиотеки GD. Они, соответственно, получают ширину и высоту вашего изображения.

Шаг 5 Открытие изображения

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

Мы переходим в наш файл, чтобы изменить размер и вернуть этот файловый ресурс.

Шаг 6 Как изменить размер

Здесь случилась любовь. Этот шаг является всего лишь объяснением того, что мы собираемся делать - поэтому здесь нет домашнего задания. На следующем шаге мы создадим public метод, который вызовем, чтобы выполнить изменение размера; поэтому имеет смысл задать ширину и высоту, а также информацию о том, как мы хотим изменить размер изображения. Давайте поговорим об этом минутку. Должны быть сценарии, в которых вы хотели бы изменить размер изображения до нужного. Отлично, давайте включим это. Но будут моменты, когда вам нужно изменить размеры сотен изображений, и каждое изображение имеет другое соотношение сторон - подумайте о портретных изображениях. Изменение их размеров до точного приведёт к серьёзным искажениям. Если мы посмотрим на варианты, чтобы предотвратить искажения, мы можем:

  1. Изменить размер как можно ближе к новым размерам изображения, сохраняя пропорции.
  2. Изменить размер как можно ближе к новым размерам изображения и обрезать остаток.

Оба варианта жизнеспособны, в зависимости от ваших потребностей.

Ага. Мы попытаемся обработать все вышеперечисленное. В итоге мы собираемся привести опции к:

Шаг 7 Изменение размера. Давай сделаем это!

Метод resize состоит из двух частей. Первая заключается в том, чтобы получить оптимальную ширину и высоту для нашего нового изображения, создав некоторые специальные методы и, конечно, передав параметр «изменить размер», как описано выше. Ширина и высота возвращаются как массив и устанавливаются в соответствующие переменные. Не стесняйтесь 'pass as reference', но я не большой поклонник этого.

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

Мы также сохраняем вывод метода imagecreatetruecolor (новое истинное цветное изображение) в качестве переменной класса. Добавить 'private $imageResized;' с другими переменными класса.

Изменение размера выполняется модулем PHP, известным как Библиотека GD. Многие из методов, которые мы используем, предоставляются этой библиотекой.

Шаг 8 Дерево решений

Чем больше работы вы сделаете сейчас, тем меньше нужно будет делать, когда придётся менять размер. Этот метод выбирает маршрут с целью получить оптимальную ширину и высоту в зависимости от ваших параметров. Он вызовет соответствующий метод, который мы создадим на следующем шаге.

Шаг 9 Оптимальные размеры

Мы уже обсуждали, что делают эти четыре метода. Они просто математики, которые рассчитывают нам лучшую форму.

Шаг 10 Обрезка

Если вы выбрали обрезку - то есть опцию crop, то у вас есть ещё один маленький шаг. Мы собираемся обрезать изображение от
центра. Обрезка - очень похожа на процесс изменения размера, но с передачей нескольких параметров размера.

Шаг 11 Сохранение изображения

Мы добрались; почти готово. Пришло время сохранить изображение. Мы проходим путь и качество изображения, которое нам нужно, в пределах от 0 до 100, 100 - самое лучшее, и вызываем соответствующий метод. Пара слов о качестве изображения: JPG использует шкалу от 0 до 100, из которых 100 являются лучшим. Изображения GIF не имеют настройки качества изображения. PNG делают, но они используют шкалу 0-9, 0 является лучшей. Это нехорошо, поскольку мы можем не помнить об этом каждый раз, когда захотим сохранить изображение. Применим немного магии, чтобы стандартизировать всё.

Теперь самое подходящее время уничтожить ресурс изображения, чтобы освободить часть памяти. Если вы будете пользоваться этим в производстве, может быть хорошей идеей захватить и вернуть результат сохранённого изображения.

Заключение

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

В этой обучающей статье мы обсудим изменение размера изображения в PHP.

Загрузите изображение перед изменением размера

Прежде чем изменять размер изображения, мы должны сначала загрузить его как ресурс изображения в скрипте. Это не то же самое, что использование таких функций, как file_get_contents() для получения содержимого файла изображения. Чтобы загрузить файл, нам нужно использовать такие функции, как imagecreatefromjpeg() , imagecreatefrompng() и imagecreatefromgif() , среди других. В зависимости от типа изображения, размер которого мы будем изменять, мы будем соответственно использовать другую функцию.

getimagesize () в PHP

После загрузки изображения мы используем getimagesize() для вычисления ширины, высоты и типа входного изображения. Эта функция возвращает список элементов, где ширина и высота изображения хранятся с индексами 0 и 1 соответственно, а константы IMAGETYPE_XXX хранятся с индексом 2. Мы будем использовать значение этой возвращенной константы, чтобы выяснить, что тип изображения и функции.

Оба являются одними и теми же изображениями, потому что в этом разделе мы загружаем только изображение и вычисляем размер исходного изображения.

imagecopyresized() в PHP

imagecopyresized() берет продолговатую область шириной src_w и высотой src_h из src_image в позиции (src_x, src_y) и помещает ее в прямоугольную область целевого изображения в позиции (dst_x, dst_y) . Это встроенная функция PHP.

Он возвращает логическое значение ИСТИНА в случае успеха или ЛОЖЬ в случае неудачи.

imagecopyresampled() в PHP

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

Он работает аналогично функции imagecopyresized() с дополнительным преимуществом выборки изображения в дополнение к его изменению размера.

Примечание: мы также можем выполнить пропорциональную передискретизацию, что возможно, задав ширину и высоту dest_image вместо процента.

imagescale () в PHP

Вы указываете размер, а не определяете ширину или высоту последнего изображения. Если вы хотите, чтобы размер нового изображения составлял половину от первого изображения, установите размер 0,8. Вот пример кода для масштабирования изображения с заданным коэффициентом при сохранении соотношения.

Умножаем исходную ширину и высоту изображения на указанный масштаб в функции scale image() .

Помимо этого, PHP имеет встроенную функцию, которая позволяет масштабировать изображение до указанной ширины и высоты.

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

Основные параметры

Итак что влияет на размеры файлов которые разрещены к загрузке в PHP.

upload_max_filesize – Максимальный размер загружаемого файла

Измеряется в мегабайтах или гигабайтах. Дефолтное значение: “2M”

max_file_uploads – Максимальное количество одновременных загрузок

Измеряется в цифровом количестве файлов. Дефолтное значение: “20”

post_max_size – Максимальный размер отправляемого через POST-запрос файла (Должен быть больше upload_max_filesize).

Измеряется в мегабайтах или гигабайтах. Дефолтное значение: “8M”

max_execution_time – Время в течении которого скрипт должен полностью завершить своё исполнение. Для отмены ограничений можно присвоить 0.

Измеряется в секундах или минутах. Дефолтное значение: “30”

max_input_time – Время в течении которого скрипт, должен получить и обработать все данные из POST и GET запросов.

Измеряется в секундах.

memory_limit – Ограничение на выделяемую для исполнения одного скрипта память. Для отмены ограничений, поставьте -1. Должен быть больше post_max_size.

Измеряется в мегабайтах или гигабайтах. Дефолтное значение: “128M”

Как изменить опции настройки PHP

Изменить возможно разными способами, я покажу как это сделать.

1. PHP.INI

Файл php.ini является основным файлом где хранятся настройки исполнения php скриптов. Пользовательский файл настроек обычно находится на несколько уровней выше папки www сайта. Иногда помещён в папку php-bin. Применение: опция = значение

Пример настройки добавленной в файл php.ini:

post_max_size = 512M
upload_max_filesize = 512M
max_execution_time = 3600
max_input_time = 1800

2. .HTACCESS

Файл .htaccess (или htaccess.txt) является содержанием настроек поведения сервера и обработки файлов определённого сайта. Размещается в корне сайта.

Применение: php_value опция значение

php_value post_max_size 512M
php_value upload_max_filesize 512M
php_value max_execution_time 3600
php_value max_input_time 1800

3. Любой PHP файл

Помимо вышеописанных способов, можно сделать изменение настроек к любому PHP файлу.

Применение: ini_set(‘опция’, ‘значение’);

ini_set(‘post_max_size’, ‘512M’);
ini_set(‘upload_max_filesize’, ‘512M’);
ini_set(‘max_execution_time’, ‘3600’);
ini_set(‘max_input_time’, ‘1800’);

* Необходимо учесть, что некоторые хостеры, блокируют изменение данных опций и после применения необходимо связаться с своим хостером, чтобы убедиться, что это работает.

Читайте также: