Drupal 8のルーティングシステム(メニューシステム)の解説とサンプルコード

macOSのローカルphpからSMBに接続したい。

ので,Sambaを用いてphpからSMBに接続に接続する拡張モジュールをインストールして使えるようにする。

eduardok/libsmbclient-php: smbclient’s extension for PHP

環境

  • macOS Sierra (10.12.6)
  • Homebrew 導入済み
  • php 7.2導入済み

sambaをソースからインストール

結構ややこしかったので別記事に分けた

libsmbclient-phpをビルド

まずは以下の通りRepositoryをcloneしてくる

$ git clone https://github.com/eduardok/libsmbclient-php
$ cd libsmbclient-php

あとはphpizeして

$ phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718

./configureを実行 この時手動でlibsmbclientの場所を指定してあげる必要があるので注意。

上記の記事通りにインストールしてあれば/opt/samba/includeになる。

$ ./configure --with-libsmbclient=/opt/samba/include

あとはmakeする。

$ make

コンパイルに成功すると./modulessmbclient.soが生成されているはずなので,適当な場所に移動する。

今回はHomebrewで管理しているものとごっちゃにならないように/opt/php72-smbclient/に入れることにした。

$ sudo mkdir /opt/php72-smbclient/
$ sudo cp ./modules/smbclient.so /opt/php72-smbclient/

phpの設定

ビルドしたextensionをphpに読み込ませる

今回はHomebrewを用いてphp7.2をインストールしているので,次のディレクトリに移動

$ cd /usr/local/etc/php/7.2/conf.d/

ここにsmbclient用のiniファイルを作成する。

$ echo -e '[smbclient]nextension="/opt/php72-smbclient/smbclient.so"' > ext-smbclient.ini

後はextensionが読み込まれていることを確認する。

$ php -m | grep smb
libsmbclient
smbclient

これで完了です。

おまけ:ちゃんと動作するか確認してみた

せっかくなので自宅のファイル鯖に接続できるかチェックしてみた。

echo 'PHP Source:'; cat test.php; echo -e '----nResult:'; php test.php 
PHP Source:
<?php
echo file_get_contents('smb://192.168.11.3/public/junk_file_remove.sh');
----
Result:
#!/bin/bash
find /storage ( -name '.DS_Store' -o -name '._*' -o -name '.apdisk' -o -name 'Thumbs.db' -o -name 'Desktop.ini' ) -delete -print

正常に動いているようです。よかった。

関連記事