Poniższe porady dotyczą języków: HTML, CSS, JavaScript i PHP oraz innych technologii przydatnych webmasterom.
Spis treści:
W tym celu otwieramy plik "/etc/apache2/apache2.conf" i zamieniamy wiersz:
# AccessFileName .htaccess
na:
AccessFileName .htaccess
Możliwe, że wiersz ten będzie już bez komentarza.
Następnie zmieniamy kod:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
na:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Po tych czynnościach wymagane jest jeszcze ponowne uruchomienie usługi serwera WWW poleceniem:
sudo service apache2 restart
Testowane w programie:
Firefox 93.0 (64-bity) (Xubuntu 20.04 LTS), Apache 2.4, PHP 7.4.
Źródła wiedzy:
W Ubuntu GNU/Linux maksymalny czas trwania sesji przechowywany jest w pliku "/etc/php/7.2/apache2/php.ini" (7.2 to zainstalowana wersja PHP). Najprostszy sposób zmiany maksymalnego czasu trwania sesji w PHP to zmiana w tym pliku zmiennej "session.gc_maxlifetime". Aby ustawić maksymalny czas np. na 2 godziny (7200 sekund), należy zmienić zawartość wiersza 1433 (w innych wersjach PHP numer wiersza może być nieco inny) z:
session.gc_maxlifetime = 1440
na:
session.gc_maxlifetime = 7200
Jeśli brak jest dostępu do tego pliku rozwiązanie jest trochę bardziej złożone - patrz: źródło wiedzy.
Testowane w programie:
Firefox 66.0.3 (64-bity) (Xubuntu 18.04 LTS), Apache 2.0, PHP 7.2.
Źródło wiedzy:
https://slick.pl/kb/php/php-przedwczesny-timeout-sesji/
Służy do tego moduł "XDebug". Oto jego instalacja w Xubuntu 18.04:
sudo apt install php-xdebug
sudo service apache2 restart
W pliku "/etc/php/.../apache2/php.ini" należy ustawić zmienną:
html_errors = On
W pliku "/etc/php/.../apache2/php.ini" można ustawić także zmienne:
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
Aby włączyć automatyczne tworzenie plików "cachegrind" generowanych przez moduł "XDebug" do profilowania kodu, w pliku "/etc/php/7.2/apache2/conf.d/20-xdebug.ini" należy dodać poniższe wpisy:
zend_extension=xdebug.so
xdebug.profiler_enable=On
xdebug.profiler_output_dir=/home/uzytkownik/xdebug
W Xubuntu podczas zapisywania do domyślnego katalogu "/tmp" tworzone są dodatkowe katalogi i nie ma dostępu do utworzonych plików. Dlatego w pliku "/etc/php/.../apache2/php.ini" należy zamienić ścieżkę generowanych plików na inną z prawami do zapisu (opcja: "xdebug.profiler_output_dir").
Do analizy plików "cachegrind" można wykorzystać program "KcacheGrind", który można zainstalować w następujący sposób (poniższe polecenie instaluje pakiet programów w skład którego wchodzi program "KcacheGrind"):
sudo apt install kdesdk
Przydatne funkcje PHP modułu "XDebug":
echo xdebug_get_profiler_filename();
echo xdebug_peak_memory_usage();
xdebug_start_trace('plik', 0);
// kod PHP
xdebug_stop_trace();
Po instalacji w przeglądarce internetowej dodatku np. "Xdebug helper" można debugować skrypty PHP m. in. w takich IDE, jak: Eclipse i Netbeans (do nauczenia).
Testowane w programie:
Xubuntu 18.04.4 LTS, Apache 2.0, PHP 7.2.
Źródła wiedzy:
https://lucidar.me/en/aws-cloud9/how-to-install-and-configure-xdebug-on-ubuntu/
https://stackoverflow.com/questions/3450500/xdebug-profiling-in-php-cant-get-output
https://stackoverflow.com/questions/8076743/xdebug-profiler-is-not-working
Jedną z przyczyn mogą być ograniczenia wynikające z domyślnych ustawień w pliku konfiguracyjnym serwera PHP (w przypadku PHP 7.2 ścieżka dostępu do tego pliku to: "/etc/php/7.2/php.ini").
Rozwiązaniem problemu może być zwiększenie wartości dla następujących zmiennych (nie zaleca się wyłączać ograniczeń (wartość 0). Oto przykładowe wartości (można je zwiększyć jeszcze bardziej):
max_execution_time = 90 # 0 - brak ograniczeń (nie zalecane)
upload_max_filesize = 90
memory_limit = 128M # -1 - brak ograniczeń (nie zalecane)
post_max_size = 10M # 0 - brak ograniczeń (nie zalecane)
upload_max_filesize = 20M
max_file_uploads = 20
max_input_vars = 2000
UWAGA: wartość zmiennej "post_max_size" powinna być większa, niż wartość zmiennej "upload_max_filesize".
Testowane w programie:
Xubuntu 18.04.3 LTS, Apache 2.0, PHP 7.2.
Źródło wiedzy:
W Ubuntu GNU/Linux maksymalny czas trwania sesji przechowywany jest w pliku "/etc/php/7.2/apache2/php.ini" (7.2 to zainstalowana wersja PHP). Najprostszy sposób zmiany maksymalnego czasu trwania sesji w PHP to zmiana w tym pliku zmiennej "session.gc_maxlifetime". Aby ustawić maksymalny czas np. na 2 godziny (7200 sekund), należy zmienić zawartość wiersza 1433 (w innych wersjach PHP numer wiersza może być nieco inny) z:
session.gc_maxlifetime = 1440
na:
session.gc_maxlifetime = 7200
Jeśli brak jest dostępu do tego pliku rozwiązanie jest trochę bardziej złożone - patrz: źródło wiedzy.
Testowane w programie:
Firefox 66.0.3 (64-bity) (Xubuntu 18.04 LTS), Apache 2.0, PHP 7.2.
Źródło wiedzy:
https://slick.pl/kb/php/php-przedwczesny-timeout-sesji/
W tym celu można wykorzystać narzędzie o nazwie "Browserling" znajdującego się pod adresem:
Testowane w programie:
Firefox 65.0 (64-bity) (Xubuntu 18.04 LTS).
Źródło wiedzy:
Poniższy kod można wykorzystać m. in. do usuwania elementów po dodatkowym potwierdzeniu. W tym celu w języku JavaScript należy użyć funkcji "confirm" oraz "window.location" w następujący sposób:
<a href="#" onclick="(confirm('?')? window.location='index.php?delete&id=1':'')">
Usuwanie elementu o id równym 1</a>
Zamiast skryptu PHP można wstawić dowolny adres URL: dokument HTML, adres e-mail, itd.
Testowane w programie:
Firefox 63.0 (64-bity) (Xubuntu 18.04 LTS).
Źródło wiedzy:
https://stackoverflow.com/questions/5021110/using-window-location-and-return-confirm-together
Aby usunąć wybrany wpis autouzupełniania kontrolki formularza, należy na tej kontrolce dwukrotnie kliknąć myszą, następnie strzałkami na klawiaturze [↓] lub [↑] wskazać wpis do usunięcia i nacisnąć klawisz [Delete] (również na klawiaturze).
Testowane w programie:
Firefox 62.0 (64-bity) (Xubuntu 16.04 LTS).
Źródło wiedzy:
https://support.mozilla.org/pl/kb/automatyczne-uzupelnianianie-formularzy
W PHP 7.0 funkcja "crypt" nie jest już zalecana. Zamiast tego powinno stosować się funkcje "password_hash" oraz "password_verify".
Oto najprostszy przykład kodu wykorzystującego nowy sposób szyfrowania haseł:
<?php
$hash = password_hash('abc', PASSWORD_DEFAULT);
if (password_verify('abc', $hash)) echo '<p>OK: hasło jest prawidłowe.</p>';
else echo '<p>BŁĄD: hasło NIE JEST prawidłowe.</p>';
?>
Więcej informacji na ten temat znajduje się pod adresami podanymi poniżej w źródłach wiedzy.
Testowane w programie:
Apache 2, PHP 7.0 (Xubuntu 16.04 LTS).
Źródła wiedzy:
W tym celu w pliku PHP, dla którego błędy chcemy zobaczyć, należy dopisać następujący kod:
<?php
ini_set( 'display_errors', 'On' );
error_reporting( E_ALL | E_STRICT );
?>
Aby błędy wyświetlały się automatycznie - bez dodawania powyższego kodu - należy ustawić konfigurację pliku "/etc/php/7.2/apache2/php.ini" (dla PHP w wersji 7.2) w następujący sposób:
error_reporting = E_ALL | E_STRICT # około wiersza 460
display_errors = On # Off - wyłącza wyświetlanie błędów # około wiersza 478
Dla PHP w wersji 5.x nazwa pliku konfiguracyjnego to: "/etc/php5/apache2/php.ini".
Na koniec należy ponownie uruchomić serwer WWW poleceniem:
sudo service apache2 restart
albo
sudo systemctl restart apache2
albo
sudo /etc/init.d/apache2 restart
Testowane w programie:
Apache 2, PHP 7.0 (Xubuntu 16.04 LTS), Apache 2, PHP 7.2 (Xubuntu 18.04 LTS).
Źródło wiedzy:
http://forum.php.pl/PHPJak_domyslnie_wlaczyc_wyswietlanie_bledow_w_PHP_t199639.html
Aby sprawdzić, czy podana tablica jest tablicą pustą, można użyć poniższej funkcji:
// Check, if array is empty
function is_array_empty(array $array)
{
return ($arr === array());
}
Aby sprawdzić, czy podana tablica jest niepustą tablicą sekwencyjną, można użyć poniższej funkcji:
// Check, if array is not empty sequential array
function is_array_seq(array $array)
{
if ($arr === array()) return null;
return array_keys($arr) === range(0, count($arr) - 1);
}
Aby sprawdzić, czy podana tablica jest niepustą tablicą asocjacyjną, można użyć poniższej funkcji:
// Check, if array is not empty associative array
private function is_array_assoc(array $array)
{
if ($arr === array()) return null;
return array_keys($arr) !== range(0, count($arr) - 1);
}
Testowane w programie:
Apache 2, PHP 7.0.
Źródło wiedzy:
http://stackoverflow.com/questions/173400/how-to-check-if-php-array-is-associative-or-sequential
Przetwarzanie danych w formacie CSV:
$csv = "id,nazwa,cena,zarezerwowane\n1,Odkurzacz,199.9,TAK\n1,Radio,249.9,NIE";
$dane = explode("\n", $csv);
$naglowek = str_getcsv(array_shift($dane));
$tabela = array();
foreach ($dane as $rekord) $tabela[] = array_combine($naglowek, str_getcsv($rekord));
echo '<pre>'. print_r($tabela, true). '</pre>';
Przetwarzanie danych w formacie JSON:
$wejscie_json = '{"a":[1, 2.3], "b":["tekst", true]}';
$tabela = json_decode($wejscie_json, true);
echo '<pre>'. print_r($tabela, true). '</pre>';
$wyjscie_json = json_encode($tabela);
echo '<pre>'. $wyjscie_json. '</pre>';
Testowane w programie:
Apache 2, PHP 7.0.
Źródło wiedzy:
http://stackoverflow.com/questions/8353203/str-getcsv-into-a-multidimensional-array-in-php
Służy do tego funkcja "iconf". Oto przykład użycia tej funkcji:
$str = iconv("utf-8", "iso-8859-2", $str);
Testowane w programie:
Apache 2, PHP 7.0.
Źródła wiedzy:
dobór kolorów: http://www.colorschemer.com/online.html;
generator PESEL: http://pesel.cstudios.pl/Ogeneratorze/GeneratorOnLine.aspx;
generator CSS3: http://css3generator.com/;
generator favicon: http://www.favikon.com/;
grafiki wskazujące ładowanie: http://www.ajaxload.info/;
kompresja JS: http://jscompress.com/;
piksele, milimetry, punkty: http://www.translatorscafe.com/cafe/units-converter/typography/calcula…;
lista miast, kodów pocztowych, krajów: http://meta-info.appspot.com/mlist, http://piotr.eldora.pl/bazy-danych-kody-pocztowe-imiona-panstwa;
testuj wygląd tekstu: http://www.typetester.org/.
Testowane w programie:
Apache 2, PHP 7.0.
Źródło wiedzy: