Ralat Fatal PHP: Tidak dapat membuka 'wp-salt.php' yang diperlukan apabila menjalankan arahan WP-CLI sebagai cron-job dalam crontab
P粉253518620
P粉253518620 2024-03-28 09:25:13
0
1
441

Soalan ini bertujuan untuk menjadi catatan yang bermaklumat untuk orang lain cari kerana nasib baik saya sudah menemui penyelesaiannya.

Saya cuba menjalankan arahan Wordpress-CLI sebagai tugas cron dalam crontab pada pelayan Cloudways. Perintah berjalan tanpa sebarang masalah secara langsung dalam terminal, tetapi gagal dengan ralat PHP yang membawa maut apabila dilancarkan menggunakan crontab.

Arahan asas Wordpress-CLI adalah seperti berikut:

wp migeratedb 配置文件 [id]

Memandangkan konteks di mana crontab dijalankan biasanya tidak diketahui dan pembolehubah $PATH mungkin tidak tersedia, saya mengubah suai arahan untuk menyediakan laluan mutlak yang diperlukan:

/usr/local/bin/wp migeratedb 配置文件 [id] --path=/absolute/path/to/wordpress/core/files

Begitu juga, arahan yang diubah suai ini juga berjalan dengan sempurna tanpa sebarang masalah apabila dilancarkan dari terminal.

Entri crontab akhir kelihatan seperti ini:

0 5 * * * /usr/local/bin/wp migeratedb 配置文件 [id] --path=/absolute/path/to/wordpress/core/files

Apabila dijalankan dari penjadual ia menghasilkan ralat berikut:

PHP Fatal error:  require(): Failed opening required 'wp-salt.php' (include_path='.:/usr/share/php') in phar:///usr/local/bin/wp/vendor/wp-cli/config-command/src/Config_Command.php(444) : eval()'d code on line 34

Selepas beberapa percubaan, saya menyedari ralat ini berlaku untuk semua ​​arahan WP-CLI kecuali yang sangat asas

wp --info

, menghasilkan output berikut:

OS: Linux 4.19.0-21-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
Shell:  /bin/sh
PHP binary: /usr/bin/php7.4
PHP version:    7.4.33
php.ini used:   /etc/php/7.4/cli/php.ini
MySQL binary:   /usr/bin/mysql
MySQL version:  mysql  Ver 15.1 Distrib 10.4.20-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
SQL modes:  
WP-CLI root dir:    phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:  phar://wp-cli.phar/vendor
WP_CLI phar path:   [absolute/path/to/user/home/directory]
WP-CLI packages dir:    
WP-CLI cache dir:   [absolute/path/to/user/home/directory]/.wp-cli/cache
WP-CLI global config:   
WP-CLI project config:  
WP-CLI version: 2.7.1

Saya juga mencuba penyesuaian berikut tidak berjaya:

  • Muat turun wp-cli.phar baharu dan gunakannya dengan arahan.

  • Lihat dan tukar semua kebenaran folder terpakai

  • Cuba jalankan cronjob sebagai pengguna lain

  • Gunakan /usr/bin/php 更改命令来运行 wp-cli.phar

P粉253518620
P粉253518620

membalas semua(1)
P粉790187507

Saya akhirnya dapati bahawa ralat ini ada kaitan dengan cara penyedia pengehosan (dalam kes ini Cloudways) menyediakan konfigurasi WordPress dalam fail wp-config.php.

Garam dan kunci kebenaran rahsia disimpan dalam fail berasingan yang dirujuk wp-salt.php。它可以通过以下方式直接在配置文件中引用:require('wp-salt.php') dalam mesej ralat. Memandangkan ini bukan sebahagian daripada teras WordPress dan crontab berjalan dalam persekitaran yang berbeza, ia tidak dapat menentukan direktori yang betul di mana fail itu terletak dan require() gagal dengan ralat yang membawa maut.

Untuk membetulkannya, tukar baris dalam wp-config.php 中的行更改为 require(__DIR__.'/wp-salt.php'); kepada require(__DIR__.'/wp-salt.php'); supaya fail sentiasa dirujuk dari direktori yang sama dengan fail konfigurasi.

Pilihan lain ialah mengalih keluar baris sepenuhnya dan menggantikannya dengan kandungan daripada fail wp-salt.php, seperti yang dilakukan oleh teras WordPress.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan