Вопрос по php, wordpress, bash – BASH установка Wordpress, без посещения wp-admin / install.php

8

Я написал этот маленький BASH-скрипт, который создает папку, разархивирует Wordpress и создает базу данных для сайта.

Последний шаг - это установка Wordpress, которая обычно включает указание вашего браузера на install.php и заполнение формы в графическом интерфейсе.

Я хочу сделать это из оболочки BASH, но не могу понять, как вызвать wp_install () и передать ему необходимые параметры:

-admin_email
-пароль администратора
-weblog_title
-user_name

(строка 85 в install.php)

Вот похожий вопрос,но в питоне

<code>#!/bin/bash

#ask for the site name
echo "Site Name:"
read name
# make site directory under splogs
mkdir /var/www/splogs/$name
dirname="/var/www/splogs/$name"
#import wordpress from dropbox
cp -r  ~/Dropbox/Web/Resources/Wordpress/Core $dirname
cd $dirname
#unwrap the double wrap
mv Core/* ./ 
rm -r Core
mv wp-config-sample.php wp-config.php 
sed -i 's/database_name_here/'$name'/g' ./wp-config.php
sed -i 's/username_here/root/g' ./wp-config.php
sed -i 's/password_here/mypassword/g' ./wp-config.php
cp -r ~/Dropbox/Web/Resources/Wordpress/Themes/responsive $dirname/wp-content/t$
cd $dirname

CMD="create database $name"
mysql -uroot -pmypass -e "$CMD"
</code>

Как изменить скрипт для автоматического запуска установщика без необходимости открывать браузер?

Просто выполните чистую установку, создайте дамп базы данных в файл, сохраните его как файл шаблона и используйте его для каждой новой установки с простой заменой строки для имени admin mail / admin username / blog title. Вот так я делаю это очень долго. Нет необходимости проходить через install.php. strkol
Хороший вопрос, strkol, я не думал о способе копирования / вставки. Я все еще хочу знать, как сделать это через оболочку, просто из любопытства. Но, в конце концов, любой метод, который допускает автоматизацию, является ключевым - не особо задумывался над тем, как это делается. The Penguin
вам нужно будет вызватьphp и бегиinstall.php из командной строки. Как имитировать пост формы на страницу через командную строку на самом делеphp вопрос, а неbash вопрос. Sorpigal
Milk Miruku предлагает использовать WPCLi. Определенно проверьте это. The Penguin
Предположим, вы правы - это больше похоже на php. Мне все же очень важно, чтобы все работало с Bash. Итак, вы говорите, что я могу выдать в сценарии: php ./install.php?step=2&weblog_title = [...]? The Penguin

Ваш Ответ

3   ответа
3

У меня была такая же проблема, как и у вас. Я попробовал метод Виктора, и он не сработал. Я сделал несколько правок, и теперь это работает! Вы должны добавить php-теги внутри скрипта, чтобы код работал, иначе он просто выводится на терминал.

Мой скрипт напрямую вызывает функцию wp_install файла upgrade.php, полностью обходя install.php (редактирование других файлов не требуется).

Я сделал свой скрипт с именем script.sh, сделал его исполняемым, уронил его в каталог wp-admin и запустил из терминала.

#!/usr/bin/php
<?php

function get_args()
{
        $args = array();
        for ($i=1; $i<count($_SERVER['argv']); $i++)
        {
                $arg = $_SERVER['argv'][$i];
                if ($arg{0} == '-' && $arg{1} != '-')
                {
                        for ($j=1; $j < strlen($arg); $j++)
                        {
                                $key = $arg{$j};
                                $value = $_SERVER['argv'][$i+1]{0} != '-' ? preg_replace(array('/^["\']/', '/["\']$/'), '', $_SERVER['argv'][++$i]) : true;
                                $args[$key] = $value;
                        }
                }
                else
                        $args[] = $arg;
        }

        return $args;
}

// read commandline arguments
$opt = get_args();

define( 'WP_INSTALLING', true );

/** Load WordPress Bootstrap */
require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );

/** Load WordPress Administration Upgrade API */
require_once( dirname( __FILE__ ) . '/includes/upgrade.php' );

/** Load wpdb */
require_once(dirname(dirname(__FILE__)) . '/wp-includes/wp-db.php');

$result = wp_install($opt[0], $opt[1], $opt[2], false, '', $opt[3]);
?>

Я назвал файл так:# ./script.sh SiteName UserName [email protected] Password

Это все еще верное решение? Есть ли какие-либо обновления к вышеуказанному скрипту?
с использованием последних результатов WordPress: PHP фатальная ошибка: необработанное исключение & phpmailerException & apos; с сообщением "Неверный адрес: wordpress @"; в /var/www/html/wpsite1/wp-includes/class-phpmailer.php:946
К сожалению, я забыл о тегах php, но конечный тег в любом случае не нужен (обязателен только первый тег) - хороший обходной путь, кстати ;-)
8

Проверять, выписыватьсясор-клина основеDrush для Drupal.

wp core install --url=url --title=site-title [--admin_name=username] --admin_email=email --admin_password=password

Все команды:

wp core [download|config|install|install_network|version|update|update_db]
wp db [create|drop|optimize|repair|connect|cli|query|export|import]
wp eval-file
wp eval
wp export [validate_arguments]
wp generate [posts|users]
wp home
wp option [add|update|delete|get]
wp plugin [activate|deactivate|toggle|path|update|uninstall|delete|status|install]
wp post-meta [get|delete|add|update]
wp post [create|update|delete]
wp theme [activate|path|delete|status|install|update]
wp transient [get|set|delete|type]
wp user-meta [get|delete|add|update]
wp user [list|delete|create|update]
Приветствия, рад, что я мог помочь некоторым. Если вам нужна дополнительная автоматизация, имеется также модуль Puppet, который интегрируется с WP-CLI -github.com/rmccue/puppet-wp
Привет, Молоко, это здорово. Я уже некоторое время пользуюсь WPCLI, и должен сказать, блестяще. Я бы посоветовал всем в этой теме начать с вашего предложения. Хорошая вещь. The Penguin
2

Возможно, вам нужно немного изменить оригинальный установщик Wordpress.

Во-первых, создайте PHP-скрипт PHP-оболочки, скажем, его имяwrapper.sh:

#!/usr/bin/php -qC

function get_args()
{
        $args = array();
        for ($i=1; $i<count($_SERVER['argv']); $i++)
        {
                $arg = $_SERVER['argv'][$i];
                if ($arg{0} == '-' && $arg{1} != '-')
                {
                        for ($j=1; $j < strlen($arg); $j++)
                        {
                                $key = $arg{$j};
                                $value = $_SERVER['argv'][$i+1]{0} != '-' ? preg_replace(array('/^["\']/', '/["\']$/'), '', $_SERVER['argv'][++$i]) : true;
                                $args[$key] = $value;
                        }
                }
                else
                        $args[] = $arg;
        }

        return $args;
}

// read commandline arguments
$opt = get_args();

require "install.php";

Это позволит вам вызывать скрипт из командной строки и передавать ему аргументы непосредственно в числовой массив $ opt.

Затем вы можете передать необходимые переменные в строго определенном порядке, например:

./wrapper.sh <admin_email> <admin_password> <weblog_title> <user_name>

вinstall.php вам нужно изменить определение ранее упомянутых переменных, как показано ниже:

global $opt;

$admin_email = $opt[0];
$admin_password = $opt[1];
$weblog_title = $opt[2];
$user_name = $opt[3];

Затем пусть скрипт установки сделает свое дело.

Это непроверенный метод, и он также открыт для любых необходимых вам модификаций. Это, в основном, руководство по использованию сценария php / cli-оболочки для определения необходимой переменной без необходимости отправлять их через HTTP-запрос / строку запроса. Может быть, это довольно странный способ добиться цели, поэтому, пожалуйста, не стесняйтесь давать любые конструктивные / деструктивные отзывы :-)

Хорошее подробное предложение. Я попытаюсь сделать это в течение недели и сообщу результаты. Благодарю. The Penguin
@ThePenguin У тебя сработало? Есть отзывы? Благодарю.

Похожие вопросы