[PHP-users 16340]Re: [PHP-users16334]他のディレクトリの変更

misono @ o-misono.com misono @ o-misono.com
2003年 7月 2日 (水) 11:34:43 JST


ご返信を有り難う御座いました。(長文多謝)

下記の記述を見て頂けませんでしょうか?

前回苦労した SESSION の設定を利用して

データベースから情報の一覧を表示させ その番号を PatientNum という変数にして
$_POST されそれを $_SESSION["PatNum"] に代入します。そして その番号が持つデータ
が日付毎に存在しその一覧から選ばれた一つの日付を PatientDate という変数に
$_POST で $_SESSION["PatDate"] に代入しています。

日付の変数は 今日の日付であったとしたら 2003/200307/20030702/ というディレクトリ
に画像を格納しています。このディレクトリが 
c:\Program Files\Apache Group\Apache\htdocs\php\
下にあれば
2003/200307/20030702/
を chdir にしてディレクトリの中にある image ファイルをhtml に
<img src=変数> というような形でIEに表示させることはできると思うのですが、このデ
ィレクトリの中ではなく
c:\MyDocuments\2003\200307\20030702 というディレクトリに PatientNum と日付をくっ
つけたファイル名の画像を格納しているのです(現在の使用中のシステムの登録の仕方な
のでこれは変更できません)
PHP の記述で
c:\MyDocuments\2003\200307\20030702
の中にある c:\MyDocuments\2003\200307\20030702\000001_20030702.jpg
                        ↑↑_までが PatientNum
のような画像を表示させることは可能でしょうか?

$fileopen = file("c:\MyDocuments\2003\200307\20030702\000001_20030702.jpg")とや
っても表示させることは無理みたいだと思うのですが・・・。
(この方法もよくわからないのですが・・・一応マニュアルは読みました)

下記の記述は現在できあがったところまでの記述です。まだまだ間違いだらけですが一応
次の画像をクリックするとセッションが働いて順番に PatientNum と日付をくっつけたフ
ァイルの画像を表示させることには成功しております。つまり

注意!! 下記の記述では一応
c:\Program Files\Apache Group\Apache\htdocs\php\2003\200307\20030702\
というディレクトリとファイルをテストとして作ってありますので下記のコードで動作し
ているのですが・・・。
c:\MyDocuments\2003\200307\20030702
のディレクトリにアクセスするにはどのようにしたら宜しいのでしょうか?

という質問だったのです。ややこしくてホントに申し訳ありません。まだ初心者で右も左
もわからないので最善の方法もわからず手探り状態ですが少しずつマニュアル等を読むこ
とによって目的に近づいているようには思っております。


<?php
    session_name("filecount");//セッション
    session_start();
    
    if (!isset($_SESSION["count"])):
    $_SESSION["count"] = 0;
    $_SESSION["PatNum"] = $_POST["PatientNum"];
    $_SESSION["PatDate"] = $_POST["PatientDate"];
    $_SESSION["boolMax"] = 0;
    print "最初のセッションカウントです" . $_SESSION["count"] . "\n";
    print "PatientNum" . $_SESSION["PatNum"] . "\n";
    print "PatientDate" . $_SESSION["PatDate"] . "\n";
    //これらの print は試験的に表示させています。
        $icount = $_SESSION["count"];
            
        print "icount の値は" . $icount . "\n"; 
        
    else:
    $_SESSION["boolMax"] = 1;
        if ($_SESSION["count"] == $_SESSION["MaxCount"]):
        print "最後の画像です" . "\n";
        $icount = $_SESSION["count"];

        else:
        $_SESSION["count"]++;
        print "\$_SESSION" . $_SESSION["count"] . "\n";
            $icount = $_SESSION["count"];           
            print "icount の値は" . $icount . "\n";
        
        endif;
    endif;

//ここの記述で PatientNum と PatientDate をくっつけてディレクトリと PatientNum 
を持ったファイル名を配列に格納しそれを $_SESSION["count"] にして配列の key をフ
ァイルの数だけ表示させるファイル名にしています。

  $PatientNum = $_SESSION["PatNum"];
  $PatientDate = $_SESSION["PatDate"];
  settype($PatientNum,string);
  $date = $PatientDate;  //ここで $PatientDate を $date に代入しそれをそれぞれの
  //$year $month $day にわけてディレクトリを指定できるようにし、chdir で
list ($year,$month, $day ) = split ('[/.-]', $date);
$day = substr($day,0,2) . "\n";
  $year = (string) $year;
  $month = (string) $month;
  $day = (string) $day;
  $dirPath = $year . "/" . $year . $month ."/" . $year . $month .  $day;
  $dirPath = $dirPath;
  $backs = "/";
  $dirPath = trim($dirPath);
  $dirPath_chdir = "./" . $dirPath . "\n";
  $dirPath_chdir = trim($dirPath_chdir);
  $dirPath = $dirPath . $backs;
  $dirPath = (string) $dirPath;
 $booldir = chdir("$dirPath_chdir");
  $dh = opendir(".");
//この部分はディレクトリを確認する為に print するのに使っていただけです。
  while(($entry = readdir($dh)))
  {
    if(is_dir($entry))
    {
    }
  }
  rewinddir($dh);
//ここからがファイルを表示する部分です。  
  $i=0;
  $ii=0;
//$i と $ii がカウントになります。  
  settype($jpgFile[$i],string);
  while(($entry = readdir($dh)))
  {
    if(is_file($entry))
    {
      $jpgFile[$i]=$entry;
      $i++;
    }
  }
    $i=0;
    settype($jpgFile[$i],string);
    for ($i = 0; $i <= count($jpgFile) -1; $i++) {
        if(substr($jpgFile[$i],0,6) == "$PatientNum"):
            $jpgFileGazo[$ii] = $jpgFile[$i];
            $gazo_countLast = $ii;
            if ($_SESSION["boolMax"] == 0):
                $_SESSION["MaxCount"] = $gazo_countLast;
                print "MaxCount" . $_SESSION["MaxCount"] . "\n";
                print "gazo_countLast" . $gazo_countLast . "\n";
            endif;
            
            $ii++;
        else:
        endif;
    }
$strDirPath = $dirPath . $jpgFileGazo[$icount];
// ↑ここに $strDirPath が 
// ちょっと変数の使い方なんかも無駄があると思いますがそれは後回しにして動作の
//  確認をする為に思いつくままコードを書いていました。

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>ViewPicture</title>
</head>

<body bgcolor="#006633">
<?php
print "<img src=$strDirPath>";
?>
<br>
<br>
最初の画像</font> 前の画像 <a href="ViewPicture.php?<?=SID?>"><font color="#
FFFFFF">次の画像</font></a> 最後の画像</pre> 
</body>
</html>

本当は 前の画像とか 最初の画像 最後の画像 というのもここで書かなければならな
いと思いますがまずは次の画像のみということで書いてあります。

> あと、環境は、CGI か DSO かどうかも今回の質問の場合は、
> 結構影響すると思います。

これも最初からよくわからないのですが、PHP のインストールの仕方によって違いがある
んですよね・・・。Windows環境なのですが、どこを見ればわかるのでしょうか?

簡単なことにこんな長文を書く必要はないとは思いますが、なるべく具体的(的外れかも
しれませんが・・・)に今やっていることを書いてみました。的外れだったらお許し下さ
い。

それでは宜しくお願い致します。

こちらの環境は、 Windwows XP HomeEdition Version 2002 Service Pack 1
Pentium(R) 4 CPU 1.70GHz 512 MB RAM 

Apache/1.3.27 Server at localhost Port 80
PHP Version 4.3.2

中村
mail: misono @ o-misono.com
http://www.o-misono.com/


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