Autor Zpráva
lukasberan
Profil
Ahojte.

Mám externí databázi (na jiném serveru než je fyzicky web a tedy i Adminer), na které mám vynucené zabezpečené spojení. Pokud zabezpečení deaktivuji, tak se z Admineru bez problému k databázi připojím. Pokud zabezpečení aktivuji, tak se nepřipojím, což je v pořádku, protože Adminer sám o sobě zabezpečené spojení neumí. Stáhl jsem si tedy rozšíření login-ssl, které tuhle funkci do Admineru přidá. Adresářovou strukturu jsem nastavil jak je popsané v pokynech. Mám tedy soubor adminer.php (základní adminer soubor) v rootu + mám v rootu soubor index.php
<?php
function adminer_object() {
    // required to run any plugin
    include_once "./plugins/plugin.php";
    
    // autoloader
    foreach (glob("plugins/*.php") as $filename) {
        include_once "./$filename";
    }
    
    $plugins = array(
        // specify enabled plugins here
        new AdminerLoginSsl
    );
    
    /* It is possible to combine customization and plugins:
    class AdminerCustomization extends AdminerPlugin {
    }
    return new AdminerCustomization($plugins);
    */
    
    return new AdminerPlugin($plugins);
}

// include original Adminer or Adminer Editor
include "./adminer.php";
?>

A pak mám složku plugins, kde mám samotný soubor toho pluginu login-ssl.php a stažený soubor plugin.php, který je podle návodu povinný pro všechny pluginy.

Problém ale je, že dostávám chybu 500, když chci načíst stránku. Z detailnějších informací v logu vidím následující:
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AdminerLoginSsl::__construct(), 0 passed in D:\home\site\wwwroot\adminer\index.php on line 13 and exactly 1 expected in D:\home\site\wwwroot\adminer\plugins\login-ssl.php:16 Stack trace: #0 D:\home\site\wwwroot\adminer\index.php(13): AdminerLoginSsl->__construct() #1 D:\home\site\wwwroot\adminer\adminer.php(1558): adminer_object() #2 D:\home\site\wwwroot\adminer\index.php(26): include('D:\\home\\site\\ww...') #3 {main} thrown in D:\home\site\wwwroot\adminer\plugins\login-ssl.php on line 16

Takže to vypadá, že bych měl tomu pluginu předat ještě nějaké argumenty, ale vůbec netuším jaké.

Dokázal by prosím někdo poradit?
TomášK
Profil
Takže to vypadá, že bych měl tomu pluginu předat ještě nějaké argumenty, ale vůbec netuším jaké.

Máš odkaz na soubor a řádek (D:\home\site\wwwroot\adminer\plugins\login-ssl.php:16), kde se nachází metoda, kterou voláš a které chybí parametry. Podívej se na tam a uvidíš, co je potřeba předat. Stručný popis je v komentáři u metody. Pokud mu nerozumíš, pošli ho sem a zeptej se.
lukasberan
Profil
Přiznám se, že tohle je úplně mimo mé znalosti. V PHP nedělám, takže netuším. Obsah toho souboru login-ssl.php je přímo originál stažený ze stránek Admineru.
<?php

/** Connect to MySQL using SSL
* @link https://www.adminer.org/plugins/#use
* @author Jakub Vrana, https://www.vrana.cz/
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerLoginSsl {
    /** @access protected */
    var $ssl;
    
    /** 
    * @param array array("key" => filename, "cert" => filename, "ca" => filename)
    */
    function __construct($ssl) {
        $this->ssl = $ssl;
    }
    
    function connectSsl() {
        return $this->ssl;
    }
    
}
TomášK
Profil
Přiznám se, že tohle je úplně mimo mé znalosti. V PHP nedělám, ...
Já taky ne, ale tohle není o PHP. Kouknout se na zdroják a přečíst dokumentaci metody není nic PHP specifického. Ta funkce chce argument, který má být pole obsahující ("key" => filename, "cert" => filename, "ca" => filename). Až sem by ses měl dočíst, pokud programuješ v podstatě v čemkoliv.

Dál to už není tak přímočaré, filename bude tipuju řetězec s názvem souboru, který obsahuje klíč (ke klientskému certifikátu), klientský certifikát, a certifikát autority, která vydala certifikát serveru. Tipuju, že klientský certifikát a klíč bude nepovinný, nejspíš by se šlo prolouskat zdrojáky až k metodě, která to používá a v její dokumentaci to bude popsané.
lukasberan
Profil
Já neprogramuji v ničem právě :-) Je to ale divné, proč to chce takové šílenosti, když z webové aplikace (WordPress) se k té databázi připojím bez problému a stejně tak i z MySQL Workbench. Certifikát na tom databázovém serveru je vydaný důvěryhodnou certifikační autoritou.
lukasberan
Profil
Tak už to funguje. Stačilo tam přidat cestu ke kořenovému certifikátu autority, viz krok 1 zde docs.microsoft.com/cs-cz/azure/mysql/howto-configure-ssl a pak se jen odkázat na ten stažený certifikát
new AdminerLoginSsl("bin/root.pem")

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0