2025年5月3日土曜日

PHPで Notice: Use of undefined constant STDIN - assumed 'STDIN' というエラーが表示される場合

 PHPで Notice: Use of undefined constant STDIN - assumed 'STDIN' というエラーが表示される場合、それは PHP のバージョンが比較的新しく、STDIN が予約語ではなくなったことが原因である可能性が高いです。

PHP 8.1.0 以降では、STDINSTDOUTSTDERR はグローバルな定数ではなくなりました。代わりに、ストリームリソースとして扱う必要があります。

対処方法:

エラーを解消し、標準入力を使用するには、fopen() 関数を使って標準入力ストリームを開く必要があります。

修正例:

エラーが発生しているコードで STDIN を使用している箇所を、以下のように修正してください。

修正前:

PHP
$input = fgets(STDIN);

修正後:

PHP
$stdin = fopen('php://stdin', 'r');
$input = fgets($stdin);
fclose($stdin); // ストリームを閉じる (推奨)

解説:

  1. fopen('php://stdin', 'r'): この行は、標準入力ストリームを読み取りモード ('r') で開きます。php://stdin は、標準入力を表す特別なストリームです。この関数は、ストリームリソースを返します。
  2. $input = fgets($stdin);: fgets() 関数に、グローバル定数 STDIN の代わりに、fopen() で取得したストリームリソース $stdin を渡します。これにより、標準入力から1行読み込むことができます。
  3. fclose($stdin);: 使用が終わったストリームリソースは、fclose() 関数で明示的に閉じるのが推奨されるプラクティスです。

もし、あなたのPHPのバージョンが 8.1.0 より古い場合:

このエラーは通常発生しません。もし古いバージョンでこのエラーが出ている場合は、コード内で誤って STDIN という名前の別の定数や変数を定義しようとしていないか確認してください。

まとめ:

Notice: Use of undefined constant STDIN エラーは、PHP 8.1.0 以降で標準入力を使用する際の変更点に関連しています。fopen('php://stdin', 'r') を使って標準入力ストリームを開き、そのリソースを fgets() に渡すようにコードを修正してください。

0 件のコメント:

コメントを投稿