Pré-configuration d'une installation

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonsoir,

Je cherche à faire un script php pour pré-configurer l'installation d'un site drupal, en mode multi-site.
Je penses qu'il y a comme un problème de transmission de la variable $settings à donner en paramètre de la fonction d'installation install_drupal(), qui se situe dans includes/install.core.inc
En effet, des la première étape, vérification de l'existence de settings.php, la fonction d'installation va chercher dans sites/default, au lieu de regarder dans le fichier que je lui es spécifié.

$value est un tableau qui contiens des informations récupéré par une requête SQL.

define('MAINTENANCE_MODE', 'install');
define('DRUPAL_ROOT', getcwd());
$mysettings = build_settings($value);
require_once (DRUPAL_ROOT . '/includes/install.core.inc');
echo "database: " . $mysettings["forms"]["install_settings_form"]["database"] . "<br>";
echo "prefix: " . $mysettings["forms"]["install_settings_form"]["db_prefix"] . "<br>";
install_drupal($mysettings);
echo "Felicitation, votre site a ete cree !!";

function build_settings(&$value)
{
return array(
  # First, tell Drupal you are not using the interactive installer.
  'interactive' => FALSE,

  # This part is required for multisite support. The keys
  # you put here overwrite the $SERVER array, allowing Drupal
  # to find a site path (in this case, localhost.my.site, my.site etc.
  'server' => array(
    'HTTP_HOST' => 'localhost',
    'SCRIPT_NAME' => 'sites/' . $value["adresse"],
  ),

  # Next, choose the profile and locale Drupal should use.
  # The profile must be in a ./profiles/$profile/ folder.
  'parameters' => array(
    'profile' => 'standard',
    'locale' => 'en',
  ),

  # This is the data that will be submitted to the various
  # forms in the installation wizard.
  'forms' => array(
    # Database configuration.
    'install_settings_form' => array(
      'driver' => 'mysql',
      'database' => 'mybdd',
      'username' => 'myusername',
      'password' => 'mypwd',
      'host' => 'localhost',
      'port' => '',
      'db_prefix' => $value["id"] . '_',
    ),
    # Site information, and the data of the root user.
    'install_configure_form' => array(
    'site_name' => $value["name"],
    'site_mail' => 'contact@mysite.fr',
    'account' => array(
      'name' => 'root',
      'mail' => 'contact@mysite.fr',
      'pass' => array(
        # This is a bit of a WTF, but that's the way it works.
        # Even non-interactively, password fields require two identical values.
        'pass1' => 'root',
        'pass2' => 'root',
      ),
    ),

    # This is the timezone of the Drupal site. You can find the
    # PHP timezone strings at http://php.net/timezones
    'site_default_country' => 'DE',
    'date_default_timezone' => 'Europe/Berlin',

    'clean_url' => TRUE,

    # Check for updates:
    #   array() = off,
    #   array(1) = on,
    #   array(1, 2) = on, and notify by email
    'update_status_module' => array(),
    ),
  ),
);
}

Les deux echo affiche bien les informations que qui sont entré dans $mysettings
Et pourtant les données semble mal transmise à la fonction...
J'ai créé le fichier settings.php dans default pour essayer, mais malgré les informations correcte, entré dans $mysettings, la fonction d'installation n'arrive pas à se connecter à la BDD et m'écris une erreur en me disant que le nom de la bdd et l'utilisateur doivent être indiqué.

Avez-vous une idée d'où cela peut venir ?
Merci d'avance de vos réponses.

Forum : 
Version de Drupal : 

C'est un message drupal. Voila l'erreur avec settings.php dans default.

Erreur : Database name field is required. Database username field is required.

In order for Drupal to work, and to continue with the installation process, you must resolve all issues reported below. For more help with configuring your database server, see the installation handbook. If you are unsure what any of this means you should probably contact your hosting provider.

Failed to connect to your database server. The server reports the following message: SQLSTATE[28000] [1045] Access denied for user 'www-data'@'localhost' (using password: NO).

Is the database server running?
Does the database exist, and have you entered the correct database name?
Have you entered the correct username and password?
Have you entered the correct database hostname?

Et sans settings.php dans default:

Erreur : Settings file: The settings file does not exist. The Drupal installer requires that you create a settings file as part of the installation process. Copy the ./sites/default/default.settings.php file to ./sites/default/settings.php. More details about installing Drupal are available in INSTALL.txt.

Pourtant juste avant j'ai des echo qui affiche les bonnes informations..

En survolant, comme je ne sais pas d'où vient la variable $mysettings ni comment elle est configurée, il est difficile de savoir ce qui cliche. En plus, je ne connais pas votre environnement, et je n'ai jamais utilisé ses fonctions d'install automatique.

Je déclare donc forfait sur ce cas.

Bonsoir,

La variable $mysettings vient de la fonction build_settings() juste en dessous.
C'est un tableau des configurations de l'installation.
Et je suis sous Debian, mais je ne me rappel plus de la version.

Merci tout de même d'avoir essayé.
Sais-tu où je pourrais trouver ces informations, ou qui pourrait me les donner?
Car je n'arrête pas de fouiller la document de drupal dessus, mais je ne trouve rien du tout...

Salut,

J'essaie aussi de créer un script du genre. Mon script est très semblable au tient, je l'ai pris de Drush 4.5. Ce qui semble poser problème, c'est la partie "install_settings_form".

En explorant le fichier "install.core.inc" de Drupal 7.10, j'ai pu placer du code qui me retourne ce que retourne normalement l'installateur intéractif, ce qui devrait en principe être la même chose que l'on utilise pour installer Drupal à partir d'un script non?

J'en ai découvert une petite variante:

'install_settings_form' => array (
  'driver' => 'mysql',
  'mysql' => array (
    'database' => 'r2_com',
    'username' => 'root',
    'password' => 'quickstart',
    'db_prefix' => '',
    'host' => 'localhost',
    'port' => '',
  ),
  'save' => 'Enregistrer et continuer',
  'op' => 'Enregistrer et continuer',
)

Du coup, je tombe sur ce message d'erreur:

Database name field is required.
Database username field is required.
Exception: Database name field is required. Database username field is required. in install_run_task() (line 421 of /home/quickstart/websites/r2.com/includes/install.core.inc).

Si tu trouves la solution, merci de partager!

Après plusieurs jours de recherche, j'ai trouvé que les erreurs sur le nom de la base de données et le nom d'utilisateur ont attrait aux valeurs concernant PostGres, même si celui n'est pas choisis.

Et donc, ceci fonctionne très bien:

'install_settings_form' => array (
  'driver' => 'mysql',
  'mysql' => array (
    'database' => 'r2_com',
    'username' => 'root',
    'password' => 'quickstart',
    'db_prefix' => '',
    'host' => 'localhost',
    'port' => '',
  ),
  'pgsql' => array (
    'database' => 'x',
    'username' => 'x',
  ),
  'save' => 'Enregistrer et continuer',
  'op' => 'Enregistrer et continuer',
)

L'erreur vient donc de la validation du formulaire dans Drupal. Reste à savoir où...