[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 メーリングリストの案内