AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1094992
Accepted
Zippy1970
Zippy1970
Asked: 2022-03-01 09:01:10 +0800 CST2022-03-01 09:01:10 +0800 CST 2022-03-01 09:01:10 +0800 CST

Após atualizar o Debian Buster para Bullseye, os sites Wordpress não atualizam mais

  • 772

Hoje eu atualizei meu servidor web do Debian Buster para Bullseye e foi de fato uma atualização bastante simples. Tudo parecia funcionar até que tentei acessar alguns sites WordPress no servidor. No começo, recebi algum erro sobre um módulo MySQL ausente. A mensagem de erro que recebi do PHPMyAdmin me deu uma pista melhor: dizia que estava faltando o módulo mysqli.

Então eu instalei apt install php7.4-mysqli e isso de fato fez meus sites WordPress funcionarem novamente.

O único problema agora é que não consigo atualizar o Wordpress. Toda vez que tento atualizar o WordPress, recebo um erro:

Erro de atualização do WordPress

Eu suspeito que preciso instalar o suphp. Mas antes de eu fazer, alguém pode confirmar que este é realmente o caso? Ou preciso fazer outra coisa após a atualização do Buster para o Bullseye?

EDIT: Demorei um pouco para descobrir o que realmente estava acontecendo. Agora eu sei, não tenho idéia de como resolver o problema.

A mensagem de erro que o WP está dando, na verdade está incorreta. Como se vê, é capaz de descompactar a atualização muito bem na pasta apropriada. Mas é quando ele verifica se os arquivos foram realmente descompactados, que dá errado. O problema está neste pedaço de código em update-core.php :

foreach ( $roots as $root ) {
  if ( $wp_filesystem->exists( $from . $root . 'readme.html' )
    && $wp_filesystem->exists( $from . $root . 'wp-includes/version.php' )
  ) {
    $distro = $root;
    break;
  }
}
    
if ( ! $distro ) {
  $wp_filesystem->delete( $from, true );
  return new WP_Error( 'insane_distro', __( 'The update could not be unpacked.' ) );
}

O que ele faz aqui é simplesmente verificar se existem dois arquivos na pasta para a qual acabou de descompactar o arquivo zip. Isso falha. E o motivo é o seguinte:

Eu uso o método FTP para instalar atualizações. Então, quando eu digo para atualizar, ele primeiro descobre a pasta para a qual deve baixar o arquivo zip. Esta pasta é armazenada em $working_dir e é usada a partir desse momento para o resto do processo de atualização. O verdadeiro caminho no servidor é, /domains/domainname.com/htdocs/wp-content/upgrade/mas como os usuários de FTP estão em chroot, o WP encontra e armazena /htdocs/wp-content/upgrade/. O arquivo de atualização é baixado para esta pasta e, em seguida, descompactado.

Em seguida, ele faz a verificação acima. E isso falha porque tenta encontrar um arquivo /htdocs/wp-content/upgrade/enquanto o local verdadeiro é /domains/domainname.com/htdocs/wp-content/upgrade/.

Eu entendo por que ele baixa o pacote muito bem (já que os usuários de FTP estão em chroot). Mas não entendo por que não falha ao descompactar depois, mas falha ao verificar a existência dos arquivos ...

Eu verifiquei todas as configurações do php e não consigo encontrar nada diferente com as configurações de antes da atualização do Debian…

wordpress php7 debian-bullseye
  • 1 1 respostas
  • 145 Views

1 respostas

  • Voted
  1. Best Answer
    Zippy1970
    2022-03-09T00:32:28+08:002022-03-09T00:32:28+08:00

    Demorei um pouco para descobrir exatamente o que estava acontecendo, mas na verdade é um problema com o WordPress. Bullseye instala a versão 1.0.49 do PureFTPd onde no Buster v1.0.47 foi instalado. De acordo com o changelog do PureFTPd aqui , globbing foi removido do comando NLST na v1.0.48 (o que faz sentido já que na verdade não é permitido de acordo com o RFC).

    Os desenvolvedores do WordPress estão cientes do problema e corrigiram a função exist(). O patch está disponível aqui ; aplicá-lo é uma das duas maneiras de atualizar o WordPress se você estiver usando o PureFTPd versão 1.0.48 ou superior e estiver travado com a atualização via FTP.

    Você também pode substituir a função em /wp-admin/includes/class-wp-filesystem-ftpext.php (ou /wp-admin/includes/class-wp-filesystem-ftpsockets.php se estiver usando FTPSockets) com o a seguir (que na verdade é minha própria implementação da função):

    
            public function exists( $file ) {
              $retval = false;
    
              $list = ftp_nlist( $this->link, $file );
              if( ! empty( $list ) ) {
                // if ftp_nlist returns *something*, the file or directory exists, on any FTP server
                $retval = true;
              } else {
                // if ftp_nlist returns nothing, either the file/dir doesn't exist or it's a file and
                // the FTP server's NLST command doesn't support globbing (i.e. Pure-FTPD > v1.0.47)
                // Check if it'a file
                if( ftp_size( $this->link, $file ) >= 0 ) {
                  $retval = true;
                }
              }
              return $retval;
    
            }
    

    O WordPress 6.0 terá a nova função por padrão.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve