Wordpress6.8.1とcron
Wordpress6.8.1とcron
2025-05-23
變更履歷《へんこうりれき》
2025-06-01
- (2)'追加
イントロ:
久しぶりに Wordpress (ver. 6.8.1) 上に、豫約《よやく》。
時閒《じかん》になっても動いていない。
そういえば前回の豫約は Wordpress 6.5.5 の時だった。
Wordpress 6.5.5 の時は動いていたよね〜。なぜ?
ChatGPTが賢かった。
(1).何が起きたか
-
php wp-cron.php doing_wp_cron=1
が、DB connection エラー-
crontab
に書いていた -
wp-config.php
にはdefine('DISABLE_WP_CRON', true);
-
(2).ChatGPTのお告げ
探しても、原因や解決策がみあたらず。
ChatGPTに聞くと、以下のお告げが!
// なお。ChatGPTの解答の真僞《しんぎ》のほどや詳細がどこまで正確か追っていない。
// よってどこまで本當《ほんとう》の事かは、みなさんに丸投げいたす。
Q1. えーん、wp-cronが動かなくなったよ〜
ChatGPT>
WordPress 6.7〜6.8 にかけて、以下のような変更が加えられています:
・wp-cron.php の実行時の 実行コンテキスト の強化(CLIかWebか)
・HTTP 経由と CLI 経由での処理の違いが増えた
・DB 接続やマルチサイト環境での URL 取得に関して、CLI 環境で $_SERVER が不完全だと不具合が出ることがある
おどろき!
Q2.workaround 出して〜
ChatGPT>
HTTP_HOST=example.com php -d register_argc_argv=On wp-cron.php
や
SERVER_NAME=example.com SERVER_PORT=443 REQUEST_METHOD=GET php wp-cron.php
がある
ほほぅ。そのようなやり方があるのか。
どれどれ......相変わらずDBエラー。
Q3.だめだ。なぜかDBエラーが解消しない
ChatGPT>
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
をためしてみてください
結果:mysqli_real_connect()で死んでいた。
え?なぜに?
それ以前に、Wordpress は mysqli だった事に驚き!
ああ、そうだっけ。言われてみれば Wordpress 4 の時、そんな事があったような。昔の事は忘れた。
php.ini
のデフォルトや wp-config.php
の設定、ソケットファイルの記述が違うのね。
いやおかしい。
なぜなら Apache 2.4 で現に Wordpress が動いている。
にもかかわらず、php
コマンドでソケットファイルが違うというのは考えにく.......
Apache 2.4 の PHP が version 8.2
コマンドラインの php が version 8.4
..... _| ̄|○ ガックリ ...... //⇐どうじゃ!古い表現じゃろ!
ああ、apt update
のとき、8.4にかわったものの、Apache は PHP 8.2 をキープしてたのね。
PHP 8.4 の設定なぞ、しておらぬわ。
define('DB_HOST', 'localhost:/var/run/mysql.sock');
// ソケットファイル、/var/run/mysqld/mysql.sock
やら /var/run/mysqld/mysqld.sock
やら /var/run/mysql/mysql.sock
やら /var/run/mysql/mysqld.sock
やら濫立《らんりつ》していて疲れるのよね
しかしうまくうごかない
Q4.workaround 出して〜
ChatGPT> WordPress 6.8 系では、wp_load.php → wp-includes/load.php 内の wp_guess_url() や DB 初期化部分で、CLI 実行時に URL やホスト情報が正しく推定できないため、DB内の siteurl が取得できずに失敗しているケースが複数報告されています。
ChatGPT> WordPress 6.8.1 は「CLI からの実行」で $_SERVER['HTTP_HOST'] 等が無いと、siteurl や home を取得できずに DB エラーになる仕様変更が行われたようです。
CLI 実行時にも Web 環境に似た変数を強制的に定義しているため、完全に WordPress に「HTTP 経由でアクセスされた」と誤認させる形で動作させています。
ChatGPT> カスタムスクリプトを作って、WordPress を「CLIでもWebに見せかけて」実行します。
ChatGPT> cron-runner.php を作成
<?php
// Webサーバー環境を模倣するための $_SERVER 定義
$_SERVER['HTTP_HOST'] = 'example.com'; // ←自サイトのドメイン
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['SERVER_PORT'] = 443; // HTTPS の場合
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
$_SERVER['SCRIPT_NAME'] = '/wp-cron.php';
$_SERVER['REQUEST_URI'] = '/wp-cron.php';
$_SERVER['REMOTE_HOST'] = '127.0.0.1';
$_GET['doing_wp_cron'] = microtime( true ); //※a ⇐chatGPTが後から追加してきた
define('ABSPATH', '/dokosoko/no/directory/'); // ⇐これは筆者が追加
// WordPress を読み込みつつ wp-cron を直接実行
// require_once __DIR__ . '/wp-load.php';
require_once ABSPATH . 'wp-load.php'; // ⇐これは筆者がかえた
// Cron 実行用フラグ
// define('DOING_CRON', true); ※a ⇐chatGPTは記述したが動かなくなる。筆者修正
require_once ABSPATH . 'wp-cron.php';
//ファイルおわり
crontab に php cron-runner.php
を書いて解決。
ありがとう、ChatGPT。
(2').とはいったもののダメだった
あれ?やっぱり動いていない。
wp-cron.php
をみると
if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
die();
}
/**
* Tell WordPress the cron task is running.
*
* @var bool
*/
define( 'DOING_CRON', true );
ダメだよね、これ。どうみても。
ということで、chatGPTの cron-runner.php
を少々變えた。
上記 ※a 部分。自分で變更した物と、chatGPTに再質問して出てきた物。
(3).感想
AIについて:
今回のように、どこまで正しいかはおいておいて、レアな情報を探す時は、AIはありがたいなと感じている。日本語のwebサイト檢索《けんさく》は、あまり最新・深い話は出てこない。しかしガッツリ英語で探すと時閒《じかん》がいくらあっても足りない。
- 人が檢索エンジンを驅使《くし》して探すより、ChatGPT に聞く方がはやい。
- 膨大な情報から欲しい物を探すときに有效《ゆうこう》。
- 例:膨大なマニュアルから、今自分がなやんでいる部分を探し出す時に有效。
- LibreOffice 、google docs 、google spreadsheetの函數《かんすう》説明 など、どこをどうのように探し、讀《よ》み、頭の中でつなげるかが問題。ものすごく時閒をかけるわりには、欲しい情報が出てこないことが多い。量が多い、文章がよくわからない、圖解《づかい》していないため、正直よくわからない。マニュアルに書いてあると言う人もいるだろうが、どこに?となる。このような場面、AIはよく働いてくれる。
- 例:膨大なマニュアルから、今自分がなやんでいる部分を探し出す時に有效。
なお、膨大なナレッジベースの檢索であれば、AIは全てよく動くかといえばさにあらず。
ChatGPT と Gemini に以下を聞いたことがある。
Geminiは自信をもって斷言《だんげん》していた。事實《じじつ》では無い事を。
- 1990年3月21日、ポーランドに関係して起きた政治・軍事上のイベントは何かあるか?
ChatGPT回答> 特に記録されていません。
Gemini回答> ワルシャワ条約機構からの離脱を宣言しました。間違いありません。
私>資料はあるか?
Gemini回答> これです
みたら、ポーランドの黨《とう》の月報の日本語譯《やく》で、1990年3月21日より前の物だった。だめじゃん。
事實は、ワルシャワ條約機構から離れるのはもう少し後の事になる。
『1インチの攻防 (NOT ONE INCH)』 2024年 によると、こっそり政府關係者《かんけいしゃ》がNATO事務所に行っていたらしい。この話もどこまで正確かは知らない。
ともかく、ChatGPTの回答がマシだった。Geminiの信用度は今後のトレーニング・精査次第なのでしょう。
それと、「間違いありません」は誰がトレーニングしたのだろう?誤情報ひろげる元だよね〜。
"AIの、「間違いない」は、〇〇〇〇〇"
五音入れて川柳を完成させよう!
おわり
Discussion