投稿

ラベル(php)が付いた投稿を表示しています

WP-CLIのwp core updateがobject-cache.phpを置くと出来なくなる

WordPressのWP-CLIを使ってwp core updateをしても更新しなくなったので調査したときの覚書。 Gemini 3.1 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p8, php 8.3.29 wp-cliのバージョン確認。 # wp cli version WP-CLI 2.12.0 1. object-cache.phpがあると失敗する理由 WP-CLI環境ではAPCuキャッシュが使えないため、せっかく取得した最新のアップデート情報がなってしまう。 wp core updateしたときの挙動 WP-CLIが起動すると、object-cache.php が存在するため、WordPressは「アップデート情報をデータベースではなく、APCu(APC User Cache)に保存するモード」に切り替わる。 WP-CLIが WordPress.org のAPIに問い合わせて「新バージョンがある」という情報を取得。 取得した情報をAPCuに保存しようとするが、CLI環境のAPCuは無効化されているため、コマンド終了と同時にメモリごと消滅。 結果として、「新バージョンがある」という情報がDBにも保存されず、メモリ上からも消え去るため、何度 wp core update を実行しても「アップデート情報がない=すでに最新版である」と誤認し続けてしまう。 2.開発環境ではCLI環境でもAPCuは有効化 object-cache.phpが存在すれば、WordPressはAPCuモードになるため、設定で対応する。 iniファイル確認。 # php --ini Configuration File (php.ini) Path: /usr/local/etc Loaded Configuration File:         /usr/local/etc/php.ini Scan for additional .ini files in: /usr/local/etc/php Additional .ini files parsed:      /usr/local/etc/php/ext-10-opcache...

PHPのCacheToolをインストール

AIにサーバー稼働状況を分析レポートとして報告させるバッチを作成しているときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7, PHP 8.3.23, CacheTool 10.0.0 PHP OPcacheの統計情報を下記コマンドで取得できるかと思ったけど、PHP-FPMで実行されるOPcache統計情報ではなくPHP CLIのOPcache統計情報だった。 # php -r 'print_r(opcache_get_status(false));' 2>/dev/null ちゃんとPHP-FPM経由で「opcache_get_status」を実行させる必要がある。 opcache-guiをインストール済み。 これをcurlコマンドで読み取っていいと思う。 参考:  amnuts/opcache-gui: A clean, effective and responsive interface for Zend OPcache CacheToolというツールをGemini先生にお勧めされたのでインストールしてみた。 1. CacheToolをインストール Phar 拡張モジュールをインストール。 # pkg search phar # pkg install php83-phar 公式ドキュメントの通りにインストール。 参考:  CacheTool - Manage cache in the CLI | cachetool # curl -sLO https://github.com/gordalina/cachetool/releases/latest/download/cachetool.phar # chmod +x cachetool.phar /usr/local/bin に移動しつつ、名前を 'cachetool' に変更。 # mv cachetool.phar /usr/local/bin/cachetool 確認。 # cachetool --version CacheTool 10.0.0 APCuキャッシュを削除するコマンド。 # cachetool apcu:cac...

PHP APCuをインストールしてWordPressのobject-cache.phpを配置

PHPのAPC, APCu, OPcacheに関しての知識を整理したときの覚書。 Gemini 3 Pro Previewと対話 環境: FreeBSD 14.3-RELEASE-p7, PHP 8.3.26, WordPress 6.9.0 1. APCuとは? APCu は、PHPで動くインメモリの key-value ストア。 APCu(APC User Cache) は APC(Alternative PHP Cache)からOPcach機能を除いたもの。 参考:  PHP: はじめに - Manual APCからAPCuになるまでの経緯 PHP 4.x 〜 PHP 5.4: APCがOpcode Cache(コードのキャッシュ)とUser Cache(データのキャッシュ)の両方の機能を担う。 PHP 5.5: 2013年にコードのキャッシュ(Opcode Cache)はPHP本体に標準で組み込まれる。 PHP 5.5以降 : APCから不要になったOpcode Cache機能を削除し、User Cache機能(データ保存)だけを切り出して軽量化・最新化したAPCuへ。 サーバーをクラスター構成で運用している場合は、ValkeyやRedisを利用する。 ValkeyやRedisを使うよりAPCuの方が通信のオーバーヘッドがないので圧倒的に高速。 2. APCuとWordPressの関係 WP_Object_CacheとWP Transients APIの関係。 WP_Object_Cache: ページ生成中の一時的なデータ保持。 スレッドメモリに保存しページ表示後に破棄される。 APCuを導入すると共有メモリに保存しページ表示後に破棄されず再利用可能。 WP Transients API: 有効期限がある長期間のデータ保持。 データベース(wp_options)に保存。 APCuを導入するとWP_Object_Cache経由でデータ取得保存するようになる。 object-cache.phpはWP_Object_Cacheクラスを上書きして、データを保存する際にapcu_*関数を使って共有メモリに保存する。 WordPressはwp-includes/load.php:wp_start_object_cache(...

PhpStormで再フォーマット時に配列の日本語キーと値の並びがズレる

PHPStormでCtrl + Alt + L押して再フォーマットしたときに配列のキーと値の並びがズレるので対応したときの覚書。 環境: Windows 11 Pro 24H2, PhpStorm 2025.2.1, UDEVGothic v2.1.0 ズレる原因 半角文字と全角文字の幅の比率が 1:2 になっていないフォントを使っているため。 「JetBrains Mono」は日本語に対応していない。 参考:  JetBrains Mono: A free and open source typeface for developers | JetBrains: Developer Tools for Professionals and Teams 対応方法: UDEV Gothicをインストール UDEV Gothic は、JetBrains Monoの日本語対応版。 参考:  Jetbrains IDEで等幅フォントを使っても文字がずれる時 参考:  yuru7/udev-gothic: UDEV Gothic は、ユニバーサルデザインフォントのBIZ UDゴシックと、 開発者向けフォントの JetBrains Mono を合成した、プログラミング向けフォントです。 インストールするフォント UDEVGothic-Regular.ttf UDEVGothic-Italic UDEVGothic-Bold UDEVGothic-BoldItalic ダウンロードしたフォントを右クリックして 「すべてのユーザーに対してインストール」 を選択しないとPhpStormのフォント選択に出てこない。 Ctrl + Alt + Lで配列のキーと値のペアを揃える設定 ファイル (File)  設定 (Settings) エディター (Editor) コードスタイル (Code Style) PHP 折り返しと波括弧 配列イニシャライザー キーと値のペアをそろえる ▼ 関連記事 Windows11をクリーンインストール(2022年12月) xyzzyからPhpStormに乗り換え。設定メモ

FreeBSD14 + Nginx + PHP8.3 + WordPress 6.8.2で起きた原因不明のPHPエラー

突然PHPエラーでサイトが表示されなくなって調査しているときの覚書。 Gemini 2.5 Proと対話 環境: FreeBSD 14.3-RELEASE-p2, nginx 1.28.0, PHP 8.3.23, WordPress 6.8.2 エラー内容 2025/09/03 07:20:27 [error] 18603#100288: *143368 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 4295229440 bytes) in /home/httpd/hoge/wordpress/wp-includes/theme.php on line 325" while reading response header from upstream, client: 1.2.3.4, server: kaisei-hp.co.jp, request: "GET / HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "hoge.jp" エラーの意味 PHPがスクリプトを実行するために許可されたメモリ上限(memory_limit)を使い果たしてしまった。 許可されたメモリ (Allowed memory size): 268,435,456バイト = 256MB 確保しようとしたメモリ (tried to allocate): 4,295,229,440バイト = 約4.29GB wp-includes/theme.phpの325行目。 return apply_filters( 'template', get_option( 'template' ) ); 取り急ぎphp-fpmを再起動。 # service php_fpm restart これでサイトは表示されるようになった。 1. エラー周辺のシステムリソース情報 このサーバーはCollectdをインストールしてある...

CentOS Stream 9 + PHP 8.1 + OPcache

CentOS Stream 9の環境でPHP OPcacheをインストールしたときの覚書。 CentOSの環境ではPHP OPcacheが自動でオンになると思ったらなってなかった。 参考:  FreeBSD14 + PHP8.3 + OPcache 環境: CentOS Stream 9, nginx 1.20.1, PHP 8.1.27 1. OPcacheのインストール まずはインストールされているか確認。 # php -i | grep opcache dnfでインストール。 # dnf search opcache # dnf install php-opcache iniファイルの場所を確認。 # php --ini php infoでも確認。 # php -i | grep opcache opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklist opcache.consistency_checks => 0 => 0 opcache.dups_fix => Off => Off opcache.enable => On => On opcache.enable_cli => On => On opcache.enable_file_override => Off => Off opcache.error_log => no value => no value opcache.file_cache => no value => no value opcache.file_cache_consistency_checks => On => On opcache.file_cache_only => Off => Off opcache.file_update_protection => 2 => 2 opcache.force_restart_timeout => 180 => 180 opcache.huge_code_pages => Off...

FreeBSD14 + PHP8.3 + OPcache

PHP Opcacheをインストールしたときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, Nginx 1.28.0, PHP 8.3.23 1. PHP OPcacheとは? OPcacheは、PHPスクリプトを一度コンパイルした結果をメモリにキャッシュすることで、次からのリクエストを高速に処理する仕組み。 OPcacheはPHP 5.5(2023年6月リリース)からバンドル。 CentOS Stremのyumやdnfでインストールするとデフォルトで有効になる。 FreeBSDではpkgでインストールしてもデフォルトで有効にならない。 OPcacheが有効か確認するコマンド。 # php -i | grep opcache 各レイヤーごとにキャッシュ機能を導入することで相乗効果が期待できる。 Web Serverのキャッシュ: Nginx fastcgi_cache PHPのキャッシュ: OPcache OSのキャッシュ: ZFS ただしメモリを消費するので正しく設定しないと逆効果。 OPcacheとJIT JIT(Just-In-Time)コンパイラはPHP8から導入された機能で、OPcacheを高速化のための拡張機能。 JITは、アプリケーションの実行を監視し、頻繁に使われるコード(ホットコード)を特定し、ネイティブなマシンコードに変換し、専用のメモリ領域(JITバッファ)にキャッシュする。 JITはOPcacheが前提の機能。 Zend VMというインタープリタを挟まないため、特にCPU負荷の高い処理が劇的に高速化される。 WordPressだと頻繁に呼び出されるアクションとフィルターフックが高速化され、体感速度が向上する。 2.OPcacheをインストール。 まずはインストールされているか確認。 # php -i | grep opcache pkg でインストール。 # pkg install php83-opcache php --versionを打つとOPcacheがインストールされているか確認できる。 # php --version PHP 8.3.23 (cli) (built: Jul  5 2025 03:29:14) (NTS) Copyright (c) The PHP Group...

FreeBSDにXdebugをインストール

WordPressのwpdbのエラー時に呼び出し履歴(back trace)を表示してほしくて設定したときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6, xdebug 3.3.2 xdebugを検索してインストール。 # pkg search xdebug # pkg install php83-pecl-xdebug 読み込まれているか確認。 # php --ini インストールしただけで呼び出し履歴(back trace)できるようになる。 【関連記事】 WordPressがBlankだったりトップにリダイレクトするのをデバッグ XdebugをInstallしてError時の呼び出し履歴を表示

PHPのmysqlndとmysqliの違い

開発環境を構築するときにphp-mysqlndではなくphp-mysqliをインストールするようになって、「php-mysqlndをインストールしなくていいんだっけ?」と思って調査したときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6 mysqlndとは? PHPとMySQL(MariaDB)サーバーとの通信するためのライブラリ。 MySQL Native Driverが正式名称。 PHP5.3以前はMySQL Client Library(libmysql)が使われていたが、これはMySQL側が開発したものでありライセンスの問題があった。 そのためPHPプロジェクトで書き直されたものがMySQL Native Driver。 PHP5.4からデフォルトで有効。 参考:  PHP: Mysqlndの概要 - Manual 参考:  MySQL :: MySQL native driver for PHP - mysqlnd 参考:  MySQL Native Driver for PHP, mysqlnd mysqlndとphp-mysqliとの違い。 mysqlndはPHPのソースコードに組み込まれたライブラリ。 php-mysqliはPHP拡張モジュール。 MySQLサーバーに接続するプログラムはphp-mysqliが提供しているAPIで記述する。 php-mysqliは MySQL Native Driver(mysqlnd)と MySQL Client Library(libmysql)の どちらのライブラリを使うか選択できる。 MySQL Native Driver(mysqlnd)を使っているか確認。 どのライブラリを使うかはコンパイル時に決める。 参考:  PHP: どのライブラリを選ぶか - Manual PHPのビルドオプションを表示する。 見やすいように改行する。 # php-config --configure-options | sed -e 's/ --/\n--/g' ... --enable-mysqlnd ... mysqliが読み込まれているか確認。 # php --ini .... Loaded Configuration ...

phpのconfigureオプションを確認

phpのビルド(コンパイル)時の設定を確認しようとしたときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6 確認コマンド # php-config --configure-options 改行に置換して見やすくする。 # php-config --configure-options | sed -e 's/ --/\n--/g' --disable-all --program-prefix= --with-config-file-scan-dir=/usr/local/etc/php --with-layout=GNU --with-libxml --with-openssl --with-password-argon2=/usr/local --enable-dtrace --enable-embed --enable-fpm --with-fpm-group=www --with-fpm-user=www --enable-mysqlnd --with-external-pcre=/usr/local --prefix=/usr/local --localstatedir=/var --mandir=/usr/local/share/man --infodir=/usr/local/share/info/ --build=amd64-portbld-freebsd14.0 build_alias=amd64-portbld-freebsd14.0 PKG_CONFIG=pkgconf PKG_CONFIG_LIBDIR=/wrkdirs/usr/ports/lang/php83/work/.pkgconfig:/usr/local/libdata/pkgconfig:/usr/local/share/pkgconfig:/usr/libdata/pkgconfig CFLAGS=-O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing LDFLAGS= -L/usr/lib -lcrypto -lssl -fstack-protector-strong CPP=cpp CXXFLAGS=-...

PhpSpreadsheetが複数ファイルをループするとメモリを使いすぎる

PhpSpreadsheetでxlsxファイルを処理しているときにメモリエラーが出たので調査したときの覚書。 環境: Windows 11 pro, PHP 8.3.13, PhpSpreadsheet 3.5.0 数メガある10個ほどのxlsxファイルをループ処理したら下記エラー。 PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 4096 bytes) in D:/../ 次のファイルを読み込むごとにメモリ消費が増えていく。 PhpSpreadsheetはIteratorを使ってメモリ消費を最小限にしているはず。 参考:  Looping the Loop - PhpSpreadsheet Documentation 試したこと php.iniのmemory_limitを1024Mにした。 Loop中にmemory_get_usage()を出力して、どこでメモリ消費するか計測。 xlsxをload前にsetReadDataOnly(true)する。 → 変わらなかった。 Loopの最後で変数をunsetする。 → 変わらなかった。 10,000行の1MBのxlsxファイルをloadするとメモリ126MBを消費した。 memory_limit=1024Mだと8MB(約80,000行)のファイルを処理するのが限界。 フォルダに置いたxlsxファイルをループして処理したかったけど、メモリの使い過ぎで止まってしまうので別の方法を考える。 対策案 一つずつ別スレッドで処理(1つのPHPコマンドで1ファイル処理)。 一旦XLSXをCSVに変換してから処理。 一時的にクラウドのハイスペックマシンで処理。 そもそもPhpSpreadsheetを使わず、Power AutomateでXLSXをCSVに変換してから処理。 CSVファイルをfgetcsvでループ処理する際はファイルサイズに関わらず使用メモリは増えないので、一旦何らかの方法でXLSXをCSVに変換するのが有力候補。 【関連記事】 Windows11にPHP8.3とComposerをscoop経由でインストール 病院の施設基準を自動更新するには? PHPでExcelを扱う...

Windows11にPHP8.3とComposerをscoop経由でインストール

バッチ処理もPHPで記述しようとWindowsにPhpをインストールしたときの覚書。 環境: Windows 11 Pro 23H2, Php 8.3.11 1. Php8.3とcomposerをインストール Scoopを使ってインストールする。 PS:> scoop search php PS:> scoop install php 確認。 PS:> php --version PHP 8.3.11 (cli) (built: Aug 27 2024 21:28:59) (ZTS Visual C++ 2019 x64) Copyright (c) The PHP Group Zend Engine v4.3.11, Copyright (c) Zend Technologies Composerもscoopにあったのでインストールする。 PS:> scoop search composer PS:> scoop install composer 確認。 PS:> composer --version Composer version 2.7.8 2024-08-22 15:28:36 PHP version 8.3.11 (C:\Users\suganuma\scoop\apps\php\current\php.exe) Run the "diagnose" command to get more detailed diagnostics output. 内部文字エンコーディングを確認。 PS:> php -r "echo mb_internal_encoding();" UTF-8でなければphp.iniの「default_charset」と「internal_encoding」を確認する。 default_charset = "UTF-8" ;internal_encoding = php.iniの場所を確認。 PS:> php --ini Configuration File (php.ini) Path: Loaded Configuration File:         (none) Scan for additional ....

FreeBSD上でPHPからメールを送ると本文が表示されない

仮想マシンの開発環境でPHPからメール送信したときに本文が空だったので調査したときの覚書。 環境: FreeBSD 14.1-RELEASE-p2, PHP 8.3.6  別コンソールでmaillogを監視しながら状況を整理する。 # tail -f /var/log/maillog コンソールで直接メール送信のPHPを実行する。 # php -r 'mail("suganuma@hoge.co.jp", "test", "hello");' 本文がないメールが届く。 PHPを経由せずにメールを送信する。 # mail suganuma@hoge.co.jp 本文がある。 なので、PHPとメールエージェントの間で問題がありそう。 その他の分かったこと。 本番環境は問題なし。 CentOS Stream 9の開発環境も問題なし。 メール転送エージェントDragonFly Mail Agent(DMA) maillogを見ると、dmaというメール転送エージェントで送信している。 FreeBSD 14.0からデフォルトのメール転送エージェント(MTA)はDMAを使うらしい。 参考:  Chapter 31. Electronic Mail | FreeBSD Documentation Portal 設定ファイルを確認。 # less /etc/mail/mailer.conf sendmail        /usr/libexec/dma mailq           /usr/libexec/dma newaliases      /usr/libexec/dma postfixに切り替えてみる。 Postfixをインストール pkgからインストール。 # pkg search postfix # pkg install postfix 画面の指示通りに実行する。 # sysrc postfix_enable="YES" # sysrc sendmail_enable="NONE" # install -d /usr/local/etc/m...

PHPでExcelを扱うライブラリPhpSpreadsheetをインストール

ExcelのデータをPostgreSQLに取り込む処理を作っているときの覚書。 PHPを選んだのは慣れているしPythonより早いから。 環境: FreeBSD 14.1, PHP 8.3.6, PhpSpreadsheet 2.1.0 Composerのインストールは前の記事を参考に。 前の記事:  PHP composerをCentOS8にインストール PhpSpreadsheetをインストールしようとしたら下記エラー。 # composer require phpoffice/phpspreadsheet Cannot use phpoffice/phpspreadsheet's latest version 2.1.0 as it requires ext-ctype * which is missing from your platform.   Package phpoffice/phpspreadsheet has requirements incompatible with your PHP version, PHP extensions and Composer version:     - phpoffice/phpspreadsheet 2.1.0 requires ext-ctype * but it is not present.     - phpoffice/phpspreadsheet 2.1.0 requires ext-dom * but it is not present.     - phpoffice/phpspreadsheet 2.1.0 requires ext-fileinfo * but it is not present.     - phpoffice/phpspreadsheet 2.1.0 requires ext-iconv * but it is not present.     - phpoffice/phpspreadsheet 2.1.0 requires ext-simplexml * but it is not present.   ...

PHP8からMariaDBへUnix Socketで接続する設定

FreeBSDのMariaDBへphpからUnix socketで接続できるようにしたときの覚書。 環境: FreeBSD 14.0, MariaDB 15.1, PHP 8.3.6 (FreeBSDの)PHPで接続先を「localhost」に設定すると、Unix socketを参照しようとする。 「127.0.0.1」すればTCP経由で接続するけど、せっかくなのでTCPを無効にして、Unix socketだけで待ち受けするようにしてみた。 TCPを無効にするには公式サイトを参考に。 参考:  Configuring MariaDB for Remote Client Access - MariaDB Knowledge Base まずは待ち受け中のポート確認。 # netstat -an -p tcp MariaDBの設定ファイル編集。 「port」をコメントアウトする。 # cd /usr/local/etc/mysql/ # less my.cnf [client-server] #port   = 3306 socket  = /var/run/mysql/mysql.sock 「bind-address」をコメントアウトして、「skip-networking」 「skip-bind-address」 を追記する。 「skip-bind-address」は不要だと後で知った。 # less conf.d/server.cnf [mysqld] user                            = mysql # port                          = 3306 # inherited from /usr/local/etc/mysql/my.cnf # socket                  ...

FreeBSD + Nginx + PHP + MariaDBの環境を構築

ローカルの仮想マシンにウェブ開発環境を設定しているときの覚書。 初期設定は前の記事を参考に。 参考:  FreeBSD13.1の仮想マシンをインストールして初期設定 環境: FreeBSD 14.0 OSのバージョン確認 # freebsd-version 14.0-RELEASE-p6 インストール済みのパッケージ情報を表示。 # pkg info 自動起動するサービスはbsdconfigが一覧で分かりやすい。 # bsdconfig 1.nginxのインストール 公式リポジトリを検索。 # pkg search nginx インストールしてconfの場所などビルドオプション確認。 # pkg install nginx # nginx -V nginx version: nginx/1.24.0 built with OpenSSL 3.0.12 24 Oct 2023 TLS SNI support enabled configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --user=www --group=www ... 自動起動ON、起動、確認。 # service nginx enable # service nginx start # service nginx status 設定ファイルを編集。 # cd /usr/local/etc/nginx/ # less nginx.conf worker_processes  auto; events {     worker_connections  1024; } http {     include      ...

PHPでog:imageの日本語部分だけをencodeURIする

Facebookに記事のURLを張り付けたときに画像が表示されなくなったので調査したときの覚書。 環境: WordPress 6.5.2 おそらくog:imageに日本語が含まれているから。 PHPのurlencodeを使うとスラッシュとかもエンコードしてしまうので、日本語部分だけをURLエンコードしたい。 いろいろ調べた結果、WordPressのformatting.phpにある「utf8_uri_encode」を使うのが簡単そう。 確認はシェアデバッガーを使う(旧名はFacebook linter)。 シェアデバッガー - Meta for Developers 【関連記事】 ホームページにOpen Graphを埋め込んでFacebookにURLを張り付けられたときの見え方をコントロール

WordPressの「Favicon by RealFaviconGenerator」エラー対応

WordPressのプラグイン「Favicon by RealFaviconGenerator」がfavicon生成時にエラーになるようになったので調査しているときの覚書。 環境: CentOS Stream 8, PHP 8.0.20, WordPress 6.2.2, Favicon by RealFaviconGenerator 1.3.27 エラー内容 2023/08/04 09:37:36 [error] 1826#1826: *51 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: ftp_pwd(): Argument #1 ($ftp) must be of type resource, null given in /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php:232 Stack trace: #0 /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php(232): ftp_pwd() #1 /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php(459): WP_Filesystem_FTPext->cwd() #2 /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/file.php(1569): WP_Filesystem_FTPext->is_dir() #3 /home/httpd/saitama-nougeka/wordpress/wp-content/plugins/favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-api-response.php(203): unzip...

CentOS9 + PHP8.1の環境にMecab + php-mecabをビルドしてインストール

CentOS Stream 9のVPSに形態素解析の機能をインストールしているときの覚書。 環境: CentOS Stream 9, PHP 8.1.14 ビルドに必要なツールをインストールしておく。 # dnf install make gcc-c++ libticonv php-devel 1.形態素解析「Mecab」をインストール php-mecabをビルドするためにdnf経由ではなくソースコードからビルドする。 公式サイトからダウンロード。 参考:  MeCab: Yet Another Part-of-Speech and Morphological Analyzer # cd /opt/software/ # curl -L "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE" -o mecab.tgz 解凍してビルド実行 # tar xzvf mecab.tgz # rm mecab.tgz # cd mecab-0.996/ # ./configure --with-charset=utf8 # make # make check # make install 確認 # which mecab /usr/local/bin/mecab 辞書をインストールする。 # cd /opt/software/ # curl -L "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM" -o ipadic.tgz # tar xzvf ipadic.tgz # rm ipadic.tgz # cd mecab-ipadic-2.7.0-20070801/ # ./configure --with-charset=utf-8 # make # make install 確認 # mecab -D filename:       /usr/local/lib/mecab/dic/ipadic/sys.dic vers...

短縮URLを独自ドメインで運用できる「Shlink」をインストール

Microsoft TeamsのURLが長いので短くできないものかと調べ、Shlinkをインストールしてみたときの覚書。 環境: CentOS Stream 9, nginx 1.22.1, PHP 8.1.8, shlink 3.5.1 1.Shlinkとは? オープンソースの自前ホストにインストールして運用できる短縮URLシステム。 独自ドメインの短縮URLが生成可能になる。 ウェブ管理ツールのweb clientと分離されている。 web clientがなくてもコマンドラインで短縮URLの生成が可能。 web client自体もオープンソースで配布されている。 Shlink公式サイト/GitHubリポジトリ Shlink — The URL shortener shlinkio/shlink: The definitive self-hosted URL shortener PHP 8.1以上が必要。 2.Shlinkをソースからビルド(失敗) あとで分かったけど アップデート機能があるのでgit cloneする必要はない。 参考:  Shlink — The URL shortener — Documentation まずはPHP Composerをインストール。 公式サイトを参考に。 参考:  Composer # php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" # php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"...