在将WordPress移动到我的服务器后,我有一些非常奇怪的事情:
Wed Aug 27 18:10:43 2014] [warn] [client 77.21.106.179] mod_fcgid: stderr: PHP Warning: is_dir(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/var/www/vhosts/xyz/:/tmp/:/usr/share/pear/) in /var/www/vhosts/xyz/xyz/wp-includes/functions.php on line 1425
为什么尝试WordPress访问/?有什么想法吗?
当调用WordPress时,将生成1GB错误日志^^
我确实托管了大约100个WP实例,都做得很好,没有安装尝试访问"/"。
编辑
这是失败的功能:
function wp_mkdir_p( $target ) {
$wrapper = null;
// strip the protocol
if( wp_is_stream( $target ) ) {
list( $wrapper, $target ) = explode( '://', $target, 2 );
}
// from php.net/mkdir user contributed notes
$target = str_replace( '//', '/', $target );
// put the wrapper back on the target
if( $wrapper !== null ) {
$target = $wrapper . '://' . $target;
}
// safe mode fails with a trailing slash under certain PHP versions.
$target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency.
if ( empty($target) )
$target = '/';
if ( file_exists( $target ) )
return @is_dir( $target );
// We need to find the permissions of the parent folder that exists and inherit that.
$target_parent = dirname( $target );
// MY MODIFICATION
if ($target_parent = '/') {
var_dump($target, $target_parent);
die(debug_print_backtrace());
}
// MY MODIFICATION END
while ( '.' != $target_parent && ! is_dir( $target_parent ) ) {
$target_parent = dirname( $target_parent );
}
// Get the permission bits.
$dir_perms = false;
if ( $stat = @stat( $target_parent ) ) {
$dir_perms = $stat['mode'] & 0007777;
} else {
$dir_perms = 0777;
}
if ( @mkdir( $target, $dir_perms, true ) ) {
// If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod()
if ( $dir_perms != ( $dir_perms & ~umask() ) ) {
$folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
for ( $i = 1; $i <= count( $folder_parts ); $i++ ) {
@chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms );
}
}
return true;
}
return false;
}
我添加了一些修改,阅读评论找到它,我得到了以下输出:
string(95) "/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/uploads/2014/09"
string(1) "/"
#0 wp_mkdir_p(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/uploads/2014/09) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/functions.php:1743]
#1 wp_upload_dir() called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions/other.php:360]
#2 require(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions/other.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/template.php:503]
#3 load_template(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions/other.php, ) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/template.php:477]
#4 locate_template(Array ([0] => functions/other.php), 1, ) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/general-template.php:179]
#5 get_template_part(functions/other) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions/init.php:9]
#6 require(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions/init.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/template.php:503]
#7 load_template(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions/init.php, ) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/template.php:477]
#8 locate_template(Array ([0] => functions/init.php), 1, ) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-includes/general-template.php:179]
#9 get_template_part(functions/init) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions.php:32]
#10 include(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/themes/legatus-theme/functions.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-settings.php:328]
#11 require_once(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-settings.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-config.php:111]
#12 require_once(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-config.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-load.php:29]
#13 require_once(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-load.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/wp-blog-header.php:12]
#14 require(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-blog-header.php) called at [/var/www/vhosts/xyz/xyz.kunden.xyz/index.php:17]
什么是不正确的,因为dirname(/var/www/vhosts/xyz/xyz.kunden.xyz/wp-content/uploads/2014/09)应该返回/var/www/vhosts/xyz/xyz.kunden.xyz/wp-constent/uploads/2014,而不仅仅是/。。。
有什么想法吗?
仔细检查$target
中的路径是否真的存在。在使用不同的内部文件夹设置将Wordpress从一台服务器移动到另一台服务器后,我出现了这个错误。
如果服务器上不存在$target
中的路径,则需要更正代码和数据库中每次出现的路径。
为了安全地更正数据库中的值,请使用以下工具https://github.com/interconnectit/Search-Replace-DB它负责处理数据库中类似字典的结构。