Scrapdiary

DesigningとEngineeringの架け橋

Wordpressの更新で「ダウンロードに失敗しました。:ファイルのチェックサムが期待値と一致しません。」のエラー

Wordpressを4.8にアップグレードを行おうとGUIから実行するも

https://downloads.wordpress.org/release/ja/wordpress-4.8.zip から更新をダウンロードしています…

ダウンロードに失敗しました。: ファイルのチェックサム (6c0797eea5561cdaa9b4edc75ba296dd) が期待値 (d95fd389479bf85939e0b36d9ae1d1a4) と一致しません。

インストール失敗

と表示されてしまい、何度実行しても更新がインストールされません。

Permissionかと考えwp-contents以下のディレクトリを調整しましたが、いっこうに改善されませんでした。

仕方ないので、coreのソースファイルを読んでみると以下の箇所で発生していました。 

github.com

チェックサムのエラーはこの「verify_file_md5()」という関数で出力されています。
それを呼び出している「download_url()」の$responseにて、実際にダウンロードしたファイルのチェックサムと比較するための「期待値」を受け取っています。

検証してみると、Wordpressダウンロードサイトhttps://downloads.wordpress.org)にて該当するZIPファイルをGETで取得する際のheader情報に「Content-MD5」というプロパティがあり、それを「期待値」とする仕様のようです。

wgetコマンドでheader情報を取得してると

$ wget -S --spider https://downloads.wordpress.org/release/ja/wordpress-4.8.zip
Spider mode enabled. Check if remote file exists.
--2017-07-26 11:00:39-- https://downloads.wordpress.org/release/ja/wordpress-4.8.zip
Resolving downloads.wordpress.org... 66.155.40.186, 66.155.40.187, 66.155.40.188, ...
Connecting to downloads.wordpress.org|66.155.40.186|:443... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 26 Jul 2017 02:00:40 GMT
Content-Type: application/zip
Content-Length: 9436096
Connection: keep-alive
Cache-control: private
Content-Disposition: attachment; filename=wordpress-4.8-ja.zip
Last-Modified: Fri, 23 Jun 2017 02:03:03 GMT
X-Frame-Options: SAMEORIGIN
Content-MD5: d95fd389479bf85939e0b36d9ae1d1a4
X-nc: EXPIRED lax 186
Accept-Ranges: bytes
Length: 9436096 (9.0M) [application/zip]
Remote file exists.

「Content-MD5: d95fd389479bf85939e0b36d9ae1d1a4」が渡ってきます。
ですが、この値がWordpressが稼働するサーバ上で実際にダウンロードしたファイルに対してmd5_file()を実行して生成したチェックサム値と一致しません。

「Content-Length: 9436096」と「Length: 9436096 (9.0M) [application/zip]」とheaderは伝えているのだけど、実際にダウンロードされたファイルのサイズをfilesize()でチェックすると「2060288」(1.9M)なので、GETリクエストしているファイルと実際にダウするファイルが違っているように見受けられる。

これってWordpress側のheader情報が間違っているように感じるのだけれど、特に「4.8にアップロードできない」という声を聞かないので自分の環境特有の問題なんだろうか…。

 

調べてみたけど解決策がなくて困ったというお話でした。

 

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)