WordPress: nelze zapisovat do .htaccess

Pokud se vám někdy stalo, že se vám v administraci redakčního systému WordPress zobrazila v sekci Nastavení – Trvalé odkazy chyba ohledně toho, že není možné zapisovat do souboru .htaccess, tak já osobně jsem se setkal v praxi se dvěma důvody, kterými to může být způsobeno. Pojďme si oba důvody nyní projít.

Špatně nastavená práva k souboru

První případ je vcelku jasný a triviální. Do souboru nelze zapisovat v případě, že k němu aplikace nemá přístup, tj. u souboru .htaccess jsou nastavena nedostatečná práva zápisu.

Několik možných řešení

To lze opravit jednoduše např. těmito způsoby:

  • přenastavením práv pomocí (S)FTP klienta např. na hodnotu 666
  • přenastavením práv na linuxovém serveru zadáním:
    chmod -v 666 .htaccess

Špatně zadané údaje v databázi

Další a již už zajímavější případ, kdy jsem se s touto chybou setkal, je po chybné editaci údajů v databázi. V tomto případě se jednalo o chybně zadanou hodnotu v tabulce wp_options (prexix tabulky nejčastěji bývá u WordPressu wp_, pokud jej při instalaci nezměníte na jiný) u „home“, kde bývá zadaná URL adresu webu.

U home je URL zadaná bez http(s)://

V případě, že ručně změníte URL adresu na něco typu mujnejlepsiblogisek.cz namísto https://mujnejlepsiblogisek.cz, zobrazí se vám také v sekci Nastavení – Trvalé odkazy chyba s nemožností zapisovat do souboru .htaccess (kromě toho, že tedy budou pravděpodobně i chybně fungovat trvalé odkazy apod.). Ti pokročilejší, co si zobrazí i PHP chyby a upozornění, mohou získat i detailnější informace v podobném znění:

Warning: is_writable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/xxx/xxx/xxx:/xxx/xxx/xxx) in /xxx/xxx/xxx/wp-admin/options-permalink.php on line 81

Warning: is_writable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/xxx/xxx/xxx:/xxx/xxx/xxx) in /xxx/xxx/xxx/wp-admin/includes/misc.php on line 209

Pokud nahlédneme do uvedeného zdrojového kódu, tak zjistíme, že je v něm používaná na daných místech proměnná $home_path, kde dle všeho právě musí figurovat kompletní URL adresa včetně http(s)://.

Několik možných řešení

V tomto konkrétním případě je tedy potřeba změnit hodnotu „home“ v databázi na správnou adresu. Učinit tak lze samozřejmě také více způsoby, např.:

  • přes rozhraní adminer
  • přes rozhraní phpMyAdmin
  • zadáním přímo dotazu do databáze v podobném znění:
    UPDATE `sablona1_options` SET
    `option_id` = '33',
    `option_name` = 'home',
    `option_value` = 'https://mujnejlepsiblogisek.cz',
    `autoload` = 'yes'
    WHERE `option_id` = '33';

Publikováno 20.2.2017 v 02:22 | Kategorie: Wordpress

PHP: výpis PTR z DNS s více záznamy

V jednom ze starších příspěvků, který naleznete zde, jsem popisoval možnost, jak si v PHP vygenerovat tabulku s doménami, u kterých hromadně provedeme příkaz ping a posléze získáme i PTR (reverzní) záznamy z DNS. Co když ale chceme prověřit, zda IP adresa vrací více než jeden PTR záznam? Původní řešení vrátí totiž jen jeden.

Vlastní skript

Pojďme bez dalších okolků rovnou na věc, tedy na zdrojový kód. Nečekejte žádné sofistikované řešení, ale funkční to je. Řešení pro vrácení více PTR záznamů může vypadat tedy např. takto:

<html>
<body>
<table style="border-collapse:collapse;border:1px solid gray;width:100%;">
<tr><th>IP</th><th>PTR</th></tr>
<?php
 $names = file('ip.txt');
 foreach ($names as $name) {
 
 $ip = substr($name, 0, -1);

$ip2 = explode(".", $ip);
$ip2 = array_reverse($ip2);
$ip2 = implode(".", $ip2);
$ip2 = dns_get_record($ip2.".in-addr.arpa", DNS_PTR);
$tmp = [];
foreach($ip2 as $record) {
   if($record['type'] != 'PTR') continue;
   $tmp[] = $record['target'];
}

$ip2 = implode(", ", $tmp);

echo "<tr><td>$ip</td><td>$ip2</td></tr>";
 }
?>


</table>
</body>
<html>

Skript pracuje s textovým souborem, který je umístěň ve stejné adresářové úrovni a kde je jednoduše zapsán seznam IP adres.Tedy něco jako:

216.58.201.78
31.13.73.36
104.244.42.193
130.89.148.14
195.46.50.112

Spuštěný kód pak může vypadat nějak takto:

IP PTR

Publikováno 4.2.2017 v 19:00 | Kategorie: PHP