「プログラミング」カテゴリーアーカイブ

PHPアップデート後にWordPressが真っ白に?致命的エラーから復旧する方法

WordPressでサイトを運営していると、サーバー側でPHPのバージョンを更新した際に「致命的エラー(Fatal Error)」が発生し、サイトが真っ白になって表示されなくなることがあります。
これは古いテーマやプラグインが新しいPHPに対応していないことが主な原因です。

この記事では、PHP更新後にWordPressが表示されなくなったときの原因と復旧手順をわかりやすく解説します。


よくある原因

  • プラグインの非互換性
    古いプラグインがPHPの新しい構文に対応しておらず、エラーを引き起こす。

  • テーマのコードが古い
    独自テーマや更新が止まっているテーマが最新PHPで動作しない。

  • キャッシュや.htaccessの問題
    PHP切替直後にキャッシュが残っていたり、設定ファイルが古い記述を持っている場合。


復旧のためのステップ

1. エラーメッセージを確認する

  • サイトは真っ白でも、サーバーログ(error_log)やWordPressのデバッグモードで原因を確認できます。

  • wp-config.php に以下を追加するとエラー内容が記録されます。

    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
  • この設定を有効にすると、wp-content/debug.log というファイルが自動的に作成され、エラー内容が追記されていきます。

  • サイト訪問者にエラーメッセージを見せずに、管理者だけがエラーを確認できるので安心です。

2. プラグインを停止する

  • FTPやファイルマネージャーで wp-content/plugins フォルダを開き、問題のプラグインを一時的にリネーム(例: simple-lightboxsimple-lightbox_old)。

  • これでサイトが表示されれば、そのプラグインが原因です。

3. テーマを切り替える

  • wp-content/themes 内の現在のテーマをリネームすると、自動的にWordPressのデフォルトテーマ(Twenty Twenty系など)が有効化されます。

  • これで表示されれば、使用中のテーマが原因です。

4. PHPバージョンを一時的に戻す

  • サーバーの管理画面からPHPを前のバージョンに戻せば、とりあえずサイトは表示されます。

  • その後、プラグインやテーマを更新して対応を進めましょう。

5. 最新バージョンへの対応

  • プラグイン・テーマの更新を行いましょう。開発が止まっている場合は代替のプラグインを探すのが現実的です。

  • サイト全体のバックアップを取り、再度PHPを新しいバージョンに切り替えます。


再発防止のポイント

  • PHP更新前にステージング環境やテスト環境で動作確認する。

  • 定期的にテーマ・プラグインを更新しておく。

  • 更新が止まっているプラグインはできるだけ使用しない。


まとめ

PHPアップデート後にWordPressが「真っ白」になった場合、慌てずに以下の流れで対応しましょう。

  1. エラーログやデバッグモードで原因を確認

  2. プラグインやテーマを無効化して切り分け

  3. 必要に応じてPHPを一時的に戻す

  4. プラグイン・テーマを更新して再度挑戦

この手順を踏めば、多くのケースで復旧が可能です。
「真っ白画面」は焦りますが、落ち着いて対応すれば必ず解決できます。

PHP7.4.33からPHP8.3への移行ポイント:互換性・新機能・対応策まとめ

PHP7.4.33 は 2022年11月に 公式サポートが終了 (EOL) しており、セキュリティ更新も提供されません。
一方で、PHP8系は活発に開発が続けられており、最新の PHP8.3 ではパフォーマンス改善や新機能追加が進んでいます。
本記事では、PHP7.4.33からPHP8.3へ移行する際のポイントを 互換性・新機能・対応策 の3つの観点から整理し、具体的な修正例も比較表で紹介します。

WordPressなどで作成してるようなサイトだとついつい後回しになりがちなので注意しましょう。


1. 互換性のポイント

主な変更点

  • 非推奨機能の廃止create_function, ereg など)

  • 型システムの強化(引数や戻り値の厳格化)

  • Warning → Fatal Error への昇格(未定義配列キーなど)

  • 動的プロパティ禁止(PHP8.2以降)


2. PHP7.4 → PHP8.3 修正例(比較表)

項目PHP7.4での書き方PHP8.3での修正例エラー内容(PHP8.3)
動的プロパティclass User { }
$u = new User();
$u->name = "Alice"; // OK
class User { public string $name; }
$u = new User();
$u->name = "Alice"; // OK
Deprecated: Creation of dynamic property User::$name is deprecated
未定義配列キー$arr = [];
echo $arr["key"]; // Warning
$arr = [];
echo $arr["key"] ?? null; // Notice回避
Warning: Undefined array key "key"
create_functionの廃止$f = create_function('$x', 'return $x * 2;');
echo $f(3);
$f = fn($x) => $x * 2;
echo $f(3);
Fatal error: Uncaught Error: Call to undefined function create_function()
ereg → pregへの移行if (ereg("^[a-z]+$", $str)) { ... }if (preg_match("/^[a-z]+$/", $str)) { ... }Fatal error: Uncaught Error: Call to undefined function ereg()
implodeの引数順implode($array, ","); // Warningimplode(",", $array); // 正しい順序Deprecated: implode(): Passing glue after array is deprecated
型厳格化 (関数引数)function add($a, $b) { return $a + $b; }
echo add("1", 2); // 3 (暗黙変換)
function add(int $a, int $b): int { return $a + $b; }
echo add(1, 2); // OK
// 文字列を渡すと TypeError
Fatal error: Uncaught TypeError: add(): Argument #1 ($a) must be of type int, string given

 


3. 新機能の注目ポイント(PHP8.0〜8.3)


PHP8.0

  • JITコンパイル導入 → 数割の高速化

  • Union Types

  • Named Arguments

PHP8.1

  • Enums

  • Readonlyプロパティ

  • Fiber

PHP8.2

  • Readonlyクラス

  • Dynamic Properties 廃止

PHP8.3

  • Typed Class Constants

  • json_validate()

  • パフォーマンス改善(クラスロード周り)


4. 移行時の対応ステップ

  1. 検証環境構築(DockerやXAMPPなどでPHP8.3動作確認)

  2. composer update で依存パッケージをPHP8系対応版へ更新

  3. Deprecationログ確認(7.4でDeprecatedが出ていれば必ず修正)

  4. 段階的アップグレード(7.4 → 8.0 → 8.1 → 8.3 が安全)


まとめ

  • PHP7.4.33はEOL済みで脆弱性リスク大。

  • 移行時は 非推奨関数・型厳格化・動的プロパティ に注意。

  • 修正例を比較表で押さえておけば対応しやすい。

  • 最新のフレームワーク(Laravel, Symfony など)はPHP8.1以上必須が主流。

👉 早めにPHP8.3へ移行して、セキュリティ・パフォーマンス・開発効率を改善しましょう。

PowerShellスクリプトが権限エラーで実行できない!ExecutionPolicy設定で解決する方法

PowerShell でスクリプトを実行しようとすると
「このシステムではスクリプトは実行できません」
といった権限エラーが出ることがあります。

原因は ExecutionPolicy(実行ポリシー) の設定にあります。
この記事では、

  • Get-ExecutionPolicy -List で確認できる各項目の意味

  • 設定できる ExecutionPolicy の種類

  • 初心者でも安全にスクリプトを実行するための方法

を解説します。


Get-ExecutionPolicy -List で分かること

Get-ExecutionPolicy -List を実行すると、スコープごとの設定が一覧表示されます。

例:

各スコープの意味

  • MachinePolicy
    グループポリシーでコンピュータ全体に適用される設定。通常の環境では Undefined が多い。

  • UserPolicy
    グループポリシーでユーザー単位に適用される設定。これも Undefined が一般的。

  • Process
    現在の PowerShell プロセス(セッション)だけに適用される一時設定。
    終了するとリセットされる。

  • CurrentUser
    現在ログインしているユーザーだけに適用される設定。
    管理者権限なしで変更可能なので、初心者はここを設定するのが安全

  • LocalMachine
    コンピュータ全体に適用される設定。管理者権限が必要。


ExecutionPolicy の種類

設定できる実行ポリシーには以下の種類があります。

Policy概要署名の要否典型用途リスク度(1-5)推奨スコープ設定例(Set-ExecutionPolicy)補足
Restrictedスクリプト実行を全て禁止不要(そもそも実行不可)企業の厳格端末/検証用の完全遮断2LocalMachineSet-ExecutionPolicy Restricted -Scope LocalMachine既定値になりがち。学習/自動化には不向き
AllSigned信頼された発行元の署名付きのみ実行可必須(すべて)厳格な本番環境での運用3LocalMachine または CurrentUserSet-ExecutionPolicy AllSigned -Scope CurrentUser署名管理が前提。外部スクリプトの安全性担保
RemoteSignedローカル作成は実行可/インターネット由来は署名必須リモート(ダウンロード物)のみ必須一般的な開発/運用でのバランス設定2CurrentUser(推奨)Set-ExecutionPolicy RemoteSigned -Scope CurrentUser最も無難。管理者権限不要でユーザー単位に適用
Unrestricted全て実行可(初回に警告が出る場合あり)不要検証/一時的な作業で制限を緩めたい時4Process または CurrentUserSet-ExecutionPolicy Unrestricted -Scope Process恒常運用は非推奨。警告は出るが実行は可能
Bypassブロック/警告なしで全て実行不要自動化ジョブ/一時的に完全無視したい時5Process(強く推奨)Set-ExecutionPolicy Bypass -Scope Processセッション限定で使う。恒常設定は危険
Undefinedスコープに設定なし(上位スコープへ委譲)ポリシー未設定状態の表示1全スコープUndefinedの場合は実質Restrictedが有効になることが多い

 


安全に設定する方法

権限エラーを解決するには、スコープを指定して設定します。

現在のユーザーだけに設定する場合(推奨)

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  • 管理者権限が不要

  • 他のユーザーやシステム全体には影響しない

  • ローカルで作ったスクリプトは実行可能

一時的に設定する場合(PowerShellを閉じるとリセット)

Set-ExecutionPolicy Bypass -Scope Process

まとめ

  • ExecutionPolicy が原因で PowerShell スクリプトが実行できないことがある

  • Get-ExecutionPolicy -List でどのスコープに設定があるかを確認できる

  • 初心者は CurrentUser に RemoteSigned を設定するのが安全

  • 目的に応じて、Process(一時的)や LocalMachine(管理者権限が必要)も使える

PowerShellでテキストファイルから特定の行だけ抽出する方法

テキストファイルを処理して「特定の行だけ抜き出したい」という場面は、ログ解析やデータ処理を行う際によくあります。PowerShellを使えば、シンプルなコマンドで効率的に抽出可能です。本記事では、PowerShellによる代表的な方法を解説します。


基本的な考え方

PowerShellでは、Get-Content コマンドレットでテキストファイルを1行ずつ取得できます。そこから条件を指定して、欲しい行をフィルタリングすれば目的の行を抽出できます。


方法1:行番号で抽出する

特定の行番号を指定して抽出するには配列インデックスを利用します。PowerShellは0から数えるので注意しましょう。

# 3行目(インデックス2)を取得
(Get-Content "sample.txt")[2]

複数行をまとめて取得することも可能です。

# 1行目と5行目を取得
(Get-Content "sample.txt")[0,4]

方法2:条件で抽出する(文字列検索)

キーワードを含む行だけを抽出するには Select-String を使います。

# "Error" を含む行を抽出
Select-String -Path "sample.txt" -Pattern "Error"

この場合、ヒットした行番号と内容が出力されます。内容だけ欲しい場合は以下のように書けます。

# 行の内容だけ表示
Select-String -Path "sample.txt" -Pattern "Error" | ForEach-Object { $_.Line }
 

方法3:正規表現で抽出する

複雑な条件にマッチさせたい場合は正規表現を活用できます。

# 数字で始まる行を抽出
Select-String -Path "sample.txt" -Pattern "^\d+" | ForEach-Object { $_.Line }

方法4:範囲指定で抽出する

特定の行範囲を取り出したい場合は Select-Object を利用します。

# 1〜10行目を抽出
Get-Content "sample.txt" | Select-Object -First 10

# 5〜10行目を抽出
Get-Content "sample.txt" | Select-Object -Index 4..9

まとめ

  • 行番号で取得 → 配列インデックス

  • キーワードで取得Select-String

  • 複雑条件 → 正規表現

  • 範囲指定Select-Object

PowerShellを使えば、テキストファイルの解析や必要な行だけの抽出を簡単に自動化できます。ログファイル処理やデータ前処理など、日々の作業効率化にぜひ活用してみてください。

PowerShellでフォルダ内のファイル一覧を取得してCSVに出力する方法

Windows環境でフォルダ内のファイル一覧を取得したい場面は多々あります。例えば、定期的なファイル管理や監査用の記録、またはバックアップ作業のために一覧をエクスポートしたい場合です。
PowerShellを使えば、簡単にフォルダ内のファイル一覧を取得し、そのままCSV形式で保存することができます。

この記事では、PowerShellでフォルダ内のファイル一覧を取得し、CSVに出力する方法を解説します。


基本コマンド

まずは基本となるコマンドです。
以下の例では、C:\Test フォルダ内のファイル一覧を取得し、filelist.csv に出力します。

Get-ChildItem "C:\Test" | Export-Csv -Path "C:\Test\filelist.csv" -NoTypeInformation -Encoding UTF8

各コマンドの意味

  • Get-ChildItem "C:\Test"
    指定フォルダ内のファイルやフォルダを取得します。gcidir と省略可能。

  • Export-Csv
    取得結果をCSVに変換して保存します。

  • -NoTypeInformation
    CSVの先頭に不要な型情報行を出力しないようにします。

  • -Encoding UTF8
    CSVファイルの文字コードをUTF-8に指定します(文字化け防止)。


ファイルのみ取得する場合

フォルダ名は不要で、ファイルだけを取得したい場合は -File オプションを指定します。

Get-ChildItem "C:\Test" -File | Export-Csv -Path "C:\Test\filelist.csv" -NoTypeInformation -Encoding UTF8

サブフォルダも含めて取得する場合

サブフォルダ内のファイルもまとめて一覧化するには -Recurse を付けます。

Get-ChildItem "C:\Test" -File -Recurse | Export-Csv -Path "C:\Test\filelist_all.csv" -NoTypeInformation -Encoding UTF8

出力内容を絞り込む

CSVに出力する項目を指定することも可能です。例えば、フルパス、サイズ、更新日時 だけを出力する場合:

Get-ChildItem "C:\Test" -File | Select-Object FullName, Length, LastWriteTime | Export-Csv -Path "C:\Test\filelist_simple.csv" -NoTypeInformation -Encoding UTF8
これにより、余計な情報を省き、必要なデータだけをCSVに保存できます。

実行例イメージ

出力されるCSVファイルをExcelで開くと、以下のように一覧が表示されます。

FullName Length LastWriteTime
C:\Test\document1.txt 1234 2025/09/17 10:30:00
C:\Test\image.png 45678 2025/09/16 15:20:00
C:\Test\subfolder\report.docx 9876 2025/09/15 09:10:00

まとめ

  • Get-ChildItem でフォルダ内のファイル一覧を取得できる

  • Export-Csv を組み合わせることで、簡単にCSVへ出力可能

  • -File-RecurseSelect-Object を使えば用途に合わせて柔軟に一覧化できる

PowerShellを使えば、手作業でリスト化する手間を省き、自動化できるのでぜひ活用してみてください。

CSVファイルの 「BOMあり」、「BOMなし」とは?

  • はじめに

    CSVファイルを扱っていると、「BOMあり」「BOMなし」という言葉を目にすることがあります。
    特にExcelで開いたときに文字化けしてしまった経験がある方は、この違いが大きな意味を持つことを知っておくと便利です。
    この記事では、BOMの基礎から、Excelやシステムでの扱い方、確認方法まで解説します。


    BOMとは?

    BOM(Byte Order Mark)は、テキストファイルの先頭に付与される特殊な「目印」です。
    文字コードを示すために使われ、特にUTF-8では以下の3バイトがBOMになります。

    EF BB BF

    これがあるファイルを「BOMあり」、ないファイルを「BOMなし」と呼びます。


    BOMありとBOMなしの違い

    BOMあり

    • Excelなどで開くと文字化けしにくい

    • 日本語環境のExcelではBOM付きの方が安全に扱える

    BOMなし

    • Linux系のシステムやプログラムでは一般的

    • 余計なバイトが含まれないためシステム連携や自動処理で好まれる


    Sakuraエディタで違いが分からない理由

    Sakuraエディタはとても優秀で、UTF-8のBOMがあってもなくても正しく解釈して表示します。
    そのため、見た目では違いが分からないのです。
    他のソフトでは「」のような文字が先頭に表示されることもありますが、Sakuraではそうした問題は起きません。


    BOMの有無を確認する方法

    1. Sakuraエディタで確認

    • メニュー → ファイル文字コード指定して開く

    • 「UTF-8」または「UTF-8 (BOM付き)」が表示される

    2. バイナリエディタで確認

    • BOMあり:ファイル先頭に EF BB BF

    • BOMなし:すぐに「ID,名前,点数」などの内容が始まる

    3. コマンドで確認

    • Windows (PowerShell)



      → BOMありなら 239 187 191 が表示されます

    • Linux

      xxd -l 3 sample.csv

      → BOMありなら ef bb bf が確認できます


    利用シーン別の使い分け

    利用シーン おすすめ設定 理由
    ExcelでCSVを開く場合 BOMあり(UTF-8 BOM) 文字化けを防ぎ、正しく読み込める
    プログラムやLinux環境で処理 BOMなし(UTF-8) 不要なバイトがなく安定処理できる
    BOMの有無を確認したい場合 バイナリやコマンド 確実に判別可能

    まとめ

    CSVファイルの「BOMあり/なし」は目で見える違いはなく、特にSakuraエディタではどちらでも正しく開けます。
    しかし、Excelでの文字化けやシステム連携時の不具合を避けるためには、利用シーンに応じた使い分けが重要です。

    • Excel → BOMあり

    • プログラム処理 → BOMなし

    ぜひ状況に合わせて正しく選択してください。

BOMありのサンプル例

sample_bom

BOMなしのサンプル例

sample_no_bom

HTML:番号付きリストの開始番号を変更する方法

HTMLで番号付きリストを表示するのは<ol>タグの中に<li>タグを記述することで表現できますが、<ol>タグにreversed属性やstart属性、type属性を付与することで表示される番号を操作することが出来ます。

<ol>タグに何も属性付けない場合

HTML

<ol>
<li>パソコン</li>
<li>テレビ</li>
<li>ソファー</li>
</ol>

表示結果

  1. パソコン
  2. テレビ
  3. ソファー

 

<ol>タグにreversed属性を付けた場合

HTML

表示結果

  1. パソコン
  2. テレビ
  3. ソファー

 

<ol>タグにstart属性を付けた場合

HTML

表示結果

  1. パソコン
  2. テレビ
  3. ソファー

<ol>タグにtype属性を付けた場合

HTML

<ol type="A">
<li>パソコン</li>
<li>テレビ</li>
<li>ソファー</li>
</ol>

表示結果

  1. パソコン
  2. テレビ
  3. ソファー

IEに互換表示をさせない「X-UA-Compatible」の指定方法

Web開発者泣かせでお馴染みのIEにはIEの過去バージョンモードで表示出来る互換表示機能があります。
しかし互換表示することで表示が崩れてしまう場合、デフォルトでは互換表示させたくないケースが多々あります。
そういう場合にはmetaタグで「X-UA-Compatible」を指定する事で互換モードではなく、使用しているIEの各バージョンの標準モードでレンダリングさせる事が可能となります。

使用しているIEの各バージョン毎でレンダリング

    使用しているIEの各バージョン毎でレンダリングさせたい場合は「X-UA-Compatible」へ「IE=edge」を指定します。

IEのバージョン固定でレンダリング

    特定のIEのバージョン固定でレンダリングさせたい場合は「X-UA-Compatible」へIE8なら「IE=8」、IE11なら「IE=11」を指定します。
    例えば「IE=8」を指定した場合、ブラウザのバージョンはIE11でもIE8の互換モードでレンダリングされます。

jQueryのバージョン:1.x系と2.x系の違い

jQueryの豆知識ですが、jQueryのバージョンは大きく1.x系と2.x系の2つに分けられます。この2つの違いについてメモしておきます。

jQuery 1.x 系

    主に、IE8以前のバージョンを含むレガシーブラウザ向けをサポートするバージョンです。

jQuery 2.x 系

    IE8以前のサポートは切り捨てて、より高速に安定して動作させることを目指したモダンブラウザ向けのバージョンです。

jQuery 本体のダウンロード

  1. 以下サイトへアクセスし、左上にあるDownloadボタンを選択します。
    http://jquery.com/
  2. Downloadページが表示されると 1.x系と2.xに分かれているのがわかります。

案件により対応ブラウザを確認してjQueryのバージョンは選択しましょう。

JSPコメントとHTMLコメントの違い

JSPのコメント文とHTMLのコメント文の違いについてまとめておきます。

JSPのコメント

HTMLのコメント

さて、両者の違いとは何でしょうか。

見た目大して変わらないしどっちでもいいんじゃない。というのは大きな間違いで、HTMLのコメント文はサーブレット変換時にコメントも「out.println()」によってクライアントに対して出力されてしまいます。要はそのページを表示して右クリックなどから「ソースコードを表示」などを選択するとそのコメント文もクライアント側から確認可能となります。
対してJSPのコメント文はソースコードを表示してもクライアント側から確認する事は出来ません。

使い分けとしては、そのページの開発者サイドにのみ伝えておきたい内容などは「JSPのコメント文」、そのページを閲覧するクライアント側がソースコードを確認した時に伝えたい内容は「HTMLのコメント文」というように使い分けましょう。