【php】phpでsambaに接続したい(phpでファイルサーバーのファイルを読み書きしたい)
問題
phpでsambaに接続してファイルを読み書きするのは可能?
phpでfopen(‘smb://user:password@192.168.123.123/xxxxxxxx’); みたいなことできないよね。
答え
デフォルトではsambaにアクセスできるラッパー(smb://~ができるラッパー)がない。
そこでlibsmbclientを利用したphpのextensionを使う方法をご紹介。
- 入手
- こちらから → https://github.com/eduardok/libsmbclient-php
- コンパイル
-
# cd libsmbclient-php # phpize # ./configure # make # make install
configure でライブラリが足らないといわれたら
yum install libsmbclient libsmbclient-devel
- phpの設定
-
php.ini に以下を追加。
extension="libsmbclient.so"
httpd 再起動。
別な方法としては、必要なときだけに dl(‘no-debug-non-zts-20020429/libsmbclient.so’); などしてもよい。
- 確認
-
phpinfo()で確認
- 使ってみる
-
・読み出し
//dl('no-debug-non-zts-20020429/libsmbclient.so'); $fh = smbclient_open('smb://user:password@192.168.123.123/xxxxxxxx/test.txt'); while($str = smbclient_read($fh, 4096)) { var_dump($str); } smbclient_close($fh);
その他、これらの関数が使えるようです。
- smbclient_opendir()
- smbclient_rename()
- smbclient_mkdir()
- smbclient_closedir()
- smbclient_readdir()
- smbclient_stat()
- smbclient_open()
- smbclient_creat()
- smbclient_read()
- smbclient_close()
- smbclient_write()
- smbclient_unlink()
- smbclient_rmdir()
マニュアル類が見当たらないので、細かいところはソース(libsmbclient.c)を読めということでしょうか。
コメント