# wp-content/uploads/.htaccess
< FilesMatch "\.php$">
Require all denied
< /FilesMatch>
sadmin
Преди две години с Вики почистихме и инсталирахме тази машинка с M$ Windows 10.
Днес дойде ред отново за профилактика и инсталиране на M$ Windows 11, тъй като поддръжката на Windows 10 приключва на 14.10.2025 г.
Друго си е, когато сам си почистиш, форматираш, инсталираш и конфигурираш своята M$ Windows 11 машинка.
Имах около 89 127 381 723 въпроса – това как, онова защо, но усещането да си жив GPT не е никак лошо. 🙂
Светли дни идват за DH Studio!
За да заобиколим задължителния M$ Account, стартирахме cmd с Shift + F10 и въведохме:
start ms-cxh:localonly
Така създаваме локален потребител.
Всичко вървеше добре, но при инсталация на Windows 11 на дъното ASRock Steel Legend B450 излезе съобщение, че системата не отговаря на изискванията:
This PC doesn’t currently meet Windows 11 system requirements
This PC doesn’t meet the minimum system requirements to install this version of Windows.
For more information, visit: https://aka.ms/WindowsSysReq
👉 Решението включва:
Активиране на Intel PTT (TPM 2.0):
Влизане в Advanced Mode
Секция Security
Активиране на Intel Platform Trust Technology (PTT)
Позволяване на Secure Boot:
Секция Security
Secure Boot Mode → активиране на Secure Boot
Защо Windows 11?
Заради игрите. Повечето нови заглавия вече са създадени за най-масовата ОС, а в момента това е Windows 11.
И все пак – Windows си остава боза. 😄
При прехвърлянето е генериран списък, но писмата все още не са били прехвърлени.
Затова писмата се отварят със съдържанието си, но като заглавие се изписва „message unavailable“.
Решение:
Изтриване на кеша и повторно генериране на индекса:
bash
Copy
Edit
rm -f courierimapuiddb
Още един проблем беше, че има папки, които съществуват в стария Roundcube, но не се появяват в новия.
Решение:
Ръчно да се добавят във файла courierimapsubscribed:
Copy
Edit
INBOX.Archives
INBOX.Archives.2018
INBOX.Archives.2019
INBOX.Archives.2020
INBOX.Archives.2021
INBOX.Archives.2022
INBOX.Drafts
INBOX.Junk
INBOX.Sent
INBOX.alcomet
INBOX.spam
INBOX.Trash
cat /etc/monit/monitrc
CHECK PROGRAM apache2_dobromir_status WITH PATH "/root/monit/check_apache_run.sh dobromir"
IF CONTENT = "apache2 not work" THEN EXEC "/usr/bin/incus exec dobromir --- systemctl start apache2"
CHECK PROGRAM mysql_dobromir_status WITH PATH "/root/monit/check_mysql_run.sh dobromir"
IF CONTENT = "mysql not work" THEN EXEC "/usr/bin/incus exec dobromir --- systemctl start mysql"
CHECK PROGRAM apache2_max_process_dobromir_status WITH PATH "/root/monit/check_apache_max_process.sh dobromir 30"
IF CONTENT = "apache2 max process" THEN EXEC "/usr/bin/incus exec dobromir --- systemctl restart apache2"
root@#:~/monit# cat check_apache_max_process.sh
#!/bin/bash
CONTAINER_NAME=$1
MAX_PROCESS=$2
process_count=$(/usr/bin/incus exec "$CONTAINER_NAME" --- pgrep -c apache2)
# Проверка на броя на процесите
if [ "$process_count" -gt $MAX_PROCESS ]; then
printf "apache2 max process"
exit 1
else
printf "apache2 no max process"
exit 0
fi
root@#:~/monit# cat check_apache_run.sh
#!/bin/bash
CONTAINER_NAME=$1
apache_status=$(/usr/bin/incus exec "$CONTAINER_NAME" --- systemctl is-active apache2)
if [ "$apache_status" != "active" ]; then
printf "apache2 not work"
exit 1
else
printf "apache2 work"
exit 0
fi
root@#:~/monit# cat check_mysql_run.sh
#!/bin/bash
CONTAINER_NAME=$1
apache_status=$(/usr/bin/incus exec "$CONTAINER_NAME" --- systemctl is-active mysql)
if [ "$apache_status" != "active" ]; then
printf "mysql not work"
exit 1
else
printf "mysql work"
exit 0
fi
MariaDB [d_dar6hd3]> insert into menu_bg (group_id) values ('3');
ERROR 167 (22003): Out of range value for column 'id' at row 1
MariaDB [d_dar6hd3]> describe menu_bg;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| parent_id | tinyint(3) unsigned | NO | | 0 | |
| title | varchar(255) | NO | | | |
| url | varchar(255) | NO | | | |
| class | varchar(255) | NO | | | |
| position | tinyint(3) unsigned | NO | | 0 | |
| group_id | tinyint(3) unsigned | NO | | 1 | |
| sub_exist | enum('1','0') | YES | | 0 | |
+-----------+---------------------+------+-----+---------+----------------+
8 rows in set (0,001 sec)
MariaDB [d_dar6hd3]> insert into menu_bg (group_id) values ('3');
ERROR 167 (22003): Out of range value for column 'id' at row 1
FIX
alter table menu_bg modify id SMALLINT(3) unsigned NOT NULL AUTO_INCREMENT;
Core PHP + Smarty -- the Winner
Направихме един малък тест за бързодействие на
Laravel vs (Core PHP + Smarty) vs Core PHP
Очакван резултат, но все пак извод:
CorePHP е топ за супер натоварени сайтове където се гони абсолютен оптимум, а не просто да работи и да се купуват железа безкрай.
+ и -- на Laravel са ясни. Идеята тук е бързодействие, а със Smarty се получава и разделение на front, back.
Всеки проект и ситуация определя какво да се ползва: Laravel, друг framework, Core PHP или друго…
PS0: За тестовете бяха направени три контейнера с абсолютно еднакви параметри на дистро,пакети/apache+nginx proxy+mariadb/,страниците извършиха един и същи брой заявки към db и т.н.
Всичко се изпълни локално в конкретните контейнери/ясно е защо/
Ползван беше apache bench tool: ab -n 10000 -c 200 https://example.com
Ето ги и резултатите:
#Core PHP # > ab -n 10000 -c 100 https://example.com
Server Software: nginx/1.18.0
Document Length: 35030 bytes
Concurrency Level: 100
Time taken for tests: 23.690 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 354230000 bytes
HTML transferred: 350300000 bytes
Requests per second: 389.26 [#/sec] (mean)
Time per request: 256.898 [ms] (mean)
Time per request: 2.569 [ms] (mean, across all concurrent requests)
Transfer rate: 13465.55 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 5 94 43.1 85 373
Processing: 10 161 58.1 154 439
Waiting: 7 79 55.1 67 337
Total: 14 255 73.1 247 581
#######################################################################
#Core PHP + Smarty# >
Concurrency Level: 100
Time taken for tests: 2.585 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 29295000 bytes
HTML transferred: 28902000 bytes
Requests per second: 386.82 [#/sec] (mean)
Time per request: 258.516 [ms] (mean)
Time per request: 2.585 [ms] (mean, across all concurrent requests)
Transfer rate: 11066.38 [Kbytes/sec] received
#######################################################################
#Laravel
Concurrency Level: 100
Time taken for tests: 3.483 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 39052000 bytes
HTML transferred: 37818000 bytes
Requests per second: 287.10 [#/sec] (mean)
Time per request: 348.309 [ms] (mean)
Time per request: 3.483 [ms] (mean, across all concurrent requests)
Transfer rate: 10949.12 [Kbytes/sec] received
# apache2ctl -t
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
/etc/apache2/apache2.conf
ServerName 127.0.0.1
#/etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.
# apache2ctl -t
Syntax OK
От версия 2.4.56 на Apache има фикс "Apache HTTP Server: HTTP request splitting with mod_rewrite and mod_proxy" (CVE-2023-25690)" където всички интервали в урл-тата ще връщат 403
За да се фиксне се доабвят флаговете BCTLS или B към текущите флагове,
т.е.
Пример:
RewriteRule ^primer$ /h_primeren_file.php [QSA,L]
Пренаписва се така:
RewriteRule ^primer$ /h_primeren_file.php [BCTL,QSA,L]