Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

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

Resources

License

Releases

No releases published

Packages

No packages published
You can’t perform that action at this time.