kahagon / php-eject

eject API for PHP

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

php-eject

使い方

$ php -a
Interactive shell

php > eject_toggle_tray("cdrom");
php > eject_close_tray("cdrom");

能書き

Ejectコマンドユーザー会を見つけて徹夜明けのどうしようもないテンションで作りました。
Ejectコマンドユーザー会の GitHub リポジトリ を眺めていると eject は以下のように行われていました。
Eject-Command-Users-Group/minimum-sample.php

exec('/usr/sbin/eject -T /dev/sr0');

実装方法としてはとってリ早い exec のコール。しかし、 PHP の exec の実装は popen(3) を用いています。
php-src/TSRM/tsrm_virtual_cwd.h
このため、内部的に eject を実装するのに比べ、いくらかオーバーヘッドが生じます。
man popen(3) によると、

FILE *popen(const char *command, const char *type);
(中略)
popen() 関数は、プロセスをオープンする。具体的には、パイプを生成し、フォークを行い、 シェルを起動する。

とあります。つまり、「パイプを生成し、フォークを行い、 シェルを起動」というあたりがオーバーヘッドになり、 大規模な eject サービス ではこれがボトルネックになりうると考えられます。 そこで eject を PHP に組み込もうと考えるに至りました。 php-eject の実装はシンプルで、ほとんどが eject(1) の実装をパクリ、元い、コピペしたものです。

Unix-likeなOSでのビルド・インストール

$ phpize
$ ./configure [--enable-eject] 
$ make
$ make test
$ [sudo] make install

インストールの後、以下の行を php.ini に追加してください。

extension=Eject.so

Windows

php_Eject.dll を、お使いの PHP の extension_dir にインストールし、以下の行を php.ini に追加してください。

extension=php_Eject.dll

コマンドラインから次のように Eject できます。この例では E ドライブを用いています。

php -r 'eject_toggle_tray("\\\\.\\E:");'

About

eject API for PHP

License:Other


Languages

Language:C 91.4%Language:Shell 6.8%Language:PHP 1.8%