Tech Support Shared Hosting: различия между версиями
Материал из lulzette's wiki
Losted (обсуждение | вклад) |
Losted (обсуждение | вклад) |
||
(не показаны 92 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
[[Category:Tech support]] | |||
== Tools == | == Tools == | ||
=== BOMB grep === | === BOMB grep === | ||
<code>grep -H -l -R $'\uFEFF' .</code> | <code>grep -I -H -l -R $'\uFEFF' .</code> | ||
=== BOMB sed === | |||
<code>for i in `grep -H -l -R $'\uFEFF' .`; do sed -i '1s/^\xEF\xBB\xBF//' $i; done</code><br> | |||
альтернативно:<br> | |||
<code>grep -rlI $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'</code> | |||
мой варик: <br> | |||
<code>grep -H -l -R $'\uFEFF' | xargs sed -i '1s/^\xEF\xBB\xBF//'</code><br> (должно сработать) | |||
=== SQL alter/convert === | === SQL alter/convert === | ||
Строка 29: | Строка 43: | ||
=== wp-cli === | === wp-cli === | ||
full list: https://wp-kama.ru/handbook/cli/wp | |||
<source> | <source> | ||
Строка 54: | Строка 70: | ||
wp option get siteurl | wp option get siteurl | ||
</source> | </source> | ||
=== | === UTF-8 в нечитабельном виде === | ||
<code> | Юзаем питон:<br> | ||
<code>python -c "print(b'кракозябры'.decode('utf-8'))"</code> <br> | |||
Пример: <br> | |||
<code>python -c "print(b'\xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 '.decode('utf-8'))"</code> | |||
u**** - unicode_escape | |||
<source> | <source> | ||
python -c "print(b'\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439'.decode('unicode_escape'))" | |||
На сайте возникла критическая ошибка. Пожалуйста, проверьте входящие сообщения почты администратора для дальнейших инструкций | |||
</source> | </source> | ||
=== | === logs nginx speed + logs smtp === | ||
<code>awk '{print $1, $2, $3, $15, $13}'</code> - время ответа (nginx) <br> | |||
<code>awk '{print $1, $2, $3, $16, $13}'</code> - код ответа http (для апача $16 -> $15)<br> | |||
<code>awk '{print $1, $2, $3, $16, $15, $13}'</code> - код + время <br> | |||
* Получить логи исходящих от ящика (смотрит по ID письма): | |||
<code>logs s DATE | egrep $(logs s DATE | egrep FROM | grep '<=' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)</code><br> | |||
либо | |||
<code>for i in `logs s | grep '<=' | grep '@timeweb.ru' |awk '{print $8}'` ; do logs s | grep $i ; done</code> | |||
* Получить логи входящих по ящику: | |||
<code>logs x DATE | egrep $(logs x DATE | egrep FROM | grep '=>' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)</code><br> | |||
=== проверить что апач пытается спавнить процессы на 2й схеме (недостаточно обработчиков) === | |||
<code>logs e *servername* | grep etc/apache2/config</code> | |||
<code> | |||
=== | === awk more than === | ||
<code>awk '{ | <code> awk '{if ($1 > 300) print $1, $2;}'</code> | ||
=== grep рекурсивно файлы === | === grep рекурсивно файлы === | ||
Строка 83: | Строка 118: | ||
<code>grep -H -l -R "pattern" .</code> | <code>grep -H -l -R "pattern" .</code> | ||
игнорировать бинарные файлы, только текстовые - <code>-I</code> | |||
=== SQL дубликаты в таблице === | === SQL дубликаты в таблице === | ||
Строка 88: | Строка 124: | ||
<code>SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;</code> | <code>SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;</code> | ||
=== SQL | === замена домена через SQL запросы, Wordpress === | ||
ГОТОВЫЕ ЗАПРОСЫ ДЛЯ ЗАМЕНЫ ДОМЕНА: https://rudrastyh.com/sql-queries-to-change-wordpress-website-domain | |||
https://misha.blog/wordpress/sql-queries-domain.html | https://misha.blog/wordpress/sql-queries-domain.html | ||
<code>UPDATE wp_posts SET post_content = REPLACE (post_content, 'OLD', 'NEW');</code> <br> | <code>UPDATE wp_posts SET post_content = REPLACE (post_content, 'OLD', 'NEW');</code> <br> | ||
<code>UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'OLD', 'NEW');</code> | <code>UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'OLD', 'NEW');</code><br> | ||
Если есть wp-cli, то все в разы проще + по всем таблицам: | |||
<code>wp db export && wp search-replace "OLD" "NEW"</code> | |||
=== PHP Mail === | === PHP Mail === | ||
Строка 101: | Строка 143: | ||
var_dump(mail("test@test.ru", "test", "test")); | var_dump(mail("test@test.ru", "test", "test")); | ||
?> | ?> | ||
</source> | |||
=== Python update virtualenv 16.x -> 20.x === | |||
<source> | |||
*install as usual* | |||
*activate* | |||
python3 -m pip install virtualenv | |||
python -m virtualenv --version | |||
</source> | </source> | ||
Строка 117: | Строка 168: | ||
</source> | </source> | ||
== | === bitrix in cp1251 === | ||
<source> | |||
php_value default_charset "cp1251" | |||
php_value mbstring.internal_encoding cp1251 | |||
php_value mbstring.func_overload 2 | |||
</source> | |||
=== bitrix размер стека и pcre.recursion_limit === | |||
<source> | |||
Для этого добавил в файл .htaccess в корневой директории вашего аккаунта следующие директивы: | |||
php_value pcre.jit 0 | |||
php_value pcre.recursion_limit 100000 - удалил | |||
</source> | |||
=== bitrix mysqli === | |||
<source> | <source> | ||
define("BX_USE_MYSQLI", true); # DBCONN.PHP | |||
... | |||
'className' => '\\Bitrix\\Main\\DB\\MysqliConnection', # .SETTINGS.PHP | |||
</source> | </source> | ||
=== | === bitrix innodb_strict_mode === | ||
по пути /bitrix/php_interface/ правим:<br> | |||
* after_connect_d7.php: | |||
<code>$connection->queryExecute("SET innodb_strict_mode=0");</code><br> | |||
* after_connect.php: | |||
<code>$DB->Query("SET innodb_strict_mode=0");</code> | |||
=== bitrix запустить индекс в консоли === | |||
Добавить в начало файла | |||
<code>$_SERVER["DOCUMENT_ROOT"] = __DIR__;</code> | |||
=== bitrix pcre limit === | |||
<code>php_value pcre.jit 0</code> | |||
=== bitrix mbstring orig pos === | |||
https://admin4web.ru/article/oshibka-mb-orig-strpos/ | |||
<code>php_value mbstring.func_overload 2</code> | |||
<source> | <source> | ||
php | [Error] Call to undefined function mb_orig_strpos() (0) /public_html/bitrix/modules/security/classes/general/post_filter.php:320 #0: CSecurityXSSDetect::fastStrpos(string, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:190 #1: CSecurityXSSDetect->findInArray(string, array) /public_html/bitrix/modules/security/classes/general/post_filter.php:221 #2: CSecurityXSSDetect->isDangerBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:237 #3: CSecurityXSSDetect->getFilteredScriptBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:262 #4: CSecurityXSSDetect->getFilteredScript(array) #5: preg_replace_callback(string, array, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:274 #6: CSecurityXSSDetect->filter(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:72 #7: CSecurityXSSDetect->process(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:55 #8: CSecurityXSSDetect::OnEndBufferContent(string) /public_html/bitrix/modules/main/classes/general/module.php:490 #9: ExecuteModuleEventEx(array, array) /public_html/bitrix/modules/main/classes/general/main.php:3192 #10: CAllMain->EndBufferContent(string) /public_html/bitrix/modules/main/classes/general/main.php:3140 #11: CAllMain->EndBufferContentMan() /public_html/bitrix/modules/main/include/epilog_after.php:36 #12: require(string) /public_html/index.php:1 | ||
</source> | </source> | ||
=== htaccess regular rewrites === | |||
[[htaccess rewrites]] | |||
=== | === htaccess нет редиректу на слеш === | ||
<code>DirectorySlash Off</code> | |||
=== htaccess remove slashes === | |||
= | <source> | ||
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)? | |||
RewriteRule (.*) %1 [R=301,L] | |||
</source> | |||
https://qna.habr.com/q/232562 | |||
=== htaccess remove index.html index.php === | |||
https://www.reg.ru/support/hosting-i-servery/file-htaccess/kak-ubratu-index-html-iz-url | |||
=== . | === htaccess убрать .php === | ||
<source> | <source> | ||
# | #редирект с php | ||
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] | |||
RewriteRule ^ %1 [R,L] | |||
#remove php | |||
RewriteCond %{REQUEST_FILENAME} !-d | |||
RewriteCond %{REQUEST_FILENAME}\.php -f | |||
RewriteCond %{REQUEST_FILENAME} !- | RewriteRule ^(.*)$ $1.php [NC,L] | ||
RewriteCond %{REQUEST_FILENAME} | </source> | ||
RewriteRule . | |||
=== редиректы в .htaccess === | |||
https://web-optimizator.com/301-redirekt-htaccess/ | |||
=== sed s!!! === | |||
<code>:%s!что!на-что!g</code> | |||
=== vim открыть в кодировке === | |||
Кодировка открытия (сохранится в ней же): <code>:e ++enc=cp1251</code> | |||
Кодировка сохранения: <code>:set fileencoding=utf-8</code> | |||
Перевод строки: <code>:set fileformat=unix</code> | |||
https://renotes.ru/post-146/vim-ecoding | |||
=== vim навигация целиковая === | |||
<code>ggVG</code> - в начало, visual line, в конец | |||
=== MySQL repair === | |||
<code>mysqlcheck -r -u'база_данных' -p'пароль_базы_данных' 'база_данных'</code> | |||
=== MySQL get high cpu (L2) === | |||
https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/ | |||
=== MySQL 5.7 -> 5.6 === | |||
При ошибке: | |||
<source> | |||
ERROR 1118 (42000) at line 458: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline | |||
</source> | </source> | ||
=== . | Поможет смена формата столбцов на DYNAMIC: | ||
<code>sed -i 's#ENGINE=InnoDB#ENGINE=InnoDB ROW_FORMAT=DYNAMIC#g' dump.sql</code> | |||
=== MySQL (PHP) кодировка соединения === | |||
Полезно в случаях, когда в базе кракозябры и на сайте тоже, однако установить корректную кодировку не получается, однако работать это должно корректно. Обычно возникает после переноса сайта между хостингами/VDS. Присуще самописным сайтам/CMSкам.<br> | |||
Добавить после строки, где осуществляется подключение:<br> | |||
Если используется mysqli (PHP 5.6+): <code>$mysqli->set_charset("utf8")</code> | |||
При использовании mysql (PHP 5.6-): <code>mysql_set_charset("utf8")</code> | |||
Или: <code>mysql_query("SET NAMES 'cp1251'");</code> | |||
=== Unknown collation: ‘utf8mb4_unicode_520_ci’ === | |||
<code>sed -i "s#utf8mb4_unicode_520_ci#utf8mb4_unicode_ci#g"</code> | |||
=== рекурсивная замена в файлах for'ом sed'ом === | |||
<code>for i in `grep -rl 'что' .`; do sed -i 's%что%на_что%g' $i; done</code> | |||
=== remove wget listings === | |||
<code>find . -name '.listing' -delete</code> | |||
=== openssl узнать сертификат === | |||
<code>openssl s_client -servername lulzette.ru -connect lulzette.ru:443 2>/dev/null| openssl x509 -text</code> | |||
< | |||
</ | |||
=== zfs quota === | |||
* Всего: | |||
<code>zfs get userquota@$USER zpool/home </code><br> | |||
* Использовано: | |||
<code>zfs get userused@$USER zpool/home</code> | |||
=== tar compress === | |||
<code> tar -cvzf public_html.tar.gz </code> | |||
https://sheensay.ru/tar | |||
=== tar follow symlinks === | |||
<source> | |||
-h, --dereference | |||
don't archive symlinks; archive the files they point to | |||
</source> | </source> | ||
=== | === chmod find === | ||
<source> | <source> | ||
find . -type f -exec chmod 644 {} + | |||
find . -type d -exec chmod 755 {} + | |||
</source> | |||
=== apache list config === | |||
<code>sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"</code> | |||
=== ссылки (links) === | |||
<code>ln -s *откуда* *ссылка*</code> | |||
== links == | |||
проксирование нгинксом, заголовки, балансировка: https://devacademy.ru/comment/5 | |||
# | apache mod_rewrite: https://httpd.apache.org/docs/2.4/rewrite/remapping.html | ||
nginx переменные в ngx_http_core_module: https://nginx.org/en/docs/http/ngx_http_core_module.html#var_remote_addr | |||
все переменные в нгинксе: https://nginx.org/en/docs/varindex.html | |||
(mediawiki) nginx - location и полезности по регуляркам: https://rav.pw/nginx-location/ | |||
(mediawiki) полезности по регуляркам: https://www.karashchuk.com/Apache/htaccess_regexp/ | |||
легко и понятно про mod_rewrite (и про регулярки): https://hackware.ru/?p=5543 | |||
советы по php-fpm http://pektop.net/2013/09/sovety-po-nastrojke-i-optimizacii-nginx-i-php-fpm/ | |||
тоже php-fpm https://rtfm.co.ua/nginx-nastrojka-servera-i-php-fpm/ | |||
и еще php-fpm https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/ | |||
https://github.com/EliverLara/Juno | |||
https://it-para.site/neprinuzhdionnye-is.html | |||
https://habr.com/ru/company/mailru/blog/490790/ | |||
https://wiki.gentoo.org/wiki/Complete_Virtual_Mail_Server/Courier-IMAP_to_Database/ru | |||
https://help.ubuntu.com/community/Courier | |||
https://1cloud.ru/help/linux/nastrojka-exim4 | |||
https://skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/ | |||
https://vim.rtorr.com/ | |||
mail - https://habr.com/ru/post/59417/ | |||
DNS - https://habr.com/ru/post/137587/ | |||
== Docs == | |||
=== | === Wordpress, главная доступна, 404 на подстраницах === | ||
В 99% случаев возникает из-за отсутствия стандартных директив в .htaccess сайта. Следует добавить их: [[CMS Стандартные файлы]] | |||
=== PMA на разных хостингах === | |||
https://snipp.ru/handbk/url-phpmyadmin | |||
=== PHP запустить в консоли с параметрами === | |||
<source> | |||
php SCRIPT.PHP -k parameter | |||
</source> | </source> | ||
=== | === Перенос сайтов на Python === | ||
http://simp.ly/p/FgKNHq | |||
full - https://app.simplenote.com/p/FgKNHq | |||
=== mixed content easy fix === | |||
Добавить в .htaccess: | |||
<code>Header always set Content-Security-Policy "upgrade-insecure-requests"</code> | |||
При получении браузером заголовка "Content-Security-Policy" с указанным значением браузер автоматически заменяет http на https, из-за чего Mixed пропадает. Не советую использовать (кроме случаев, когда замена в дампе базы и в файлах не помогает), так как некоторые браузеры могут не обрабатывать этот заголовок (мало ли какой тупой говнобраузер попадется). | |||
// | [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests Совместимость с браузерами и подробная информация] | ||
Текущая версия от 12:57, 5 сентября 2022
Tools
BOMB grep
grep -I -H -l -R $'\uFEFF' .
BOMB sed
for i in `grep -H -l -R $'\uFEFF' .`; do sed -i '1s/^\xEF\xBB\xBF//' $i; done
альтернативно:
grep -rlI $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'
мой варик:
grep -H -l -R $'\uFEFF' | xargs sed -i '1s/^\xEF\xBB\xBF//'
(должно сработать)
SQL alter/convert
- таблицу и поля в кодировки
ALTER TABLE `DATABASE`.`TABLE` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- базу, таблицы, поля в кодировки
ALTER DATABASE `DATABASE` DEFAULT CHARSET=utf8 COLLATE utf8_bin;
Use the ALTER DATABASE and ALTER TABLE commands.
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Or if you're still on MySQL 5.5.2 or older which didn't support 4-byte UTF-8, use utf8 instead of utf8mb4:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
wp-cli
full list: https://wp-kama.ru/handbook/cli/wp
Проверить версию wp:
wp core version
Инормация по wp-cli:
wp --info
Экспортировать базу:
wp db export databasename
Импортировать базу:
wp db import databasename
Заменить в базе все value1 на value2:
wp search-replace value1 value2
Обновить кэш:
wp cache flush
Получить информацию по опциям из таблицы wp_options базы данных:
wp option get home
wp option get siteurl
UTF-8 в нечитабельном виде
Юзаем питон:
python -c "print(b'кракозябры'.decode('utf-8'))"
Пример:
python -c "print(b'\xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 '.decode('utf-8'))"
u**** - unicode_escape
python -c "print(b'\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439'.decode('unicode_escape'))"
На сайте возникла критическая ошибка. Пожалуйста, проверьте входящие сообщения почты администратора для дальнейших инструкций
logs nginx speed + logs smtp
awk '{print $1, $2, $3, $15, $13}'
- время ответа (nginx)
awk '{print $1, $2, $3, $16, $13}'
- код ответа http (для апача $16 -> $15)
awk '{print $1, $2, $3, $16, $15, $13}'
- код + время
- Получить логи исходящих от ящика (смотрит по ID письма):
logs s DATE | egrep $(logs s DATE | egrep FROM | grep '<=' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)
либо
for i in `logs s | grep '<=' | grep '@timeweb.ru' |awk '{print $8}'` ; do logs s | grep $i ; done
- Получить логи входящих по ящику:
logs x DATE | egrep $(logs x DATE | egrep FROM | grep '=>' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)
проверить что апач пытается спавнить процессы на 2й схеме (недостаточно обработчиков)
logs e *servername* | grep etc/apache2/config
awk more than
awk '{if ($1 > 300) print $1, $2;}'
grep рекурсивно файлы
grep -H -l -R "pattern" .
игнорировать бинарные файлы, только текстовые - -I
SQL дубликаты в таблице
SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;
замена домена через SQL запросы, Wordpress
ГОТОВЫЕ ЗАПРОСЫ ДЛЯ ЗАМЕНЫ ДОМЕНА: https://rudrastyh.com/sql-queries-to-change-wordpress-website-domain
https://misha.blog/wordpress/sql-queries-domain.html
UPDATE wp_posts SET post_content = REPLACE (post_content, 'OLD', 'NEW');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'OLD', 'NEW');
Если есть wp-cli, то все в разы проще + по всем таблицам:
wp db export && wp search-replace "OLD" "NEW"
PHP Mail
<?
var_dump(mail("test@test.ru", "test", "test"));
?>
Python update virtualenv 16.x -> 20.x
*install as usual*
*activate*
python3 -m pip install virtualenv
python -m virtualenv --version
Mass dig [BASH]
function massHosts() {
for i in $@ ; do
echo '--'
echo $i;
dig a +short $i
#echo '=='
done
}
bitrix in cp1251
php_value default_charset "cp1251"
php_value mbstring.internal_encoding cp1251
php_value mbstring.func_overload 2
bitrix размер стека и pcre.recursion_limit
Для этого добавил в файл .htaccess в корневой директории вашего аккаунта следующие директивы:
php_value pcre.jit 0
php_value pcre.recursion_limit 100000 - удалил
bitrix mysqli
define("BX_USE_MYSQLI", true); # DBCONN.PHP
...
'className' => '\\Bitrix\\Main\\DB\\MysqliConnection', # .SETTINGS.PHP
bitrix innodb_strict_mode
по пути /bitrix/php_interface/ правим:
- after_connect_d7.php:
$connection->queryExecute("SET innodb_strict_mode=0");
- after_connect.php:
$DB->Query("SET innodb_strict_mode=0");
bitrix запустить индекс в консоли
Добавить в начало файла
$_SERVER["DOCUMENT_ROOT"] = __DIR__;
bitrix pcre limit
php_value pcre.jit 0
bitrix mbstring orig pos
https://admin4web.ru/article/oshibka-mb-orig-strpos/
php_value mbstring.func_overload 2
[Error] Call to undefined function mb_orig_strpos() (0) /public_html/bitrix/modules/security/classes/general/post_filter.php:320 #0: CSecurityXSSDetect::fastStrpos(string, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:190 #1: CSecurityXSSDetect->findInArray(string, array) /public_html/bitrix/modules/security/classes/general/post_filter.php:221 #2: CSecurityXSSDetect->isDangerBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:237 #3: CSecurityXSSDetect->getFilteredScriptBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:262 #4: CSecurityXSSDetect->getFilteredScript(array) #5: preg_replace_callback(string, array, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:274 #6: CSecurityXSSDetect->filter(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:72 #7: CSecurityXSSDetect->process(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:55 #8: CSecurityXSSDetect::OnEndBufferContent(string) /public_html/bitrix/modules/main/classes/general/module.php:490 #9: ExecuteModuleEventEx(array, array) /public_html/bitrix/modules/main/classes/general/main.php:3192 #10: CAllMain->EndBufferContent(string) /public_html/bitrix/modules/main/classes/general/main.php:3140 #11: CAllMain->EndBufferContentMan() /public_html/bitrix/modules/main/include/epilog_after.php:36 #12: require(string) /public_html/index.php:1
htaccess regular rewrites
htaccess нет редиректу на слеш
DirectorySlash Off
htaccess remove slashes
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]
htaccess remove index.html index.php
https://www.reg.ru/support/hosting-i-servery/file-htaccess/kak-ubratu-index-html-iz-url
htaccess убрать .php
#редирект с php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
#remove php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
редиректы в .htaccess
https://web-optimizator.com/301-redirekt-htaccess/
sed s!!!
:%s!что!на-что!g
vim открыть в кодировке
Кодировка открытия (сохранится в ней же): :e ++enc=cp1251
Кодировка сохранения: :set fileencoding=utf-8
Перевод строки: :set fileformat=unix
https://renotes.ru/post-146/vim-ecoding
vim навигация целиковая
ggVG
- в начало, visual line, в конец
MySQL repair
mysqlcheck -r -u'база_данных' -p'пароль_базы_данных' 'база_данных'
MySQL get high cpu (L2)
https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/
MySQL 5.7 -> 5.6
При ошибке:
ERROR 1118 (42000) at line 458: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline
Поможет смена формата столбцов на DYNAMIC:
sed -i 's#ENGINE=InnoDB#ENGINE=InnoDB ROW_FORMAT=DYNAMIC#g' dump.sql
MySQL (PHP) кодировка соединения
Полезно в случаях, когда в базе кракозябры и на сайте тоже, однако установить корректную кодировку не получается, однако работать это должно корректно. Обычно возникает после переноса сайта между хостингами/VDS. Присуще самописным сайтам/CMSкам.
Добавить после строки, где осуществляется подключение:
Если используется mysqli (PHP 5.6+): $mysqli->set_charset("utf8")
При использовании mysql (PHP 5.6-): mysql_set_charset("utf8")
Или: mysql_query("SET NAMES 'cp1251'");
Unknown collation: ‘utf8mb4_unicode_520_ci’
sed -i "s#utf8mb4_unicode_520_ci#utf8mb4_unicode_ci#g"
рекурсивная замена в файлах for'ом sed'ом
for i in `grep -rl 'что' .`; do sed -i 's%что%на_что%g' $i; done
remove wget listings
find . -name '.listing' -delete
openssl узнать сертификат
openssl s_client -servername lulzette.ru -connect lulzette.ru:443 2>/dev/null| openssl x509 -text
zfs quota
- Всего:
zfs get userquota@$USER zpool/home
- Использовано:
zfs get userused@$USER zpool/home
tar compress
tar -cvzf public_html.tar.gz
tar follow symlinks
-h, --dereference
don't archive symlinks; archive the files they point to
chmod find
find . -type f -exec chmod 644 {} +
find . -type d -exec chmod 755 {} +
apache list config
sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"
ссылки (links)
ln -s *откуда* *ссылка*
links
проксирование нгинксом, заголовки, балансировка: https://devacademy.ru/comment/5
apache mod_rewrite: https://httpd.apache.org/docs/2.4/rewrite/remapping.html
nginx переменные в ngx_http_core_module: https://nginx.org/en/docs/http/ngx_http_core_module.html#var_remote_addr
все переменные в нгинксе: https://nginx.org/en/docs/varindex.html
(mediawiki) nginx - location и полезности по регуляркам: https://rav.pw/nginx-location/
(mediawiki) полезности по регуляркам: https://www.karashchuk.com/Apache/htaccess_regexp/
легко и понятно про mod_rewrite (и про регулярки): https://hackware.ru/?p=5543
советы по php-fpm http://pektop.net/2013/09/sovety-po-nastrojke-i-optimizacii-nginx-i-php-fpm/
тоже php-fpm https://rtfm.co.ua/nginx-nastrojka-servera-i-php-fpm/
и еще php-fpm https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/
https://github.com/EliverLara/Juno
https://it-para.site/neprinuzhdionnye-is.html
https://habr.com/ru/company/mailru/blog/490790/
https://wiki.gentoo.org/wiki/Complete_Virtual_Mail_Server/Courier-IMAP_to_Database/ru
https://help.ubuntu.com/community/Courier
https://1cloud.ru/help/linux/nastrojka-exim4
https://skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/
mail - https://habr.com/ru/post/59417/
DNS - https://habr.com/ru/post/137587/
Docs
Wordpress, главная доступна, 404 на подстраницах
В 99% случаев возникает из-за отсутствия стандартных директив в .htaccess сайта. Следует добавить их: CMS Стандартные файлы
PMA на разных хостингах
https://snipp.ru/handbk/url-phpmyadmin
PHP запустить в консоли с параметрами
php SCRIPT.PHP -k parameter
Перенос сайтов на Python
full - https://app.simplenote.com/p/FgKNHq
mixed content easy fix
Добавить в .htaccess:
Header always set Content-Security-Policy "upgrade-insecure-requests"
При получении браузером заголовка "Content-Security-Policy" с указанным значением браузер автоматически заменяет http на https, из-за чего Mixed пропадает. Не советую использовать (кроме случаев, когда замена в дампе базы и в файлах не помогает), так как некоторые браузеры могут не обрабатывать этот заголовок (мало ли какой тупой говнобраузер попадется).