SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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()で確認

libsmbclient - php

使ってみる

・読み出し

//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)を読めということでしょうか。

関連するメモ

コメント