Архив метки: PHP

Переход на PHP 7

Перевел сайт на новую версию PHP 7 и результат оказался крайне положительным, прирост производительности практически в 1.5 раза! Это не мало! Обработка запросов происходит быстрее, так же использование оперативной памяти снизилось на 17 мегабайт. Страница отдается ощутимо быстрее. Буду переводить остальные сайты на PHP 7.

Рекомендую всем совершить переход на новую версию. Сайты станут работать быстрее и ваш сервер сможет расслабится.

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

Часто приходится сталкиваться с проблемой превышения допустимого размера загружаемого файла, с помощью протокола прикладного уровня HTTP или защищенного аналога HTTPS, при попытке загрузить на сервер файл большого размера методами GET или POST, потому, что в настройках PHP точно указан какой максимальный размер файла можно загрузить через форму и он явно ниже того, который вы хотите загрузить.

Так же с подобной проблемой часто сталкиваются веб мастера при попытке «поднять» большую по объёму базу данных стандартными средствами программного обеспечения для работы с БД — phpMyAdmin в работе с локальным серверным набором Denwer. Обычно для подобных нужд используют дополнительные программные средства наподобие sypex dumper и ему подобных. Но ведь мы же хотим сделать через phpMyAdmin, поэтому придется немного поднастроить конфигурацию php.  Кстати все ваши изменения можно наглядно увидеть на вкладке ipmort в графе разрешённого размера файла БД. Обычно, по умолчанию, там написано 2 мб, после ваших действия эта цифра должна измениться автоматически.

Что бы это изменить делаем следующие действия.

Например если импортируется с phpmyadmin на денвере, то увеличить ограничения в php.ini. Находится он по следующему локальному адресу:

Z:\usr\local\php5\php.ini

найти

post_max_size = 2M

(вместо 2M может стоять другая цифра, поэтому ищите по названию параметра)
и заменить к примеру на

post_max_size = 2000M

(Это максимальный размер файла загружаемого на сервер методом POST, тут главное не переусердствовать)

найти

upload_max_filesize = 2M

и заменить на

upload_max_filesize = 2000M

(это максимальный размер загружаемого файла)

ну и лимит времени обработки скрипта тоже можно увеличить

max_execution_time иmax_input_time

например поставить

max_execution_time = 18000

(это максимально допустимое время выполнения скрипта, при работе с большими объёмами данных и на локальном хосте можно выставить и побольше)

max_input_time = 18000

(это время за которое PHP скрипт должен разобрать все входные данные, переданные запросами вроде POST или GET. Время измеряется от момента, когда сервером получены все данные, до момента, когда скрипт начинает выполняться. Не столь важная директива для целей преследуемых данной статьёй)

и памяти можно увеличить

memory_limit = 128M

(это максимальный выделяемый размер памяти для обработки скрипта. Если у вас «тяжелые» файлы или с ними надо сделать достаточно ресурсоемкие действия, например распаковать большой архив базы данных, то выставляйте размер больше).

и в конце всех действий просто перезагрузить веб сервер.

Или с командной строкой

Z:\usr\local\mysql5\bin\mysql_run_to_import_dumps.exe -uЮЗЕР -pПАРОЛЬ -hlocalhost --default-character-set=utf8 --force БАЗА < Z:\db_base_file.sql

Вот собственно и все не хитрые методы, которые помогут вам всячески увеличить допустимый размер загружаемого файла. Теперь импортировать базу данных размером более 100 мб через phpMyAdmin на локальном сервере не составит никакого труда.

Debian, LAMP (linux+apache+php+mysql). Размещаем свой первый сайт.

Данная статья является статьей цикла «Установка LAMP одной командой»

Сразу оговорюсь, что идеология всего последующего мануала рассчитана на то, что вы — единственный администратор сервера. Нет, конечно же, вы можете использовать такую конфигурацию с друзьями. Но не пытайтесь использовать её совместно с теми, кому вы не доверяете. Например, клиентами.
Идеология безопасности в данном случае построена на стандартных настройках вашего дистрибутива, которые могут не кореллироваться с идеологией криворуких PHP программистов.
Хотя, за пару лет использования такой схемы я не находил никаких проблем. Но в теории, при выполнении «тыщиусловий» они возникнуть могут.

В обмен на это мы получаем максимально беспроблемное решение в плане «а вот эта CMS тут работать будет или нет?». Ну то есть фактически, я не встречал ни единой проблемы с тем, чтобы что-то не заработало. Под эту конфигурацию пишут почти все PHPники (кроме PHPшников с большой и светлой кармой, пишуших под nginx+php_fpm).

Начнёмс. По условиям задачи — user — это вы. Сайт разместим в каталоге /home/user/site1.ru, где /home/user — домашний каталог пользователя. Сайт, как вы догадались, будет зваться site1.ru. Почему не /var/www ? Просто мне так удобнее. Да и вам будет проще.
Сайт использует CMS для php+mysql (joomla, drupal, wordpress, как примеры).
Вы уже создали все необходимые DNS записи и по «ping site1.ru» отзывается именно ваш сервер. А так же — по «ping www.site1.ru». Аналогично — для всех доменов, которые мы желаем сделать алиасами для нашего сайта.
Алиас — это дополнительный домен для сайта. Наш сайт будет открываться по site1.ru и по www.site1.ru
Так же, обращайте внимание на то, от имени какого пользователя я выполняю команды (user@ или root@)

Приступим. Создадим нужный нам каталог:
user@Debian:~$ mkdir -p /home/user/site1.ru
Теперь разместим в нём файлы нашего сайта любым удобным нам способом. Я обожаю делать вот так:
user@Debian:~$ cd && wget http://ftp.drupal.org/files/projects/drupal-6.17.tar.gz && tar -xfv drupal-6.17.tar.gz && rm -r site1.ru && mv drupal-6.17 site1.ru
Вы же — уже закачали файлы по FTP в site1.ru, пока я вводил эту команду, не так ли?
Теперь очень важная штука.
user@Debian:~$ cd && chown -R user:www-data site1.ru && chmod -R 750 site1.ru
Что мы сейчас сделали. Мы разрешили себе (user) право на чтение и запись в любые файлы каталога site1.ru, разрешили процессам Apache (веб-сервер) доступ на чтение ко всем файлам данного каталога и запретили чтение каталога всем остальным. Для чего? Чтобы ваш сосед по серверу не смог просмотреть файлы вашего сайта. А там обычно в открытом виде хранится пароль доступа к mysql.
Теперь нам следует внимательно ознакомиться с мануалом к CMSке и узнать, куда необходимо разрешить доступ на запись веб-серверу. Ну… условимся, что у CMSки есть каталог upload, доступ на запись к которому нужен всегда, и файл config.php, доступ к которому нужен на время установки. Выдадим нужные права:
user@Debian:~$ cd /home/user/site1 && chmod -R 770 upload
user@Debian:~$ cd /home/user/site1 && chmod 770 config.php
Всё ещё соблюдаем принцип «доступ к этим файлам должен иметь только владелец и веб-сервер». Третью цифру оставляем нулём, если CMS не требует обратного (есть CMSки, которые проверяют не возможность записи в каталог/файл а просто права на файл. Плохие CMSки)

Теперь создадим базу Mysql — http://debian.pro/99 — я тут уже всё подробно по этой теме описал.

А теперь, собственно, мы расскажем Апачу, что мы желаем разместить сайт.
Создадим и отредактируем файлик, который будет содержать информацию о нашем VirtualHost:
root@Debian:~$ nano /etc/apache2/sites-enabled/site1.ru
У вас откроется страшное окошко, в котором можно печатать.
Вам туда нужно вставить следующий текст (вставка в терминале, напоминаю, обычно, работает по ctrl+shift+v или по shift+insert):

<VirtualHost *:80>
DocumentRoot /home/user/site1.ru
ServerName site1.ru
ServerAlias www.site.ru
ServerAdmin [email protected]
</VirtualHost>

После этого жмём Ctrl+X, отвечаем на вопрос сохранять или нет Y и релоадим Апач:
root@Debian:~$ apache2ctl reload
или
root@Debian:~$ /etc/init.d/apache2 restart

Если вы всё сделали правильно и уже правильно работают ваши DNS серверы — по адресу http://site1.ru должен открыться ваш сайт (или инсталлятор CMSки)… ну а дальше вы знаете)
Ну и не забудьте убрать доступ на запись к тем файлам, запись в которые необходима только во время установки (config.php в нашем случае):
user@Debian:~$ cd /home/user/site1 && chmod 750 config.php

Вообще про виртуалхосты почитать можно тут — httpd.apache.org/docs/2.1/mod/core.html#virtualhost
Там много интересной информации, которая вам понадобится, если вы будете заниматься серверами с кучей сайтов (здесь много размышлений, в основном матом, слышится «нищеброды, не могут купить ispmanager»). А пока оно вам ни к чему.

Установка LAMP одной командой (linux+apache+php+mysql)

Lamp я ставлю одной командой:

Debian:~# aptitude update && aptitude upgrade && aptitude install apache2 php5 libapache2-mod-php5 mysql-server mysql-client php5-mysql phpmyadmin

По ходу установки у вас должны спросить пароль от mysql root’a и phpmyadmin, попросить указать установленные web-серверы, выбираем apache2 стрелочками, нажимаем пробел потом enter.

Перед выполнением этой команды в Ubuntu сделайте sudo su