SlideShare a Scribd company logo
1 of 80
Download to read offline
POZNAJ wp-config.php "UKRYTE" MOŻLIWOŚCI.
Marcin Jóźwiak
!2!2
wp-config.php
Co to takiego? Gdzie się znajduje? Co zawiera?
Jest jednym z najważniejszych plików konfiguracji WordPress.
Znajduje się w katalogu głównym, plików WordPress.
!3
Podczas pobrania WordPress nie jest dołączany
Zawiera podstawowe dane konfiguracyjne witryny, takie jak
informacje o połączeniu z bazą danych i inne - o tym później.
!4!4
Kiedy i jak jest tworzony?
wp-config.php
Podczas procesu instalacji WordPress tworzy plik wp-config.php na
podstawie podanych informacji.
- I -
Można go utworzyć ręcznie korzystając z przykładowego plik
wp-config-sample.php 

i edytując go zgodnie z wymogami.
- II -
!5
!6!6
Co zawiera przykładowy plik
wp-config-sample.php ?
define('DB_NAME', 'database_name_here');
define('DB_USER', 'username_here');
define('DB_PASSWORD', 'password_here');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', ’ ’);
MySQL settings - dane do połączenia z bazą danych
!7
$table_prefix = ’wp_’;
Database table prefix - Prefiks tabel WordPressa w bazie danych
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
Secret keys - Unikatowe klucze uwierzytelniania i sole
!8
!9
define('WP_DEBUG', false);
Tryb debugowania - ustawienie na false
o tym więcej za chwile ….
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
ABSPATH - ustawienia Absolutna ścieżka do katalogu WordPressa
oraz ustawia zmienne WordPressa i dołączane pliki
!10
!11!11
Co zawiera utworzony domyślnie
wp-config.php ?
define('DB_NAME', ’name db’);
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');
define('DB_CHARSET', ’utf8mb4');
define('DB_COLLATE', ’ ’);
define('AUTH_KEY', '+g.0v}>vg^14lQ6|>>S DdpCqv.qNfgF:Yq^11^M(u_0]G_4Y!})8}*6mpU.[0Q}');
define('SECURE_AUTH_KEY', '@Es^xmIAo>C2N>qvCez`|:Op.Jj*.NyKZ/^6giX;$PqxLR9hT^U&qKClP1DH5T!7');
define('LOGGED_IN_KEY', 'b=FYw1eZ:7$v v&`Y+Pu:uwlot-:oB]`V}$G7Uac$zDS{*Qb[Wm*doBsaX*+wBeM');
define('NONCE_KEY', ' x%Iri3 S[[d^FZ:yxm+3=^OP:Z?(v.3Xgz3*N`J+JF,KzAX,~T AZ6R|3Np?k@!');
define('AUTH_SALT', 'jHa_j%8n=4#0E B-)XD -S|UV3V-?-:b[(PD_NQ7!&I<(vl}ZllQGw|5W{.H@y/<');
define('SECURE_AUTH_SALT', 'qs/E+y<-V9S1-%2zq6%w[KIS;Jv/),A*lrK|r >^<`jGGY-~Q1L6Ii~P$~j^C(&2');
define('LOGGED_IN_SALT', 'pndG UJ6KG7uE~6IU#4sUH=fl88{<M&vl2hkIUUg`=^Mt^=xOz[Fs$ }3u[P^*3A');
define('NONCE_SALT', 'Ck:FXf8j4Ry2[&FA$Nc}8.SYIIH/5_8VH2xSW6D;ly~:}}Zimvlcri}YI+g9~r}a');
$table_prefix = ’wp_’;
define('WP_DEBUG', false);
/** Absolutna ścieżka do katalogu WordPressa. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Ustawia zmienne WordPressa i dołączane pliki. */
require_once(ABSPATH . 'wp-settings.php');
!12
WPROWADZAMY ZMIANY !
!14!14
Warto wiedzieć
przed zmianami :-)
!15!15
- I -
Najlepiej na środowisku testowym, localhost - odradzamy
produkcję
- II -
Na wszelki wpadek dobrze jest mieć kopię zapasową
- III -
Bez obawy zmiany są odwracalne, wystarczy zmienić
plik .php i zapisać zmiany
TO STARUJEMY :-)
!17!17
Baza danych
!18
MySQL settings - dane do połączenia z bazą danych
define('DB_HOST', 'localhost');
define('DB_HOST', ’127.0.0.1:3307');
define('DB_HOST', ’localhost:3307');
define('DB_HOST', ’mysql.serwer.com:3307’);
If your host uses Unix sockets or pipes, adjust the DB_HOST
define('DB_HOST', '127.0.0.1:/var/run/mysqld/mysqld.sock');
define('DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock');
define('DB_HOST', 'mysql.serwer.com:/var/run/mysqld/mysqld.sock’);
Możemy podać w inny sposób
!19!19
Kodowanie znaków
!20
Stałe związane z standardem kodowania i metodą porównywania znaków.
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', ’ ’);
Sortowanie odnosi się do kolejności sortowania liter, cyfr i symboli danego zestawu znaków.
WordPress domyślnie używa zestawu znaków UTF-8 (utf8), a gdy tabele bazy danych MySQL
WordPress są tworzone podczas procesu instalacji, MySQL przypisuje do tych tabel
utf8_general_ci sortowanie.
Możemy zmienić np.

define('DB_COLLATE', 'utf8_turkish_ci');
!21
Prefiks nazw tabel w bazie danych
$table_prefix = 'wp_';
!22
- III -

Można go zmienić, trzeba pamiętać że zmian również należy
dokonać w bazie danych.
- II -

Jeśli używamy różnych prefiksów to możemy w jednej bazie mieć
tabele z 2 lub więcej różnych instalacji WordPress. Nie zalecane ze
względów bezpieczeństwa.
- I -

Domyślnie jest ’wp_’, zalecana zmiana ze względów
bezpieczeństwa.
- IV -

Możemy używać nastepujących znaków: liczby, litery i ‚ _ ’
!23
Zmiana nazwy w tabeli użytkowników i opisu użytkowników
define('CUSTOM_USER_TABLE', $table_prefix. 'my_users');
define('CUSTOM_USER_META_TABLE', $table_prefix. 'my_usermeta');
Może poprawić bezpieczeństwo
robimy kopiując tabele w bazie, konsola sql np.
CREATE TABLE tabela_2 LIKE tabela_1;
INSERT INTO tabela_2 SELECT * FROM tabela_1;
!24!24
Secret keys
Unikatowe klucze uwierzytelniania i sole
define('AUTH_KEY', '+g.0v}>vg^14lQ6|>>S DdpCqv.qNfgF:Yq^11^M(u_0]G_4Y!})8}*6mpU.[0Q}');
define('SECURE_AUTH_KEY', '@Es^xmIAo>C2N>qvCez`|:Op.Jj*.NyKZ/^6giX;$PqxLR9hT^U&qKClP1DH5T!7');
define('LOGGED_IN_KEY', 'b=FYw1eZ:7$v v&`Y+Pu:uwlot-:oB]`V}$G7Uac$zDS{*Qb[Wm*doBsaX*+wBeM');
define('NONCE_KEY', ' x%Iri3 S[[d^FZ:yxm+3=^OP:Z?(v.3Xgz3*N`J+JF,KzAX,~T AZ6R|3Np?k@!');
define('AUTH_SALT', 'jHa_j%8n=4#0E B-)XD -S|UV3V-?-:b[(PD_NQ7!&I<(vl}ZllQGw|5W{.H@y/<');
define('SECURE_AUTH_SALT', 'qs/E+y<-V9S1-%2zq6%w[KIS;Jv/),A*lrK|r >^<`jGGY-~Q1L6Ii~P$~j^C(&2');
define('LOGGED_IN_SALT', 'pndG UJ6KG7uE~6IU#4sUH=fl88{<M&vl2hkIUUg`=^Mt^=xOz[Fs$ }3u[P^*3A');
define('NONCE_SALT', 'Ck:FXf8j4Ry2[&FA$Nc}8.SYIIH/5_8VH2xSW6D;ly~:}}Zimvlcri}YI+g9~r}a');
!26
- I -

Klucze które zabezpieczają dane przechowywane
ciasteczkach.
- II -

Zmiana któregokolwiek klucza spowoduje wylogowanie
wszystkich zalogowanych użytkowników.
- III -

4 pierwsze klucze są wymagane.
- IV -

Tu możesz wygenerować nowe klucze:
https://api.wordpress.org/secret-key/1.1/salt/
Tryb debagowania - ustawienia
!28
Używamy go na stronach testowych, wersjach dev.
Na produkcji powinna być ustawiona wartość ma false
define('WP_DEBUG', true);
!29
Można też włączyć tryb debagowania bez wyświetlania błędów. Aby miało to sens
zapisujemy błędy do pliku debug.log, który jest umieszczony w folderze /wp-content/
Ustawienia php muszą pozwalać na wyświetlanie błędów - można to zrobić w pliku
php.ini
define('WP_DEBUG', true);
define(’WP_DEBUG_DISPLAY’, false);
define(’WP_DEBUG_LOG’, true);
Plik debug.log warto nadać upewnienia 600 tylko do odczytu i zablokować do niego
dostęp z zewnątrz poprzez plik .htaccess
<Files debug.log>
    Order allow,deny
    Deny from all
</Files>
!30
SCRIPT_DEBUG jest stałą pokrewną, która zmusi WordPress do używania
wersji "dev" niektórych podstawowych plików CSS i JavaScript zamiast
zminiaturyzowanych wersji, które normalnie są ładowane. Jest to
przydatne, gdy testujesz modyfikacje wszystkich wbudowanych plików .js
lub .css.
define(’SCRIPT_DEBUG’, true);
Niektóre skrypty nie honorują SCRIPT_DEBUG. Domyślna wartość to fałsz.
!31
SAVEQUERIES zapisuje zapytania do bazy danych do tablicy. Tablica może być
wyświetlana, aby pomóc w analizowaniu tych zapytań. 

Stała zdefiniowana jako true powoduje, że każde zapytanie zostanie zapisane, jak długo
trwało wykonywanie tego zapytania i jaka funkcja je wywołała.
define('SAVEQUERIES', true);
Tablica jest przechowywana w globalnych zapytaniach $wpdb->queries.
UWAGA: będzie to miało wpływ na wydajność witryny, więc pamiętaj, aby wyłączyć tę
opcję, gdy nie debugujesz. 

Np. w pliku footer.php umieszczamy kod
<?php
if ( current_user_can( 'administrator' ) ) {
global $wpdb;
echo "<pre>";
print_r( $wpdb->queries );
echo "</pre>";
}
?>
!32
Przykładowe ustawienie do debagowania
// Enable WP_DEBUG mode
define('WP_DEBUG', true);
// Enable Debug logging to the /wp-content/debug.log file
define('WP_DEBUG_LOG', true);
// Disable display of errors and warnings
define('WP_DEBUG_DISPLAY', false);
@ini_set( 'display_errors', 0 );
// Use dev versions of core JS and CSS files (only needed if you are
modifying these core files)
define('SCRIPT_DEBUG', true);
!33
Pamiętaj, że przedstawione zmiany powinny być w pliku
wp-config.php przed linią z komentarzem:
/* That's all, stop editing! Happy blogging. */
Debagowanie także możemy zrobić używając pluginów np:
Query Monitor, Debug Bar, Log Deprecated Notices
!34!34
Wyłączenie edycji plików
motywów i wtyczek.
!35
define('DISALLOW_FILE_EDIT', true);
Blokuje możliwość edycji plików motywów i wtyczek
po zalogowaniu się do kokpitu WordPress
!36!36
Aktualizacje
!37
Kontrola nad mechanizmem automatycznych aktualizacji
define('AUTOMATIC_UPDATER_DISABLED', true);
Możemy wyłączyć całkowicie - ustawienie true, domyślnie jest false
define('WP_AUTO_UPDATE_CORE', true);
Ta stała określa czy aktualizacja WordPress mają być włączone dla wszystkich wersji true
(wartość domyślna dla development site), wyłączone false
lub włączone w ramach wersji głównej minor - wartość domyślna
!38
Wyłączenie możliwość instalacji wtyczek i motywów
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);
Blokuje możliwość instalacji wtyczek i motywów oraz
edycji plików motywów i wtyczek po zalogowaniu się do kokpitu WordPress.
Nie trzeba ustawiać razem DISALLOW_FILE_MODS i DISALLOW_FILE_EDIT
obie będą działały tak samo
!39!39
Adres strony URL
!40
define('WP_SITEURL', 'http://testowa.pl/wordpress');
define('WP_HOME', 'http://testowa.pl');
!41
- II -

Pozwala zdefiniować adres jaki wpisujemy w przeglądarce
- I - 

Pozwala zdefiniować adres gdzie znajdują się pliki
główne, w tym przypadku jest to katalog „wordpress”
- III -

Przesłania to wartości podane w tabeli ale ich nie nadpisuje
- IV -

Na początku dajemy http lub https, nie podajmy na końcu „/”
!42
Adres strony URL - opcjonalnie
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/path/to/wordpress');
define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME'] . '/path/to/wordpress');
define('WP_SITEURL', 'http://'.$_SERVER['SERVER_NAME'].'/wordpress');
define('WP_HOME', 'http://'.$_SERVER['SERVER_NAME']);
Można to ustawić dynamicznie: 

1. w oparciu o php wartość nagłówka HTTP_HOST
2. gdy apache jest skonfigurowany jako UseCanonicalName wartość „on”.
SERVER_NAME jest ustawiony przez konfigurację serwera
!43!43
Przenoszenie
i /lub zmiana nazw katalogów
!44
Zmiany możemy wprowadzać dla nastepujących katalogów / folderów:
wp-content - zawiera: motywy, wtyczki, pliki użytkownika. Stałe do
zdefiniowania:
WP_CONTENT_DIR (nazwa katalogu na serwerze) i WP_CONTENT_URL (adres
URL katalogu)
plugins - zawiera: wtyczki. Stałe do zdefiniowania:  WP_PLUGIN_DIR,
i WP_PLUGIN_URL,
mu-plugins - zawiera: wtyczki „must-use”, takie których nie można zdezaktywować.
Stałe do zdefiniowania:  WPMU_PLUGIN_DIR, i WPMU_PLUGIN_URL
uploads - tu trafiają pliki użytkownika przesłane do biblioteki mediów, także te
zapisywane przez wtyczki
Stałe do zdefiniowania:  UPLOADS
!45
define('WP_CONTENT_DIR', dirname(__FILE__).'/newcontent');
define('WP_CONTENT_URL', ‚http://testowa.pl/newcontent');
define('WP_PLUGIN_DIR', WP_CONTENT_DIR.’/newplugins);
define('WP_PLUGIN_URL', 'http://testowa/newcontent/newplugins' );
define('WP_PLUGIN_URL', WP_CONTENT_URL.'/newplugins');
define('PLUGINDIR', WP_CONTENT_DIR.’/newplugins');
define('WPMU_PLUGIN_DIR', WP_CONTENT_DIR . '/mu-plugins' );
define('UPLOADS', 'newupload/media');
Przykładowy kod
!46
- I -

Nie możemy przenieść katalogu/folderu themes (motywy)
- II -

Możemy zdefiniować nowy katalog / folder w którym będziemy
umieszczać nasze motywy / motywy potomne
- III -
szczegóły: https://codex.wordpress.org/register_theme_directory
!47!47
AutoSave Interval
Zmiana czasu auto zapisu edytowanych postów
!48
define('AUTOSAVE_INTERVAL', 160); // Seconds
Podczas edytowania posta WordPress używa Ajax do
automatycznego zapisywania poprawek do wpisu
podczas edycji. Możesz zwiększyć to ustawienie, aby
uzyskać dłuższe opóźnienia pomiędzy
automatycznymi zapisami lub zmniejszyć ustawienie,
aby upewnić się, że nigdy nie stracisz zmian.
Wartość domyślna to 60 sekund.
!49!49
Wersje wpisów
ustawienia ilości kopii
!50
define('WP_POST_REVISIONS', false);
// całkowicie wyłączamy wersjonowanie
define('WP_POST_REVISIONS', 3);
// przechowujemy tylko 3 ostatnie wersje wpisu
WordPress domyślnie zapisuje kopie każdej edycji dokonanej w poście
lub stronie, umożliwiając przywrócenie poprzedniej wersji tego postu
lub strony. Zapisywanie wersji może zostać wyłączone lub można
określić maksymalną liczbę wersji dla jednego postu lub strony.
!51
Włączenie Multisite
!52
define('WP_ALLOW_MULTISITE', true);
!53
Przekierowanie
NOBLOGREDIRECT
!54
define('NOBLOGREDIRECT', ’http://testowa.pl');
Przekieruj nieistniejące „blog…”
NOBLOGREDIRECT może być użyty do przekierowania przeglądarki, jeśli
użytkownik próbuje uzyskać dostęp do nieistniejącej witryny przy użyciu
subdomeny lub podfolderu.
Np. Http://nonexistent.testowa.pl lub http://testowa.pl/nonexistent/.
!55
Niefiltrowany HTML
Wyłączenie dla wszystkich użytkowników
!56
define('DISALLOW_UNFILTERED_HTML', true);
Użytkownicy z rolami administratora lub edytora mogą
publikować niefiltrowany kod HTML w postach i komentarzach.
W WordPress Multisite tylko Super Admin może opublikować
niefiltrowany HTML, ponieważ wszyscy inni użytkownicy są
uznawani za niezaufanych.
Aby wyłączyć niefiltrowany kod HTML dla wszystkich
użytkowników, w tym dla administratorów, możesz dodać
powyższą stałą.
!57
Automatyczne opróżnianie kosza
Gdybyśmy chcieli aby kosz opróżniał się automatycznie?
!58
define('EMPTY_TRASH_DAYS', 30);
// wpisy będą usuwane z kosza po 30 dniach
Ustawienie tej zmiennej na 0 lub false nie spowoduje braku
usuwania wpisów.
Aby zablokować usuwanie wpisów należy podać możliwie długi
czas na np 10 950 to ok 30 lat.

!59
Włączanie kosza
w bibliotece mediów
!60
define('MEDIA_TRASH', true);
W bibliotece mediów zamiast usuń pojawi się kosz
define('MEDIA_TRASH', false);
Wyłączenie kosza w bibliotece mediów
!61
Obrazy MEDIA
Usuwanie nadmiarowych zestawów
!62
define('IMAGE_EDIT_OVERWRITE', true);
Domyślnie WordPress tworzy nowy zestaw obrazów za każdym
razem, gdy edytujesz obraz, a po przywróceniu oryginału pozostawia
wszystkie modyfikacje na serwerze.
Definiowanie IMAGE_EDIT_OVERWRITE jako true zmienia to
zachowanie. Tylko jeden zestaw zmian obrazu zostanie utworzony, a
po przywróceniu oryginału zmiany zostaną usunięte z serwera.
!63
Zmiana limitu pamięci
!64
Zmiana limitu pamięci dla PHP
define('WP_MEMORY_LIMIT', '64M');
// ustawiamy limit pamięci na 64 MB
Domyślna wartość 64MB. Zmiana jest możliwa jeśli hosting na to pozwala.
define('WP_MAX_MEMORY_LIMIT', ’128M’);
//ustawiamy limit pamięci dla panelu na 128 MB
Osobny limit pamięci dla panelu admina
!65
WordPress Cache
!66
define('WP_CACHE', true);
Ustawienie WP_CACHE, jeśli jest true, zawiera skrypt wp-content /
advanced-cache.php podczas wykonywania wp-settings.php.
!67
Naprawianie tabel
Naprawianie uszkodzonych tabel
w bazie danych
!68
define('WP_ALLOW_REPAIR', true);
WordPress posiada wbudowane narzędzie do sprawdzania i naprawy
uszkodzonych tabel. Domyślnie jest wyłączone.
Wykona ono sprawdzenie tabel w bazie danych (CHECK), naprawę tych,
które zostały rozpoznane jako uszkodzone (REPAIR) oraz analizę
(ANALYZE) i optymalizację (OPTIMIZE) wszystkich tabel.
Narzędzie możemy uruchomić wpisując w przeglądarce adres 
http://testowa.pl/wp-admin/maint/repair.php.
!69
WP Cron & Cron timeout
Zastosowanie crona np. publikowanie zaplanowanych
wpisów, uruchamianie cykliczne skryptów.
!70
define('DISABLE_WP_CRON', true);
define('WP_CRON_LOCK_TIMEOUT', 60);
Pierwsza linia wyłącza crona WordPress
Druga określa jak często mogą być uruchomiane
procesy, czas w sekundach
Uwaga ! Działanie crona jest uzależnione od ruchu na
stronie. Jeśli nie ma ruchu na stronie a chcemy
korzystać z funkcjonalności crona to lepiej używać
systemowego corn’a serwera
!71
Wymuszenie SSL
Wymuszenie logowania SSL dla admin
!72
define('FORCE_SSL_ADMIN', true);
Jeśli używamy ssl (https), to nie musimy tego ustawiać.
Jeśli strona nie ma ssl, a chcemy wymusić połączenie szyfrowane
np używając samodzielnie podpisanego certyfikatu to ustawiamy
wartość na true
!73
Stałe dotyczące systemu
plików i uprawnień
!74
// sposób podawania.
define ('FS_CHMOD_DIR', (0755 & ~ umask ()));
define ('FS_CHMOD_FILE', (0644 i ~ umask ()));
FS_CHMOD_DIR - Stała definiuje uprawnienia do katalogów (domyślnie (0755))
FS_CHMOD_FILE - Stała definiuje uprawnienia do plików (domyślnie (0644))
FS_CONNECT_TIMEOUT - Stała definiuje limit czasu dla budowania połączenia
(domyślnie 30 sekund)
FS_METHOD - Stała definiuje sposób łączenia z systemem plików (Wartości: direct |
ssh | ftpext | ftpsockets)
FS_TIMEOUT - Stała definiuje limit czasu po utracie połączenia (domyślnie 30 sekund)
FTP_SSH Stała definiuje aktywowanie lub nie SSH (Wartości: true | false)
FTP_USER Stała definiuje użytkownika FTP
!75
Bezpieczeństwo
wp-config.php
- I -
Zablokować dostęp do pliku poprzez .htaccess
<files wp-config.php>
order allow,deny
deny from all
</files>
- II -
Zmienić uprawnienia do plików
Domyślnie uprawnienia dla WordPress są
Foldery – 775
Pliki – 644
Warto zmienić na dla plików:
wp-config.php oraz .htaccess – 444 lub 400
(w zależności od dostępnych uprawnień na serwerze)
- III -
Przenieść cześć newralgicznych danych do innego pliku
define(’DB_NAME’, ’name db’);
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');
define('DB_CHARSET', ’utf8mb4');
define('DB_COLLATE', ’ ’);
db-conf.php
 /** dołączanie pliki. */
require_once ( ’db-conf.php' );
/** Absolutna ścieżka do katalogu WordPressa. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Ustawia zmienne WordPressa i dołączane pliki. */
require_once(ABSPATH . 'wp-settings.php');
wp-config.php
- IV -
Przenieść cześć newralgicznych danych do pliku w innej
lokalizacji niż strona (jeśli ustawienia hostingu na to pozwalają)
<?php
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');
open_basedir	=	"/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
W konfiguracji PHP dodaj nową ścieżkę do dyrektywy open_basedir:
Marcin Jóźwiak
www.dreamfocus.pl
zdjęcia użyte w prezentacji www.pexels.com oraz zasoby własne
Dziękuję

More Related Content

Similar to Poznaj wp-config.php "Ukryte" możliwości.

Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Krzysztof Kotowicz
 
WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?Tomasz Dziuda
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1Kamil Fojuth
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceDawid Urbański
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Wykorzystanie możliwości ekranu personalizacji motywu - WordCamp Polska
Wykorzystanie możliwości ekranu personalizacji motywu - WordCamp PolskaWykorzystanie możliwości ekranu personalizacji motywu - WordCamp Polska
Wykorzystanie możliwości ekranu personalizacji motywu - WordCamp PolskaTomasz Dziuda
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03
Moduł dla Drupal 8  - DrupalDay Warszawa 2016-12-03Moduł dla Drupal 8  - DrupalDay Warszawa 2016-12-03
Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03Droptica
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Codesushi.co (CODESUSHI LLC)
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówArkadiusz Stęplowski
 
HTML with a little CSS
HTML with a little CSS HTML with a little CSS
HTML with a little CSS Basia Madej
 
Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...
Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...
Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...Mariusz Szatkowski
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 
CSS Workflow, czyli jak pracować z CSS-em?
CSS Workflow, czyli jak pracować z CSS-em?CSS Workflow, czyli jak pracować z CSS-em?
CSS Workflow, czyli jak pracować z CSS-em?WordCamp Polska
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linuxbm9ib2r5
 

Similar to Poznaj wp-config.php "Ukryte" możliwości. (20)

Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
 
WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Wykorzystanie możliwości ekranu personalizacji motywu - WordCamp Polska
Wykorzystanie możliwości ekranu personalizacji motywu - WordCamp PolskaWykorzystanie możliwości ekranu personalizacji motywu - WordCamp Polska
Wykorzystanie możliwości ekranu personalizacji motywu - WordCamp Polska
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03
Moduł dla Drupal 8  - DrupalDay Warszawa 2016-12-03Moduł dla Drupal 8  - DrupalDay Warszawa 2016-12-03
Moduł dla Drupal 8 - DrupalDay Warszawa 2016-12-03
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
HTML with a little CSS
HTML with a little CSS HTML with a little CSS
HTML with a little CSS
 
Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...
Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...
Wordpress dla początkujących szkolenie / warsztat 09/10 migracje, backup, mul...
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 
CSS Workflow, czyli jak pracować z CSS-em?
CSS Workflow, czyli jak pracować z CSS-em?CSS Workflow, czyli jak pracować z CSS-em?
CSS Workflow, czyli jak pracować z CSS-em?
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 

Poznaj wp-config.php "Ukryte" możliwości.

  • 1. POZNAJ wp-config.php "UKRYTE" MOŻLIWOŚCI. Marcin Jóźwiak
  • 2. !2!2 wp-config.php Co to takiego? Gdzie się znajduje? Co zawiera?
  • 3. Jest jednym z najważniejszych plików konfiguracji WordPress. Znajduje się w katalogu głównym, plików WordPress. !3 Podczas pobrania WordPress nie jest dołączany Zawiera podstawowe dane konfiguracyjne witryny, takie jak informacje o połączeniu z bazą danych i inne - o tym później.
  • 4. !4!4 Kiedy i jak jest tworzony? wp-config.php
  • 5. Podczas procesu instalacji WordPress tworzy plik wp-config.php na podstawie podanych informacji. - I - Można go utworzyć ręcznie korzystając z przykładowego plik wp-config-sample.php 
 i edytując go zgodnie z wymogami. - II - !5
  • 6. !6!6 Co zawiera przykładowy plik wp-config-sample.php ?
  • 7. define('DB_NAME', 'database_name_here'); define('DB_USER', 'username_here'); define('DB_PASSWORD', 'password_here'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ’ ’); MySQL settings - dane do połączenia z bazą danych !7 $table_prefix = ’wp_’; Database table prefix - Prefiks tabel WordPressa w bazie danych
  • 8. define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); Secret keys - Unikatowe klucze uwierzytelniania i sole !8
  • 9. !9 define('WP_DEBUG', false); Tryb debugowania - ustawienie na false o tym więcej za chwile ….
  • 10. if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php'); ABSPATH - ustawienia Absolutna ścieżka do katalogu WordPressa oraz ustawia zmienne WordPressa i dołączane pliki !10
  • 11. !11!11 Co zawiera utworzony domyślnie wp-config.php ?
  • 12. define('DB_NAME', ’name db’); define('DB_USER', 'root'); define('DB_PASSWORD', 'root'); define('DB_HOST', 'localhost'); define('DB_CHARSET', ’utf8mb4'); define('DB_COLLATE', ’ ’); define('AUTH_KEY', '+g.0v}>vg^14lQ6|>>S DdpCqv.qNfgF:Yq^11^M(u_0]G_4Y!})8}*6mpU.[0Q}'); define('SECURE_AUTH_KEY', '@Es^xmIAo>C2N>qvCez`|:Op.Jj*.NyKZ/^6giX;$PqxLR9hT^U&qKClP1DH5T!7'); define('LOGGED_IN_KEY', 'b=FYw1eZ:7$v v&`Y+Pu:uwlot-:oB]`V}$G7Uac$zDS{*Qb[Wm*doBsaX*+wBeM'); define('NONCE_KEY', ' x%Iri3 S[[d^FZ:yxm+3=^OP:Z?(v.3Xgz3*N`J+JF,KzAX,~T AZ6R|3Np?k@!'); define('AUTH_SALT', 'jHa_j%8n=4#0E B-)XD -S|UV3V-?-:b[(PD_NQ7!&I<(vl}ZllQGw|5W{.H@y/<'); define('SECURE_AUTH_SALT', 'qs/E+y<-V9S1-%2zq6%w[KIS;Jv/),A*lrK|r >^<`jGGY-~Q1L6Ii~P$~j^C(&2'); define('LOGGED_IN_SALT', 'pndG UJ6KG7uE~6IU#4sUH=fl88{<M&vl2hkIUUg`=^Mt^=xOz[Fs$ }3u[P^*3A'); define('NONCE_SALT', 'Ck:FXf8j4Ry2[&FA$Nc}8.SYIIH/5_8VH2xSW6D;ly~:}}Zimvlcri}YI+g9~r}a'); $table_prefix = ’wp_’; define('WP_DEBUG', false); /** Absolutna ścieżka do katalogu WordPressa. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Ustawia zmienne WordPressa i dołączane pliki. */ require_once(ABSPATH . 'wp-settings.php'); !12
  • 15. !15!15 - I - Najlepiej na środowisku testowym, localhost - odradzamy produkcję - II - Na wszelki wpadek dobrze jest mieć kopię zapasową - III - Bez obawy zmiany są odwracalne, wystarczy zmienić plik .php i zapisać zmiany
  • 18. !18 MySQL settings - dane do połączenia z bazą danych define('DB_HOST', 'localhost'); define('DB_HOST', ’127.0.0.1:3307'); define('DB_HOST', ’localhost:3307'); define('DB_HOST', ’mysql.serwer.com:3307’); If your host uses Unix sockets or pipes, adjust the DB_HOST define('DB_HOST', '127.0.0.1:/var/run/mysqld/mysqld.sock'); define('DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock'); define('DB_HOST', 'mysql.serwer.com:/var/run/mysqld/mysqld.sock’); Możemy podać w inny sposób
  • 20. !20 Stałe związane z standardem kodowania i metodą porównywania znaków. define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ’ ’); Sortowanie odnosi się do kolejności sortowania liter, cyfr i symboli danego zestawu znaków. WordPress domyślnie używa zestawu znaków UTF-8 (utf8), a gdy tabele bazy danych MySQL WordPress są tworzone podczas procesu instalacji, MySQL przypisuje do tych tabel utf8_general_ci sortowanie. Możemy zmienić np.
 define('DB_COLLATE', 'utf8_turkish_ci');
  • 21. !21 Prefiks nazw tabel w bazie danych $table_prefix = 'wp_';
  • 22. !22 - III -
 Można go zmienić, trzeba pamiętać że zmian również należy dokonać w bazie danych. - II -
 Jeśli używamy różnych prefiksów to możemy w jednej bazie mieć tabele z 2 lub więcej różnych instalacji WordPress. Nie zalecane ze względów bezpieczeństwa. - I -
 Domyślnie jest ’wp_’, zalecana zmiana ze względów bezpieczeństwa. - IV -
 Możemy używać nastepujących znaków: liczby, litery i ‚ _ ’
  • 23. !23 Zmiana nazwy w tabeli użytkowników i opisu użytkowników define('CUSTOM_USER_TABLE', $table_prefix. 'my_users'); define('CUSTOM_USER_META_TABLE', $table_prefix. 'my_usermeta'); Może poprawić bezpieczeństwo robimy kopiując tabele w bazie, konsola sql np. CREATE TABLE tabela_2 LIKE tabela_1; INSERT INTO tabela_2 SELECT * FROM tabela_1;
  • 24. !24!24 Secret keys Unikatowe klucze uwierzytelniania i sole
  • 25. define('AUTH_KEY', '+g.0v}>vg^14lQ6|>>S DdpCqv.qNfgF:Yq^11^M(u_0]G_4Y!})8}*6mpU.[0Q}'); define('SECURE_AUTH_KEY', '@Es^xmIAo>C2N>qvCez`|:Op.Jj*.NyKZ/^6giX;$PqxLR9hT^U&qKClP1DH5T!7'); define('LOGGED_IN_KEY', 'b=FYw1eZ:7$v v&`Y+Pu:uwlot-:oB]`V}$G7Uac$zDS{*Qb[Wm*doBsaX*+wBeM'); define('NONCE_KEY', ' x%Iri3 S[[d^FZ:yxm+3=^OP:Z?(v.3Xgz3*N`J+JF,KzAX,~T AZ6R|3Np?k@!'); define('AUTH_SALT', 'jHa_j%8n=4#0E B-)XD -S|UV3V-?-:b[(PD_NQ7!&I<(vl}ZllQGw|5W{.H@y/<'); define('SECURE_AUTH_SALT', 'qs/E+y<-V9S1-%2zq6%w[KIS;Jv/),A*lrK|r >^<`jGGY-~Q1L6Ii~P$~j^C(&2'); define('LOGGED_IN_SALT', 'pndG UJ6KG7uE~6IU#4sUH=fl88{<M&vl2hkIUUg`=^Mt^=xOz[Fs$ }3u[P^*3A'); define('NONCE_SALT', 'Ck:FXf8j4Ry2[&FA$Nc}8.SYIIH/5_8VH2xSW6D;ly~:}}Zimvlcri}YI+g9~r}a');
  • 26. !26 - I -
 Klucze które zabezpieczają dane przechowywane ciasteczkach. - II -
 Zmiana któregokolwiek klucza spowoduje wylogowanie wszystkich zalogowanych użytkowników. - III -
 4 pierwsze klucze są wymagane. - IV -
 Tu możesz wygenerować nowe klucze: https://api.wordpress.org/secret-key/1.1/salt/
  • 27. Tryb debagowania - ustawienia
  • 28. !28 Używamy go na stronach testowych, wersjach dev. Na produkcji powinna być ustawiona wartość ma false define('WP_DEBUG', true);
  • 29. !29 Można też włączyć tryb debagowania bez wyświetlania błędów. Aby miało to sens zapisujemy błędy do pliku debug.log, który jest umieszczony w folderze /wp-content/ Ustawienia php muszą pozwalać na wyświetlanie błędów - można to zrobić w pliku php.ini define('WP_DEBUG', true); define(’WP_DEBUG_DISPLAY’, false); define(’WP_DEBUG_LOG’, true); Plik debug.log warto nadać upewnienia 600 tylko do odczytu i zablokować do niego dostęp z zewnątrz poprzez plik .htaccess <Files debug.log>     Order allow,deny     Deny from all </Files>
  • 30. !30 SCRIPT_DEBUG jest stałą pokrewną, która zmusi WordPress do używania wersji "dev" niektórych podstawowych plików CSS i JavaScript zamiast zminiaturyzowanych wersji, które normalnie są ładowane. Jest to przydatne, gdy testujesz modyfikacje wszystkich wbudowanych plików .js lub .css. define(’SCRIPT_DEBUG’, true); Niektóre skrypty nie honorują SCRIPT_DEBUG. Domyślna wartość to fałsz.
  • 31. !31 SAVEQUERIES zapisuje zapytania do bazy danych do tablicy. Tablica może być wyświetlana, aby pomóc w analizowaniu tych zapytań. 
 Stała zdefiniowana jako true powoduje, że każde zapytanie zostanie zapisane, jak długo trwało wykonywanie tego zapytania i jaka funkcja je wywołała. define('SAVEQUERIES', true); Tablica jest przechowywana w globalnych zapytaniach $wpdb->queries. UWAGA: będzie to miało wpływ na wydajność witryny, więc pamiętaj, aby wyłączyć tę opcję, gdy nie debugujesz. 
 Np. w pliku footer.php umieszczamy kod <?php if ( current_user_can( 'administrator' ) ) { global $wpdb; echo "<pre>"; print_r( $wpdb->queries ); echo "</pre>"; } ?>
  • 32. !32 Przykładowe ustawienie do debagowania // Enable WP_DEBUG mode define('WP_DEBUG', true); // Enable Debug logging to the /wp-content/debug.log file define('WP_DEBUG_LOG', true); // Disable display of errors and warnings define('WP_DEBUG_DISPLAY', false); @ini_set( 'display_errors', 0 ); // Use dev versions of core JS and CSS files (only needed if you are modifying these core files) define('SCRIPT_DEBUG', true);
  • 33. !33 Pamiętaj, że przedstawione zmiany powinny być w pliku wp-config.php przed linią z komentarzem: /* That's all, stop editing! Happy blogging. */ Debagowanie także możemy zrobić używając pluginów np: Query Monitor, Debug Bar, Log Deprecated Notices
  • 35. !35 define('DISALLOW_FILE_EDIT', true); Blokuje możliwość edycji plików motywów i wtyczek po zalogowaniu się do kokpitu WordPress
  • 37. !37 Kontrola nad mechanizmem automatycznych aktualizacji define('AUTOMATIC_UPDATER_DISABLED', true); Możemy wyłączyć całkowicie - ustawienie true, domyślnie jest false define('WP_AUTO_UPDATE_CORE', true); Ta stała określa czy aktualizacja WordPress mają być włączone dla wszystkich wersji true (wartość domyślna dla development site), wyłączone false lub włączone w ramach wersji głównej minor - wartość domyślna
  • 38. !38 Wyłączenie możliwość instalacji wtyczek i motywów define('DISALLOW_FILE_EDIT', true); define('DISALLOW_FILE_MODS', true); Blokuje możliwość instalacji wtyczek i motywów oraz edycji plików motywów i wtyczek po zalogowaniu się do kokpitu WordPress. Nie trzeba ustawiać razem DISALLOW_FILE_MODS i DISALLOW_FILE_EDIT obie będą działały tak samo
  • 41. !41 - II -
 Pozwala zdefiniować adres jaki wpisujemy w przeglądarce - I - 
 Pozwala zdefiniować adres gdzie znajdują się pliki główne, w tym przypadku jest to katalog „wordpress” - III -
 Przesłania to wartości podane w tabeli ale ich nie nadpisuje - IV -
 Na początku dajemy http lub https, nie podajmy na końcu „/”
  • 42. !42 Adres strony URL - opcjonalnie define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/path/to/wordpress'); define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME'] . '/path/to/wordpress'); define('WP_SITEURL', 'http://'.$_SERVER['SERVER_NAME'].'/wordpress'); define('WP_HOME', 'http://'.$_SERVER['SERVER_NAME']); Można to ustawić dynamicznie: 
 1. w oparciu o php wartość nagłówka HTTP_HOST 2. gdy apache jest skonfigurowany jako UseCanonicalName wartość „on”. SERVER_NAME jest ustawiony przez konfigurację serwera
  • 44. !44 Zmiany możemy wprowadzać dla nastepujących katalogów / folderów: wp-content - zawiera: motywy, wtyczki, pliki użytkownika. Stałe do zdefiniowania: WP_CONTENT_DIR (nazwa katalogu na serwerze) i WP_CONTENT_URL (adres URL katalogu) plugins - zawiera: wtyczki. Stałe do zdefiniowania:  WP_PLUGIN_DIR, i WP_PLUGIN_URL, mu-plugins - zawiera: wtyczki „must-use”, takie których nie można zdezaktywować. Stałe do zdefiniowania:  WPMU_PLUGIN_DIR, i WPMU_PLUGIN_URL uploads - tu trafiają pliki użytkownika przesłane do biblioteki mediów, także te zapisywane przez wtyczki Stałe do zdefiniowania:  UPLOADS
  • 45. !45 define('WP_CONTENT_DIR', dirname(__FILE__).'/newcontent'); define('WP_CONTENT_URL', ‚http://testowa.pl/newcontent'); define('WP_PLUGIN_DIR', WP_CONTENT_DIR.’/newplugins); define('WP_PLUGIN_URL', 'http://testowa/newcontent/newplugins' ); define('WP_PLUGIN_URL', WP_CONTENT_URL.'/newplugins'); define('PLUGINDIR', WP_CONTENT_DIR.’/newplugins'); define('WPMU_PLUGIN_DIR', WP_CONTENT_DIR . '/mu-plugins' ); define('UPLOADS', 'newupload/media'); Przykładowy kod
  • 46. !46 - I -
 Nie możemy przenieść katalogu/folderu themes (motywy) - II -
 Możemy zdefiniować nowy katalog / folder w którym będziemy umieszczać nasze motywy / motywy potomne - III - szczegóły: https://codex.wordpress.org/register_theme_directory
  • 47. !47!47 AutoSave Interval Zmiana czasu auto zapisu edytowanych postów
  • 48. !48 define('AUTOSAVE_INTERVAL', 160); // Seconds Podczas edytowania posta WordPress używa Ajax do automatycznego zapisywania poprawek do wpisu podczas edycji. Możesz zwiększyć to ustawienie, aby uzyskać dłuższe opóźnienia pomiędzy automatycznymi zapisami lub zmniejszyć ustawienie, aby upewnić się, że nigdy nie stracisz zmian. Wartość domyślna to 60 sekund.
  • 50. !50 define('WP_POST_REVISIONS', false); // całkowicie wyłączamy wersjonowanie define('WP_POST_REVISIONS', 3); // przechowujemy tylko 3 ostatnie wersje wpisu WordPress domyślnie zapisuje kopie każdej edycji dokonanej w poście lub stronie, umożliwiając przywrócenie poprzedniej wersji tego postu lub strony. Zapisywanie wersji może zostać wyłączone lub można określić maksymalną liczbę wersji dla jednego postu lub strony.
  • 54. !54 define('NOBLOGREDIRECT', ’http://testowa.pl'); Przekieruj nieistniejące „blog…” NOBLOGREDIRECT może być użyty do przekierowania przeglądarki, jeśli użytkownik próbuje uzyskać dostęp do nieistniejącej witryny przy użyciu subdomeny lub podfolderu. Np. Http://nonexistent.testowa.pl lub http://testowa.pl/nonexistent/.
  • 55. !55 Niefiltrowany HTML Wyłączenie dla wszystkich użytkowników
  • 56. !56 define('DISALLOW_UNFILTERED_HTML', true); Użytkownicy z rolami administratora lub edytora mogą publikować niefiltrowany kod HTML w postach i komentarzach. W WordPress Multisite tylko Super Admin może opublikować niefiltrowany HTML, ponieważ wszyscy inni użytkownicy są uznawani za niezaufanych. Aby wyłączyć niefiltrowany kod HTML dla wszystkich użytkowników, w tym dla administratorów, możesz dodać powyższą stałą.
  • 57. !57 Automatyczne opróżnianie kosza Gdybyśmy chcieli aby kosz opróżniał się automatycznie?
  • 58. !58 define('EMPTY_TRASH_DAYS', 30); // wpisy będą usuwane z kosza po 30 dniach Ustawienie tej zmiennej na 0 lub false nie spowoduje braku usuwania wpisów. Aby zablokować usuwanie wpisów należy podać możliwie długi czas na np 10 950 to ok 30 lat.

  • 60. !60 define('MEDIA_TRASH', true); W bibliotece mediów zamiast usuń pojawi się kosz define('MEDIA_TRASH', false); Wyłączenie kosza w bibliotece mediów
  • 62. !62 define('IMAGE_EDIT_OVERWRITE', true); Domyślnie WordPress tworzy nowy zestaw obrazów za każdym razem, gdy edytujesz obraz, a po przywróceniu oryginału pozostawia wszystkie modyfikacje na serwerze. Definiowanie IMAGE_EDIT_OVERWRITE jako true zmienia to zachowanie. Tylko jeden zestaw zmian obrazu zostanie utworzony, a po przywróceniu oryginału zmiany zostaną usunięte z serwera.
  • 64. !64 Zmiana limitu pamięci dla PHP define('WP_MEMORY_LIMIT', '64M'); // ustawiamy limit pamięci na 64 MB Domyślna wartość 64MB. Zmiana jest możliwa jeśli hosting na to pozwala. define('WP_MAX_MEMORY_LIMIT', ’128M’); //ustawiamy limit pamięci dla panelu na 128 MB Osobny limit pamięci dla panelu admina
  • 66. !66 define('WP_CACHE', true); Ustawienie WP_CACHE, jeśli jest true, zawiera skrypt wp-content / advanced-cache.php podczas wykonywania wp-settings.php.
  • 68. !68 define('WP_ALLOW_REPAIR', true); WordPress posiada wbudowane narzędzie do sprawdzania i naprawy uszkodzonych tabel. Domyślnie jest wyłączone. Wykona ono sprawdzenie tabel w bazie danych (CHECK), naprawę tych, które zostały rozpoznane jako uszkodzone (REPAIR) oraz analizę (ANALYZE) i optymalizację (OPTIMIZE) wszystkich tabel. Narzędzie możemy uruchomić wpisując w przeglądarce adres  http://testowa.pl/wp-admin/maint/repair.php.
  • 69. !69 WP Cron & Cron timeout Zastosowanie crona np. publikowanie zaplanowanych wpisów, uruchamianie cykliczne skryptów.
  • 70. !70 define('DISABLE_WP_CRON', true); define('WP_CRON_LOCK_TIMEOUT', 60); Pierwsza linia wyłącza crona WordPress Druga określa jak często mogą być uruchomiane procesy, czas w sekundach Uwaga ! Działanie crona jest uzależnione od ruchu na stronie. Jeśli nie ma ruchu na stronie a chcemy korzystać z funkcjonalności crona to lepiej używać systemowego corn’a serwera
  • 72. !72 define('FORCE_SSL_ADMIN', true); Jeśli używamy ssl (https), to nie musimy tego ustawiać. Jeśli strona nie ma ssl, a chcemy wymusić połączenie szyfrowane np używając samodzielnie podpisanego certyfikatu to ustawiamy wartość na true
  • 74. !74 // sposób podawania. define ('FS_CHMOD_DIR', (0755 & ~ umask ())); define ('FS_CHMOD_FILE', (0644 i ~ umask ())); FS_CHMOD_DIR - Stała definiuje uprawnienia do katalogów (domyślnie (0755)) FS_CHMOD_FILE - Stała definiuje uprawnienia do plików (domyślnie (0644)) FS_CONNECT_TIMEOUT - Stała definiuje limit czasu dla budowania połączenia (domyślnie 30 sekund) FS_METHOD - Stała definiuje sposób łączenia z systemem plików (Wartości: direct | ssh | ftpext | ftpsockets) FS_TIMEOUT - Stała definiuje limit czasu po utracie połączenia (domyślnie 30 sekund) FTP_SSH Stała definiuje aktywowanie lub nie SSH (Wartości: true | false) FTP_USER Stała definiuje użytkownika FTP
  • 76. - I - Zablokować dostęp do pliku poprzez .htaccess <files wp-config.php> order allow,deny deny from all </files>
  • 77. - II - Zmienić uprawnienia do plików Domyślnie uprawnienia dla WordPress są Foldery – 775 Pliki – 644 Warto zmienić na dla plików: wp-config.php oraz .htaccess – 444 lub 400 (w zależności od dostępnych uprawnień na serwerze)
  • 78. - III - Przenieść cześć newralgicznych danych do innego pliku define(’DB_NAME’, ’name db’); define('DB_USER', 'root'); define('DB_PASSWORD', 'root'); define('DB_HOST', 'localhost'); define('DB_CHARSET', ’utf8mb4'); define('DB_COLLATE', ’ ’); db-conf.php /** dołączanie pliki. */ require_once ( ’db-conf.php' ); /** Absolutna ścieżka do katalogu WordPressa. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Ustawia zmienne WordPressa i dołączane pliki. */ require_once(ABSPATH . 'wp-settings.php'); wp-config.php
  • 79. - IV - Przenieść cześć newralgicznych danych do pliku w innej lokalizacji niż strona (jeśli ustawienia hostingu na to pozwalają) <?php /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Location of your WordPress configuration. */ require_once(ABSPATH . '../phpdocs/wp-config.php'); open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/" W konfiguracji PHP dodaj nową ścieżkę do dyrektywy open_basedir:
  • 80. Marcin Jóźwiak www.dreamfocus.pl zdjęcia użyte w prezentacji www.pexels.com oraz zasoby własne Dziękuję