[PHP-users 31741] phpからWindowsサーバー上のファイルにアクセスする方法は?

tatsuya tatsuya @ kk-okamoto.jp
2007年 3月 23日 (金) 10:00:38 JST


松山と申します。
RedHat7.3J(FTP版)上で
apache_1.3.26+php-4.2.3+samba-2.2.7b-ja-1.0という環境で社内向けの
Webアプリを開発しています。

今、Windows系クライアントから
本機のsambaボリュームに多数のjpgファイルを保存させています。

このページをWebアプリから3枚ずつ抽出して閲覧するために
下記のコードでphpからjpgファイルへのファイルパスをhtmlのテンプレートファイル
に書き出しさせています。

今、jpgファイルが多くなるにつれ、
phpと同一サーバー上に置いておくのが困難になってきました。

保守管理上、jpgファイルをWindows系のサーバーに保管させたいと
考えています。

そこで、下記の2つの方針を立てて検討中です。
1.jpgファイル呼び出しをクライアントサイドのIEのjscriptで書いて処理する。
2.phpから■別のWindows 2000 server■からファイルパスを読み出し処理する。

1.を試したところ、ネストの深いjpgファイルをネットワーク越しのサーバーから読
み出すと
速度のせい(?)かfile:ストリームのスピードの問題か(?)、
開かれたWeb画面でjpgファイルを一発で読み込めず、再読込みしないと表示されませ
ん。

そこで2の方法を試そうと思うのですが、
opendir();の中に指定する、「別のWindows 2000 server」を指定する方法が
分かりません。

この場合、
3.WindowsサーバーにLinuxからアクセスさせる設定をかける
4.Linux上のphpにWindowsファイルをアクセスさせる設定をかける
5.その他

のどれが適切なのでしょうか?
よろしくお願いします。

<?php

// このプログラムは、
// 写真保存用の指定ディレクトリからデータを抽出します。
//

// getデータ取得
$n    = $_GET['n'];
$path = $_GET['shasin_path'];
$path_euc  = mb_convert_encoding($_GET['shasin_path'], "euc",      "auto");
$path_sjis = mb_convert_encoding($_GET['shasin_path'], "SJIS-win", "auto");

//ファイルリスト取得
$i=0;
$handle = opendir("/usr/local/public/kouji_shasin/$path_euc");
while (false !== ($file_name = readdir($handle)))
{
 if ($file_name != "." && $file_name != "..")
 {
         $file_list[$i] = $file_name;
  $i++;
 }
}
closedir($handle);

// ファイル名で並び替え
sort($file_list);

// file名セット(配列定義がない場合は"")
$file1  = mb_convert_encoding($file_list[$n], "SJIS-win", "auto");
if(is_dir("/usr/local/public/kouji_shasin/$path/".$file_list[$n]))
{
 // ディレクトリの場合
 $image1 = "<a
href=\"javascript:call('kouji_shasin.html&shasin_path=$path/".$file1."&n=0')
\"><img src=\"$url/picture/folder_big.gif\" border=0></a>";
} else {
 // ディレクトリでないの場合
 $image1 = "<img
src=\"file://db1/okamoto_pub/kouji_shasin/$path_sjis/$file1\" width=\"384\"
height=\"288\">";
}

if(isset($file_list[$n+1]))
{
 $file2  = mb_convert_encoding($file_list[$n+1], "SJIS-win", "auto");
 if(is_dir("/usr/local/public/kouji_shasin/$path/".$file_list[$n+1]))
 {
  // ディレクトリの場合
  $image2 = "<a
href=\"javascript:call('kouji_shasin.html&shasin_path=$path/".$file2."&n=0')
\"><img src=\"$url/picture/folder_big.gif\" border=0></a>";
 } else {
  // ディレクトリでないの場合
  $image2 = "<img
src=\"file://db1/okamoto_pub/kouji_shasin/$path_sjis/$file2\" width=\"384\"
height=\"288\">";
 }
} else {
 $file2  = "";
 $image2 = "";
}

if(isset($file_list[$n+2]))
{
 $file3  = mb_convert_encoding($file_list[$n+2], "SJIS-win", "auto");
 if(is_dir("/usr/local/public/kouji_shasin/$path/".$file_list[$n+2]))
 {
  // ディレクトリの場合
  $image3 = "<a
href=\"javascript:call('kouji_shasin.html&shasin_path=$path/".$file3."&n=0')
\"><img src=\"$url/picture/folder_big.gif\" border=0></a>";
 } else {
  // ディレクトリでないの場合
  $image3 = "<img
src=\"file://db1/okamoto_pub/kouji_shasin/$path_sjis/$file3\" width=\"384\"
height=\"288\">";
 }
} else {
 $file3  = "";
 $image3 = "";
}

// link 生成
$i=0;
$page=1;
$link="";
while (isset($file_list[$i]))
{
 if ($i != $n)
 {
  // 表示中以外のページ
  $link = "$link <a
href=\"javascript:call('kouji_shasin.html&shasin_path=$path&n=$i')\">$page</
a>";
 } else {
  // 表示中のページ
  $link = "$link $page";
 }
 $i = $i+3;
 $page++;
}

// data_put
$tmpl->assign("file1",  $file1);
$tmpl->assign("file2",  $file2);
$tmpl->assign("file3",  $file3);
$tmpl->assign("image1", $image1);
$tmpl->assign("image2", $image2);
$tmpl->assign("image3", $image3);
$tmpl->assign("link",   $link);
?>




PHP-users メーリングリストの案内