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

Максимальный размер загружаемого файла через 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 на локальном сервере не составит никакого труда.

Перенос WordPress на другой домен

Очень часто спрашивают как перевести WordPress на другой домен. Я покажу как сделать это безопасно с помощью PHP-скрипта. И не забываем сделать резервную копию базы перед тем как начинать работать с ней!

1. Итак, скачиваем ZIP-архив последней версии с Github.

2. Зайдем в корневую папку сайта на сервере через FTP. Прямо в корне установки WordPress создаем «секретную» папку с любым именем. Обязательно сделайте имя как можно более сложным из букв разного регистра, цифр и символа «-». Такое имя необходимо для того, чтобы никто кроме вас не смог найти ее и воспользоваться скриптом — он не требует авторизации и любой пользователь, зашедший на страницу, сможет взаимодействовать с вашей базой данных.

3. Распакуем содержимое архива, скаченного на первом шаге, и загрузим в «секретную» директорию.

4. Откроем скрипт, который мы только что загрузили. Для этого откройте в браузере страницу example.org/replacer-x36D891EHY-/. Как можно догадаться, «replacer-x36D891EHY-» — это название секретной директории.

5. На открывшейся странице в поле «replace» необходимо указать свой старый домен (например, old-domain.ru), а в поле «with» новый домен (например, new-domain.com).

Галочку «use regex» снимаем. Данные в секции «database» должны автоматически заполниться при открытии страницы. В секции «tables» выбираем «all tables».

6. Секция «actions» содержит несколько кнопок для действий. Нас интересует кнопка «live run». Нажав на нее откроется диалоговое окно, в котором необходимо подтвердить запуск, нажав кнопку «Ок».

7. Начнется процесс поиска и замены домена. Не закрывайте страницу! Во время выполнения будут появляться результаты операции.

8. После успешной замены необходимо удалить «секретную» директорию со всем содержимым. Это можно сделать через FTP-клиент. Через кнопку «delete me» внизу страницы скрипт может не удалиться, поэтому надежнее сделать это через FTP-клиент.

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

Как сменить пароль MySQL root

Сервер работает отлично, вы не думаете о нем, но он о вас помнит и ваш пароль тоже. Но пароль то ваш не просто 112122, а что-то 3dk2dJl20. Да? Ну как его вспомнить если прошло много времени? Вот и у меня так же получилось. Пришлось вспоминать. Хорошо если у вас есть панель (ISPmanager, например) где можно поменять пароль. А что если у нас только root доступ к системе? Вот об этом я и сейчас расскажу.

Ситуация стандартная. Ничего особенного и диковинного. Можете записать на листик или в файл и как нужно, то ввести все эти команды автоматом. Только пароль не забудьте, а то придется начинать сначала 🙂

Начнем. Оставить mysql сервис.

service mysqld stop

Как получилось, то дальше запускаем сервер с параметром --skip-grant-tables

mysqld_safe --skip-grant-tables &

Вот теперь мы можем зайти в наш mysql с root-м без пароля!:

mysql -uroot mysql

Дальше вы увидите стандартную консоль mysql. Вот туда и вставим строки с указанием нового пароля. abcd замените на свой пароль:

UPDATE user SET password=PASSWORD("abcd") WHERE user="root"; 
 FLUSH PRIVILEGES;

Теперь ваш пароль к root-у Mysql будет abcd (или то, что вы поставили).
А теперь первый заход в mysql с новым паролем:

mysql -uroot -pabcd mysql

Всё 🙂

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 webmaster@site1.ru
</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