Open4

PHPの歴史的な理由がある標準関数についてのまとめ

スースー

概要

https://www.php.net/manual/ja/history.php.php

前提

2023/11 (PHP8.3リリース前)時点でのphp.netの情報を元とします。

標準関数

https://www.slideshare.net/ebihara/php-32340906
↑こちらにurlencode,rawurlencode,gettype,Pharファイルフォーマットなどについての記述がすでにある

https://github.com/search?q=repo%3Aphp%2Fdoc-ja 歴史的な理由&type=code

すでに解説済みか? 関数名 公式ドキュメントリンク 補足
snmpwalkoid https://www.php.net/manual/ja/function.snmpwalkoid.php snmprealwalk()が移行先として推奨されている。歴史的な理由の主なものとしては下位互換のため
snmpwalk https://www.php.net/manual/ja/function.snmpwalk.php snmprealwalk()が移行先として推奨されている。歴史的な理由の主なものとしては下位互換のため
ユーザー定義関数 https://www.php.net/manual/ja/functions.user-defined.php
OCI8接続のハンドリングおよびプーリング https://www.php.net/manual/ja/oci8.connection
get_debug_type https://www.php.net/manual/ja/function.get-debug-type.php PHP8.0から追加されたもの。gettypeについての歴史的な理由により、書いてあるだけなので、対象外となる。gettypeで解説されている。
gettype https://www.php.net/manual/ja/function.gettype.php
urlencode https://www.php.net/manual/ja/function.urlencode
Pharファイルフォーマット https://www.php.net/manual/ja/phar.fileformat.phar.php Phar マニフェストは高度に最適化された書式で、 ファイル単位で圧縮やパーミッションの情報を指定することができ、 さらにファイルのユーザーやグループなど、独自に定義したメタデータも含めることができます。 1 バイトをこえる大きさの値はリトルエンディアン形式のバイト順で保存されます。 ただし API バージョンだけは例外です。これは 3 ニブルのデータですが、 歴史的な理由によりビッグエンディアン形式のバイト順で保存されます。
implode https://www.php.net/manual/ja/migration74.deprecated.php 引数の順序がPHP7.4でdeprecatedとされて変更された
rawurlencode https://www.php.net/manual/ja/function.rawurlencode.php

どこから歴史を辿るのか?

PHPのRFCでの議論をみる

https://php-rfc-watch.beberlei.de

参考

https://github.com/search?q=repo%3Aphp%2Fdoc-ja 歴史的な&type=code
https://github.com/search?q=repo%3Aphp%2Fdoc-en+historical&type=code
https://www.slideshare.net/ebihara/php-32340906
https://zenn.dev/pixiv/articles/756ce0bcbdd1be
https://qiita.com/masakielastic/items/a3080c7744f1be97a17c

スースー

snmpwalkoid

snmpwalkoid() 関数は、hostname で指定した SNMP エージェントから すべてのオブジェクト ID とその値を読みこむために使用します。

いつからある?

PHP4から。

具体的には、何で利用される標準関数なのか?

理解するために色々前提の理解が必要

SNMP

SNMP(Simple Network Management Protocol)は、UDP/IPベースのネットワーク監視、ネットワーク管理を行うためのプロトコルです。ルーター、スイッチなどのネットワーク機器、WindowsやUNIXサーバーなどの状態監視、リソース監視、パフォーマンス監視、トラフィック監視を行うために使用します。一般的に、サーバーに対しては、CPU使用率、メモリ使用率、ディスク使用率、プロセス監視、Windowsイベントログ監視、Syslog監視を行います。ネットワーク機器に対しては、各ポート上で送受信されたパケット数、エラーパケット数、ポートの状態(up/down)、およびCPU使用率、メモリ使用率などを監視します。ベンダによっては機器固有の管理項目を公開しているものがあり、きめ細かい監視が可能です。

https://blogs.manageengine.jp/itom_what_is_snmp/

OID(Object IDentifier)

各情報に対して割り当てられる一意な番号。各SNMPコマンドでの情報取得に必要なID

snmpwalk

そもそもsnmpwalkというコマンドが存在する。
指定したOID配下に含まれるすべてのOIDと、値を取得するコマンド。
snmpwalkoidはそのコマンドのOIDのみを取得できるようにしたコマンドと理解できる。

↓のように割り振られている。それをwalkするための標準関数。

https://qiita.com/Mabuchin/items/d435c0afb4f0ca17ad25
https://www.secuavail.com/kb/log-technique/about-snmp/#:~:text=OID(Object IDentifier):各,割り当てられる一意な番号。

つまりネットワーク監視のために利用されるため、Laravelとか一般的なフレームワークではそもそも利用すらされていない。

使い方想定

テストから読み取るのが早そう

https://github.com/php/php-src/blob/b06fedb41d560f756dfb5d964b0d36a224e44dc7/ext/snmp/tests/snmprealwalk.phpt#L21

SNMPの標準関数群について

https://www.php.net/manual/ja/intro.snmp.php
↑こちらを読めば分かるとおり、ラッパーの関数群であることがわかる

SNMP 拡張モジュールは非常にシンプルで使い勝手の良いツール群です。 Simple Network Managment Protocol を使ってリモートデバイスを管理することができます。
これは Net-SNMP ライブラリのラッパーなので、 基本的な考え方はこのライブラリと同じです。また、Net-SNMP の設定ファイルや環境変数によって PHP の関数の挙動も変わります。
Net-SNMP についての詳細な情報は » http://www.net-snmp.org/ にあります。

歴史的な経緯

Version 4.0, Release Candidate 2

snmp_walkoid is now an alias for snmp_realwalk. (Sterling)

ここでsnmp_realwalkへ修正されている