Changeset 110788 in spip-zone


Ignore:
Timestamp:
Jun 21, 2018, 10:17:57 AM (3 years ago)
Author:
marcimat@…
Message:
  • Améliorer la recherche du la racine de SPIP lorsque nous sommes dans un répertoire lié via lien symbolique.
  • Afficher dans le test:spip le nom et l’adresse du site.

Un cas ennuyant pouvait se présenter lorsqu’on lançait la commande spip-cli dans un sous répertoire de SPIP,
qui est un lien symbolique vers un répertoire en dehors de la racine du SPIP.
Deux cas par exemple :

  • un plugin dans le réertoire plugins, lié par un lien symbolique
  • le répertoire 'sites' d’une mutualisation provenant par exemple de '/mnt/sites' ou '/var/sites' ...

Lorsqu’on se plaçait, dans ce cas là, dans "racine_spip/sites/xxx" et qu’on lance spip-cli, il ne retrouvait pas
la racine SPIP car la fonction getcwd() résout les liens, et la fonction de recherche cherchait la racine spip dans '/var/sites',
plutôt que dans le dossier d’origine où on a lancé la commande.
Pour corriger, on préfère utiliser exec('pwd') qui lui prend le chemin source (sous linux/macos en tout cas).

Location:
_outils_/spip-cli/trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _outils_/spip-cli/trunk/src/Command/TestSpipCommand.php

    r110776 r110788  
    3535                        return;
    3636                }
     37                if (!$this->affchicherUrlSite()) {
     38                        return;
     39                }
    3740                if (!$this->testPdoRequete()) {
    3841                        return;
     
    4144                        return;
    4245                }
     46
    4347        }
    4448
     
    107111                } catch (\Exception $e) {
    108112                        $io->fail('Echec de chargement du PDO');
    109                         $io->fail('DSN: ' . $sql->getPdoDsn($sql->getInfo()));
     113                        if ($sql) {
     114                                $io->fail('DSN: ' . $sql->getPdoDsn($sql->getInfo()));
     115                        }
    110116                        $io->fail($e->getMessage());
    111117                        return false;
     
    137143        }
    138144
     145        public function affchicherUrlSite() {
     146                $io = $this->io;
     147                try {
     148                        /** @var Sql $sql */
     149                        $sql = $this->getApplication()->getService('spip.sql');
     150                        $adresse = $sql->getMeta('adresse_site');
     151                        $nom = $sql->getMeta('nom_site');
     152                } catch (\Exception $e) {
     153                        $io->fail('Echec d’optention de l’adresse du site');
     154                        $io->fail($e->getMessage());
     155                        return false;
     156                }
     157                $io->text([
     158                        "",
     159                        "<info>Nom du site :</info> $nom",
     160                        "<info>Adresse du site :</info> $adresse",
     161                        ""
     162                ]);
     163                return true;
     164        }
     165
    139166        public function printQueryResults($results) {
    140167                $io = $this->io;
  • _outils_/spip-cli/trunk/src/Loader/Spip.php

    r110787 r110788  
    5050        }
    5151
     52        /**
     53         * Calcul de chemin de travail actuel,
     54         *
     55         *
     56         * @note
     57         * La fonction getcwd() résout les liens symboliques
     58         * contrairement à un appel à `pwd`
     59         *
     60         * Par exemple si on est dans "racine_spip/sites/domaine.tld"
     61         * et que le répertoire "sites" est un lien symbolique sur
     62         * un répertoire en dehors de la racine de spip
     63         * (tel que /mnt/sites ou /home/sites), la fonction
     64         * php getcwd() résout le lien, ce qui fait
     65         * que la racine de SPIP n’est plus retrouvée.
     66         *
     67         * On préfère retourner le chemin sans sans tenir résoudre les liens symboliques
     68         *
     69         * @return string
     70         */
     71        public function getcwd() {
     72                if ($cwd = exec('pwd')) {
     73                        return $cwd;
     74                }
     75                return getcwd();
     76        }
    5277
    5378        /**
     
    5883         * est pas dans l'arborescence d'un site SPIP.
    5984         *
     85         * @note Il faut faire attention à la résolution des liens symboliques !
     86         *
    6087         * @return string|bool
    6188         *              Retourne le chemin vers la racine du SPIP dans lequel on se trouve.
     
    6390         */
    6491        private function chercher_racine_spip() {
    65                 $cwd = getcwd();
     92                $cwd = $this->getcwd();
    6693                while ($cwd) {
    6794                        if (file_exists(Files::formatPath($cwd . DIRECTORY_SEPARATOR . $this->starter))) {
     
    91118                }
    92119                // Si pas de répertoire 'sites', pas la peine de chercher...
    93                 $cwd = explode(DIRECTORY_SEPARATOR, getcwd());
     120                $cwd = explode(DIRECTORY_SEPARATOR, $this->getcwd());
    94121                if (!in_array($this->dir_sites, $cwd)) {
    95122                        return false;
     
    105132                                if (file_exists($connect_file)) {
    106133                                        try {
    107                                                 $adresse = (new Sql($connect_file))->getAdresseSite();
     134                                                $adresse = (new Sql($connect_file))->getMeta('adresse_site');
    108135                                                if ($adresse) {
    109136                                                        $host = parse_url($adresse, PHP_URL_HOST);
     
    149176
    150177                if (!$this->exists()) {
    151                         throw new \Exception('SPIP has not been found in ' . $this->directory);
     178                        throw new \Exception('SPIP has not been found in ' . ($this->directory ? $this->directory : $this->getcwd()));
    152179                }
    153180
  • _outils_/spip-cli/trunk/src/Loader/Sql.php

    r110776 r110788  
    155155        }
    156156
    157         public function getAdresseSite() {
     157        public function getMeta($meta) {
     158                if (!is_string($meta) or !$meta) {
     159                        throw new \Exception("A string meta name is needed. Given : " . gettype($meta));
     160                }
    158161                /** @var \PDO $pdo */
    159162                $pdo = $this->getPdo();
    160163                $query = $pdo->prepare('SELECT valeur FROM spip_meta WHERE nom=:nom');
    161                 $query->bindValue(':nom', 'adresse_site', \PDO::PARAM_STR);
     164                $query->bindValue(':nom', $meta, \PDO::PARAM_STR);
    162165                $query->execute();
    163                 $adr = $query->fetchColumn();
    164                 return trim($adr);
     166                $meta = $query->fetchColumn();
     167                return $meta;
    165168        }
    166169}
Note: See TracChangeset for help on using the changeset viewer.