外部PCの共有フォルダにあるファイルの操作方法を教えてください - PHPプロ!Q&A掲示板

1340

  • 0P

外部PCの共有フォルダにあるファイルの操作方法を教えてください

質問日時 / 2008年7月28日 16:32    回答数 / 8件

Questioner:  php_lover  このエントリーをはてなブックマークに追加 

キーワード / 外部PC    共有フォルダ    opendir   

はじめまして。
表題の件について質問します。
社内LAN上にある他のPCの、
特定の共有フォルダ内にあるファイルのファイルリストを作って、
読み込んで、更に、読み込んだファイルを削除するには、
どうすればいいのでしょうか?

例えば、
ファイルリストを作るには、

$dir_name = "???????";
$dh = opendir( $dir_name );
while( $file = readdir( $dh ) )
{
echo "file_name:".$file.'<br />';
}

みたいに書くんだと思うのですが、
$dir_nameには、どんな感じでアドレスの設定をすればいいのでしょう?

PHPプロという掲示板ですが、
プロには程遠い状態ですが、
よろしくご指導お願いします。
参考になるURLでも結構です。


ツリー一覧

┗A01mgngmgng$dir_name = '//servername/share/directory/'; み
 ┗A01-1php_loverすばやい回答ありがとうございます。 ただ、やってみ
  ┣A01-1-1mgngmgngPHP関係ないですが、 http://www.atmarkit.co.jp/f
  ┃┗A01-1-1-1php_loverおおお! mgngmgngさん、なんどもありがとうございま
  ┗A01-1-2kaitauこんばんは。 的外れかもしれませんが一つ。 >
   ┗A01-1-2-1php_loverkaitau さん、どもです。 すごく参考になりました。
    ┗A01-1-2-1-1mgngmgngwindowsどうしであれば $path = '//126.0.1.148/shar
     ┗A01-1-2-1-1-1php_loverうわお! できました! mgngmgng さん、ありがとう

回答一覧

並び替え:

A01 満足
answerermgngmgng [7月28日 17:09]

$dir_name = '//servername/share/directory/';

みたいな感じでいけそうです。

opendirだと「.」とか「..」も取っちゃうので
glob使ったほうが簡単な気もします。

  1. <?php
  2. $path = '//servername/share/directory/*.*';
  3. foreach (glob($path) as $file) {
  4.   echo "file_name:".basename($file).'<br />';
  5. }

この意見に回答する

ツリーへ TOPへ

A01-1
replyerphp_lover [7月28日 18:10]

すばやい回答ありがとうございます。
ただ、やってみてうまくいきませんでした。
おそらく私が、
自分の環境をキチンと書くのを忘れていたせいかもしれませんね…

ということなので、追記させてください。

まず、サーバーはUbuntuで、
LAMP構築しています。
phpは5.2.4です。
データ共有フォルダは、OSがWindowsのネットワーク内の別PCです。
で、フォルダは、例えば、
"C:\share"
の場合です。

これを、イントラネットの画面で、phpを使って、
Windows PC内のファイルを、サーバーPCに取得する場合です。

$path = '//126.0.1.148/C/share/*.*'; 
foreach (glob($path) as $file)

 echo "file_name:".basename($file).'<br />'; 
}

ご指示のように、こんな書き方したのですが、
うまくいきません。
書き方か、設定に問題があるのでしょうか?
たびたびで恐縮ですが、
よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyermgngmgng [7月28日 19:12] (最終編集:7月28日 19:41)

PHP関係ないですが、

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/126smbmount.html

あたりが参考になるかもしれません。

# すみません、試してません


追記:
マウントがうまくいけば、
//servername/share/...
じゃなくて
/xxx/share/...
でいけそうな気もします。


さらに追記:
こちらの環境(SUSE Linux→Windows共有ディレクトリ参照)では
マウント後、glob('/xxx/share/*.*') でうまくいきました。
ただ、smbmount が使えない場合はよくわかりません。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerphp_lover [7月28日 20:07]

おおお!
mgngmgngさん、なんどもありがとうございます。
なんかすごくためになりそうな情報ありがとうございます。
まだ、自分のlinuxにはSambaのっけてないんですが、
良さそうですね!
挑戦してみます。
挑戦に失敗したら、
報告します!

この意見に回答する

ツリーへ TOPへ

A01-1-2 満足
replyerkaitau [7月28日 19:53]

こんばんは。

的外れかもしれませんが一つ。

> $path = '//126.0.1.148/C/share/*.*'; 

これって、 「C:\」 以下が共有ディレクトリとして設定してあるように読み取れますが、実際のところどうでしょう?
たとえば、「C:\Share」を「share」という名前で共有設定していたら、アクセスは

$path = '//126.0.1.148/share/*.*'; 

になるんじゃないかと思うのですが。

試せる環境にないので、検証はしていません。

この意見に回答する

ツリーへ TOPへ

A01-1-2-1
replyerphp_lover [7月28日 20:29]

kaitau さん、どもです。
すごく参考になりました。
質問する時の、自分の情報の出し方のあいまいさ反省しています。

実は、まだ本当にアクセスしたいPCのアドレス設定していなくて、
まず、自分のwindows PCにつなぐところからやっています。
で、自信がついたら、本番やろうとしてました。

それで、先ほど、mgngmgng さんが、
$dir_name = '//servername/share/directory/';
という例出していたので、
馬鹿正直に、cドライブの直下に'share'というフォルダ作ってやってみたのです。
もしかしたら、
shareっていうのは、
共有フォルダの設定名なのですね!

ということは、共有フォルダの設定名使うと…
例えば、
C:\Documents and Settings\michi\My Documents\share
みたいな場所に、共有フォルダ作ったとしても、
共有フォルダの設定名を使えば、

$path = '//126.0.1.148/share/*.*'; 

こんな感じに書けるということなんですか?
質問を質問で返して恐縮ですが、
ご教授よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A01-1-2-1-1 満足
replyermgngmgng [7月28日 23:08]

windowsどうしであれば
$path = '//126.0.1.148/share/*.*'; 
で参照できましたが、

unix系から参照しようとした場合 $path は
$path = '/126.0.1.148/share/*.*';
と解釈され、もちろんそんなディレクトリはないので
結果取得はできませんでした。

sambaでマウントする必要はありそうです。

# もしかしたら他の抜け道があるかもしれないですが
# よくわかりませんでした。

この意見に回答する

ツリーへ TOPへ

A01-1-2-1-1-1
replyerphp_lover [7月28日 23:52] (最終編集:7月29日 00:18)

うわお!
できました!
mgngmgng さん、ありがとうございます!
おそらく、私、mgngmgng さんに比べ遥かに初心者な為、
mgngmgng さんが大変いいこと言っているのにもかかわらず、
そのポイントに、なかなか気付かないのですね^^;
mgngmgng さんの文章を、いにしえの古文章のように解読して
やっとわかりました!
plusできました。
ちょっと、私のようなど素人な方もいると思いますので
だらだらと解説しておきます~

(1)まず、直前のmgngmgng さんのメッセージ通り、
unixから直接windowsを覗くことができないので、
Sambaとかいう技術を使って、
unixの中に、そのwindows共有フォルダの仮想directoryを作ります。
そこを間接的にのぞいて、リストを取得する作戦です。

(2)自分のUbuntuにSambaをインストールします。

sudo apt-get install samba
sudo apt-get install smbfs

こんな感じでインストールしました。

(3)次に、windows共有フォルダ用のdirectoryを作ります。

sudo mkdir /win

(4)次に、smbmountコマンドで/winにWindowsの共有フォルダをマウントします。
私の場合は、次のように入力しました。

sudo mount -t cifs -o username=php_lover //126.0.1.148/share /win

ハイ、smbmount使ってませんね^^;
しかも、うまくいきませんでした。

(5)理由は、
自分のPCのNortonのファイヤーウォール様と、
Windowsファイヤウォール様が妨害活動をしていたのです。
そこで、
LinuxサーバーのIPのみ、通信制限を解除しました。

(6)これで(4)がうまくいきました。
dfコマンド

//126.0.1.148/share  244187968  39664012 204523956  17% /win

/win ディレクトリに、//126.0.1.148/shareが紐づいていて万歳しました。

(7)最後に、php上で次のように入力して、
リストが取得できました。

$path = '/win/*.*';
foreach (glob($path) as $file)

 echo "file_name:".basename($file).'<br />'; 
}

$pathに、linux自身のアドレスを入力するのが、味噌なんですね!

もう、大変ありがとうございました!
ちなみに、勘違いしているところありましたら、
補足などよろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報