我正在尝试使用以下代码在 PHP 中自动安装 WordPress 发行版:
$base_dir = '/home/username/wordpress_location';
chdir($base_dir);
define('WP_SITEURL', 'http://www.domain.com/');
define('WP_INSTALLING', true);
require_once 'wp-load.php';
require_once 'wp-admin/includes/upgrade.php';
require_once 'wp-includes/wp-db.php';
$result = wp_install($title, $username, $email, true, null, $password);
当我手动运行时wp_install() [/wp-admin/includes/upgrade.php],我收到此错误:
Fatal error: Call to a member function flush_rules() on a non object in /home/username/public_html/wp-admin/includes/upgrade.php on line 85
看完之后WordPress 源代码 http://core.trac.wordpress.org/browser/trunk/wp-admin/includes/upgrade.php#L85, 看起来$wp_重写正在尝试打电话刷新规则() when $wp_重写本身并不存在。
另一个奇怪的变化是,这实际上与以下代码相同wordpress-cli-安装程序 https://github.com/nexcess/wordpress-cli-installer/blob/master/wordpress-cli-installer.php#L304。我的 wp-config.php 文件已自动生成并准备就绪。
为什么 wordpress-cli-installer 的代码可以工作,但我的却不能?
EDIT:
经过大量的试验和错误,我发现我的代码无法工作,因为它是在函数中定义和执行的。当我将代码与函数分离并执行后,它就起作用了。然而,这又提出了另一个问题。是否可以执行上面的代码inside一个函数的?我尝试过使用$GLOBALS += get_defined_vars();
黑客之后需要一次声明,但这似乎没有任何作用。换句话说:
<?php
$base_dir = '/home/username/wordpress_location';
chdir($base_dir);
define('WP_SITEURL', 'http://www.domain.com/');
define('WP_INSTALLING', true);
require_once 'wp-load.php';
require_once 'wp-admin/includes/upgrade.php';
require_once 'wp-includes/wp-db.php';
$result = wp_install($title, $username, $email, true, null, $password);
// ^ This works.
// v This won't work.
function run(){
$base_dir = '/home/username/wordpress_location';
chdir($base_dir);
define('WP_SITEURL', 'http://www.domain.com/');
define('WP_INSTALLING', true);
require_once 'wp-load.php';
require_once 'wp-admin/includes/upgrade.php';
require_once 'wp-includes/wp-db.php';
$result = wp_install($title, $username, $email, true, null, $password);
}
run();
?>