+2.26
5 читателей, 59 топиков

Восстановление базы данных ( *.frm *.MYD *.MYI )

Бывают всякие сутиации. В ноябре 2011 столкнулся с такой ситуацией: база sql утеряна, хостер выдает бэкап базы в файлах с расширениями *.frm *.MYD *.MYI

Как восстановить базу данных SQL из *.frm *.MYD *.MYI? Все, что ниже — я проделывал лично.

1. Скачиваем и устанавливаем Denwer.
2. Переходим в браузере на localhost/Tools/phpMyAdmin/ (создаем БД с именем «abcd»).
3. Переходим в директорию на диске, куда устанавливали Denwer, у меня это: «C:\WebServers\usr\local\mysql-5.1\data\» и находим папку «abcd».
4. Копируем в папку «abcd» файлы из бэкапа *.frm *.MYD *.MYI.
5. Получаем (все данные в целости и сохранности):



6. Теперь экспортируем базу из phpmyadmin в расширении .SQL.

© 1337

10 полезных приёмов в .htaccess

Предупреждение: перед редактированием файла .htaccess нужно всегда делать резервную копию работающего варианта!

Принудительная постановка замыкающего слеша
Считается, что замыкающий слеш в адресе URL очень хорошо помогает в области SEO сайта. Следующий код всегда будет добавлять слеш в адрес URL вашего сайта.
<IfModule mod_rewrite.c>
 RewriteCond %{REQUEST_URI} /+[^\.]+$
 RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>


Предотвращаем хотлинк ресурсов сайта
Хотлинк (использование изображений вашего сайта другими сайтами в сети) является весьма популярной практикой, которая прожигает впустую трафик вашего сервера. Следующий код будет перенаправлять все хотлинк запросы к изображениям вашего сайта на определенную картинку, адрес которой задается в строке 6.
RewriteEngine On
#Замените ?mysite\.com/ на адрес вашего блога
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Замените /images/nohotlink.jpg на ваше изображение с запрещением хотлинка
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]


Перенаправляем мобильные устройства
Если ваш сайт не использует адаптивный дизайн, то будет очень полезно перенаправить мобильные устройства на специальную версию сайта.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT}  "maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "wapp|wapr|webc|winw|winw|xda|xda-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "up.browser|up.link|windowssce|iemobile|mini|mmp" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC]
#------------- Строка ниже исключает iPad
RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$
#-------------
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
RewriteRule ^(.*)$ /m/ [L,R=302]


Принудительная загрузка файлов определенного типа
По некоторым причинам вам может потребоваться принудительная загрузка файлов определенных типов (например, MP3 или XLS). Нижеприведенный код будет предотвращать чтение таких файлов браузером и принудительно запускать загрузку
<Files *.xls>
ForceType application/octet-stream
  Header set Content-Disposition attachment
</Files>
<Files *.eps>
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</Files>


Междоменное использование шрифтов для FireFox
При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла .htaccess позволит обойти данное ограничение.
<FilesMatch "\.(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
#Замените w.abcd.bz на адрес вашего блога
Header set Access-Control-Allow-Origin «abcd.bz»


Ускоряем сайт с помощью кэширования .htaccess
Используя кэширование .htaccess можно существенно увеличить скорость сайта.
# 1 ГОД
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 НЕДЕЛЯ
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 2 ДНЯ
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=172800, proxy-revalidate"
</FilesMatch>
# 1 МИНУТА
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>


Отсекаем спам
Страдаете от спама на вашем блоге WordPress? Конечно, плагин Akismet может оказать существенную помощь, но и файл .htaccess не останется в стороне от борьбы с заразой. Данный код предотвращает непосредственный доступ спам ботов к файлу wp-comments-post.php, который формирует комментарии на блоге.
# Заменяем yourdomainname на имя вашего домена
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourdomainname.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]


Приводим различные фиды к единому формату
# Заменяем URL на адрес своего блога
<IfModule mod_alias.c>
 RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://w.abcd.bz.ru/feed/
 RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ 
http://abcd.bz/comments/feed/
</IfModule>


Конфигурируем сайт для видео HTML5
HTML5 привнес много новшеств в мир веб разработки. Возможность проигрывать видео без использования FLASH является одной из лучших особенностей HTML5. Хотя нужно правильно сконфигурировать сервер для корректной работы с последними стандартами видео HTML5.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
AddType video/ogg .ogv
AddType video/ogg .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType application/x-shockwave-flash swf


Записываем ошибки PHP в журнал
Вместо вывода ошибок PHP на страницах вашего сайта (что дает информацию потенциальным хакерам…) можно записывать их в журнал (файл .log), скрывая от посетителей.
view sourceprint?
# отключаем вывод ошибок пользователям
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
# заносим ошибки в журнал
php_flag log_errors on
php_value error_log /location/to/php_error.log


Запускаем PHP в файлах JavaScript
При разработке кода JavaScript иногда требуется использовать PHP в файлах .js. Например, для получения данных из базы.
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>

Автоматический бэкап базы данных в DLE

В движке DataLifeEngine есть полезная функция — autobackup. По умолчанию отключена.

Сперва, мы переименуем файл autobackup.php в backup.php (можно и другое) для безопасности. Открываем файл текстовым редактором и находим строчку. Если не изменить этот параметр, то функция не запустится.
$allow_auto_backup = 0;

заменяем на:
$allow_auto_backup = 1;

Сохраняем.

На папку /backup/ поставьте права CHMOD 777 для того, чтобы туда записывались готовые файлы.

С CRON в ISPmanager возникли проблемы, с Google ничего не работало. Пришлось повозиться.

Заходим в ISPmanager — далее в Планировщик (cron) — Создать

/usr/bin/wget http://abcd.bz/backup.php

Сохраняем.

Теперь бэкапы базы пишутся в папку /backup/ в заданное время. Можно сделать закачку на удаленный FTP, но здесь только основа.

Хостинг JavaScript-библиотек на Yandex

Сервис Хостинг JavaScript-библиотек предоставляет разработчикам сайтов доступ к сети распространения контента (CDN) Яндекса и позволяет загружать с серверов Яндекса различные JavaScript-фреймворки и библиотеки с открытым исходным кодом, в том числе:

Как быстро настроить VDS/дедик ?

Очень часто обращались люди, которые ничего не понимают в администрировании. Я обычно им давал ссылки на хостеров, где VDS + isp lite по тарифу.
НО иногда они таки выбирали, контору, где не выдаются бесплатные панели.

Итак, как быть, если вы все же купили чистый vds. Например на KVM.

В этом нам пожет панель ISP manager lite/pro
1. Покупаем vds, нам присылают ip сервера, root и его пароль.
2. Идем сюда, регистрируемся.





Потом, скачиваем программу putty.


После этого пробуем любую из команд.
fetch "http://download.ispsystem.com/install.sh"
curl -o install.sh "http://download.ispsystem.com/install.sh"
wget "http://download.ispsystem.com/install.sh"

Для популярной centos например
wget "http://download.ispsystem.com/install.sh"


Если все ок, тогда.
sh install.sh


Дальше везде жмем ОК например :) все понятно будет.

После этого, у вас есть 2 недели, чтобы надобавлять все нужные домены, перенести файлы, создать базы, дополнительные фтп и прочее прочее, что обычно делают. Через 2 недели, либо купите панель, либо она просто перестанет работать. НО все ваши настройки сохранятся. Если вы больше не планируете добавлять доменов — самое оно.

Памятка PHP разработчика

Настройки PHP при разработке в качестве рекомендации

1) error_reporting = E_ALL | E_STRICT
2) display_errors = On
3) register_globals,register_long_arrays,magic_quotes off (первые 2 удалены в 5.4)
4) short_open_tag off
5) allow_call_time_pass_reference = off (Удалено в 5.4)
6) safe_mode — все настройки off (Удалено в 5.4)

Типичные уязвимости
Загрузка файлов:
1. Заливка исполняемого файла
2. Исполнение неопределённых Mime Type Apache например file.php.7z
3. Исполнение мета-информации например исполняемый image.gif
4. Уязвимость связки php+nginx (выставить cgi.fix_pathinfo=0)
5. Выставление некорректных прав на загружаемый файл

Код:
1. Ядовитый ноль он же нулевой байт он же символ конца строки %00, позволяет производить php injection
2. Не фильтрованный ввод
3. SQL injection
4. XSS
5. Remote File Inclusion [RFI] (отключаем allow_url_include = Off)
6. Возможность перехвата сессии (привязываем к клиенту)
7. Rainbow Table подбор ( храним пароли в sault md5)
8. Автоматизированное внедрение iframe (иногда помогает вынос точки выхода из приложение в файл отличный от index + exit в конце) (Такая простая мера очень часто меня спасала)
9. CSRF — Cross-Site Request Forgery (имитирование запроса пользователя к стороннему сайту)

Читать дальше →

Highload оптимизация

Зачастую, «бутылочным горлышком» вашего приложения является база данных, таким образом перво-наперво включаем slow query log и смотрим какой запрос у нас самый медленный, и думаем что с ним делать, если не можем вкурить проблему — зовём старших, пусть тоже повтыкают в EXPLAIN (хабр) вашего чудо-запроса.

Но, опять же ссылаясь к моему опыту, большинство проблем с БД решают правильные индексы. Легко запомнить, что индексировать следует внешние ключи, и всё что у вас в WHERE, ORDER BY, GROUP BY (список не полон, для начала – самое оно).

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

Поиск с использованием LIKE это плохо. Полнотекстовый с MyISAM уже лучше. Внешний аля Sphinx — рулит и бибикает для MySQL и PostgreSQL, инфа достоверная 100%.

Но это полбеды, проблем в БД может подкинуть и само приложение — обращение к БД в цикле/рекурсии или еще каким извращенным способом могут привносить удивительные поправки в результаты нагрузочного тестирования. Сделайте простой профайлер ваших запрос и проследите на каких страницах количество запросов начинает зашкаливать (особенно это касается типа-ORM и почти-Active Record, когда один объект = один запрос, или даже не один). Всем кто уповает на магию фреймворков, иль каких-нить gem-ов — не надейтесь, всё о чём я написал в равной степени относится к большинству языков web-программирования, г… код есть везде, он вездесущ.

Ну, а теперь о главном, нет о главной странице в 1,5 метра — дождется ли её загрузки пользователь со скоростью доступа в 256кбит? Клиентская оптимизация должна проводиться в обязательном порядке: YSlow да Page Speed вам в зубы. Да если погуглить, то даже небольшая правка htaccess для apache улучшит ситуацию:
# Enable ETag
FileETag MTime Size

# Enable Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript

<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
</ifModule>

Пожмите JavaScript и CSS, да переключите jQuery на Google CDN.

Если письмо не было доставлено адресату и почему

Если Вы отправили письмо, а в ответ на него пришло сообщение серверной службы оповещения с такими параметрами:

В поле «От» (один из нижеприведенных вариантов):
  • 1. Mail Delivery System
  • 2. Mail Delivery Subsystem
  • 3. MAILER-DAEMON
  • 4. Internet Mail Delivery

В поле «Тема» (один из нижеприведенных вариантов):
  • 1. Returned mail: see transcript for details
  • 2. failure notice
  • 3. Mail delivery failed: returning message to sender
  • 4. Delivery Notification: Delivery has failed
  • 5. Undelivered Mail Returned to Sender
  • 6. Delivery failure
  • 7. Your e-mail could not be delivered
  • 8. Message Rejected
  • 9. Virus Intercepted (или что-то в этом роде)
  • 10. Returned mail: Service unavailable
  • 11. DELIVERY FAILURE
  • 12. Delivery Status Notification (Failure)
  • 13. Undeliverable mail
  • 14. Delayed Mail (still being retried)

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

На данный момент нижеприведенный список включает расшифровку 151-го из таких диагнозов:

Читать дальше →

Как посчитать хватит ли вам канала или нет ?

  • Считаете количество скачанных файлов за сутки, высчитываете средний размер файла.
  • Умножаете средний размер на кол-во ваших хитов, получаете мегабайты \ в сутки.
  • Преобразовываете мегабайты\сутки в мегабиты\секунды.