CGI-BBS > ウィンドウズ > CGI/SSI > windows 上でのファイルコントロール


カレッヂ
カレッヂ


質問者 みこし  投稿日 2/20(火) 19:11:49
たびたびすいません。
UNIXで実行確認済みのperlスクリプトで
ファイルデータの更新をしようとしたのですが
うまく更新されていません。

ファイルコントロールで違う記述が必要なのでしょうか
例えばopenで

!open(TXT, "+>FH")
でやってもだめなのでしょうか
回答者 羊相談員  [削除]  投稿日 2/21(水) 09:29:15
>!open(TXT, "+>FH")

両方ともファイルハンドルになってるような気がします。
質問者 みこし  [削除]  投稿日 2/21(水) 11:57:31
>>!open(TXT, "+>FH")
>
>両方ともファイルハンドルになってるような気がします。

失礼しました。うっかりミスですね。
FHではなく実際のファイル名ですね。
転記ミスしてしまいました。
>>!open(TXT, "+>$filename.txt")
で設定してあります。
回答者 まさ  [削除]  投稿日 2/21(水) 15:31:07
httpdとperlが何なのかわからないのであまりはっきりしたことが言えませんが、
基本的にopenに関してはUNIXとDOSに違いはないと思います。

UNIXのものをDOSに移植するときには注意しないといけない点もありますが、openはそのまま
で使えるはずですよ。

openの前にflockとかしていないですよね。
単純にflockを書けばDOSではエラーが出て動きませんが、エラー処理で何かしていて、open
を通っていないと言う事は無いですか?

それにしても
!open(TXT, "+>$filename.txt")
この記述は奇妙ですね。本当にスクリプトに中にこのように記述しているのですか?
普通は
if (!open(TXT, "+>$filename.txt")) { エラー処理 }
と言う風に使いますけど。

この$filenameには何が入っていますか?
本当にそのファイルがありますか?

質問者 みこし  [削除]  投稿日 2/21(水) 16:44:17
こういう場合の質問の仕方になれてないのでどうも手間ばかりかかってしまいます。
(ご迷惑をかけてすいません)

状況を申し上げますとスクリプト自身はUNIXで実際に動いているものです。
flockはopenの後にかけています。

> それにしても
> !open(TXT, "+>$filename.txt")
> この記述は奇妙ですね。本当にスクリプトに中にこのように記述しているのですか?
> 普通は
> if (!open(TXT, "+>$filename.txt")) { エラー処理 }
> と言う風に使いますけど。
そうですね。実際そうしています。でファイルを試しに削除してみると
そのエラー処理がありますのでロジックとしては経過kしていることが
確認できます。

問題はファイル更新がされてないということ。
実績のあるスクリプトですから何処に問題があるのか
私も困ってしまったのです。

windowsサーバーの環境設定に問題があるとか
あるのでしょうか。
回答者 まさ  [削除]  投稿日 2/21(水) 17:08:16
UNIXで動いているからといってDOSでも動くとは限りません。
特にUNIX専用に書かれているものは何の修正もしなければDOSでは動きません。
これはわたしの経験ですけど。

相変わらず環境がわかりませんので憶測ですが、IISで動いているものとします。
ちなみにWin95+Apache1.3.12ではそのような現象は見られません。

IISではanonymousとかIUSR_xxxxがデフォルトのインターネットゲストアカウントです。
一般的には、スクリプトを置くディレクトリはセキュリティの為、システム管理者のみ
全権限を持っており、一般ユーザに対しては書き込みは禁止にし、実行/読み取りのみ
可能にされています。

このディレクトリにファイルを新規作成しようとしても書込権限がないので ファイル
オープンは失敗します。
したがって、ファイルを作成するディレクトリを別に用意し、 そのディレクトリ
とスクリプトの権限を上記のユーザアカウントに対して許可すれば動くはずです。

回答者 まさ  [削除]  投稿日 2/21(水) 17:31:34
もうひとつ考えられますね。

>でファイルを試しに削除してみると
>そのエラー処理がありますのでロジックとしては経過していることが
>確認できます。

これはファイルを削除すれば、そのファイルがないのでopenに失敗しエラー処理をする。
しかし実際にファイルが存在している時にはエラー処理には行かず、ファイルの更新も行わ
れずに処理が終わる。

と言うことですね。

これってそのファイルに書き込むものが何もないって言うことはないですよね。
そもそもファイルの更新が無いと言うのをどのように確認していますか?
タイムスタンプだけは正常に変わっているということはないですか?

これはopenだけの問題ではなく、一連の処理がわからなければ、わからないかもしれませんね。
質問者 みこし  [削除]  投稿日 2/21(水) 17:46:19
重ねてありがとうございます。

ちなみに書き込みファイルは別にしてあります。
権限を許可するというのはパーミッションのことでしょうか。
それは許可されているようです。

それからデータが存在するかと言うことですが、
試験的に直前に更新データを画面上にも打ち出してみました。
存在しています。

あとでもっと単純なファイル更新スクリプトを作って
テストしてみたいと思ってますが、
回答者 まさ  [削除]  投稿日 2/21(水) 17:53:07
>あとでもっと単純なファイル更新スクリプトを作って
>テストしてみたいと思ってますが、

そうですね。そうしてみるのがいいと思います。
それが一番近道でしょう。
質問者 みこし  [削除]  投稿日 2/22(木) 11:36:31
なんとなく分かってきたような気がしますが、
ここで質問します。

open字にファイルを指定するときに相対パスまで
指定していたのですが、そこで認識されるパスが
現在スクリプトの置かれているパスから見た
相対パスであり、windowsでテストして確認された
結果は、ルートパスからの相対パスとなっていたことです。

これは指定の仕方に問題があったからなのでしょうか
それともwindowsの機能上の特性なのでしょうか、
あるいはサーバーの環境設定に起因するのでしょうか
回答者 羊相談員  [削除]  投稿日 2/22(木) 15:09:39
>これは指定の仕方に問題があったからなのでしょうか
>それともwindowsの機能上の特性なのでしょうか、
>あるいはサーバーの環境設定に起因するのでしょうか

使用しているサーバソフトなどによって違ってくると思います。
回答者 まさ  [削除]  投稿日 2/22(木) 15:34:28

>なんとなく分かってきたような気がしますが、
>ここで質問します。

何度も聞きますけど、IISですよね?
IISとApacheでは全然違ってきますので。
文面から判断するとIISと思いますが。

>open字にファイルを指定するときに相対パスまで
>指定していたのですが、そこで認識されるパスが
>現在スクリプトの置かれているパスから見た
>相対パスであり、windowsでテストして確認された
>結果は、ルートパスからの相対パスとなっていたことです。
>これは指定の仕方に問題があったからなのでしょうか
>それともwindowsの機能上の特性なのでしょうか、
>あるいはサーバーの環境設定に起因するのでしょうか。

確かにおっしゃる通りIISではディレクトリーの指定の仕方が違います。
Windowsの特性ではありません。
それはIISの特性です。
ちなみにApacheではそのようなことは起こりません。

これは実はわたしも疑問に思っていますが、IISではCGIを動かすディレクトリーを相対パス
の位置に指定することはできないのですかね。まあわたしもIISはそんなに詳しくないので、
指定はできると思うのですが、よくわかりません。

そういう場合、わたしは全て絶対パスで書いています。
このopenも絶対パスで指定したら動きましたか?
もし動いたのならいいですが、何故相対パスが使えないのかの疑問が残ります。

IISは5.0ですか?
5.0ならWindows2000のメーリングリストに投稿すると恐らく回答が得られるでしょう。
そんなの邪魔くさいとおっしゃるなら、Apacheの導入をお勧めします。
質問者 みこし  [削除]  投稿日 2/22(木) 15:45:39
>何度も聞きますけど、IISですよね?
>IISとApacheでは全然違ってきますので。
>文面から判断するとIISと思いますが。
使用しているのはプロバイダーサーバなので
確認しないとなりません。

>IISは5.0ですか?
>5.0ならWindows2000のメーリングリストに投稿すると恐らく回答が得られるでしょう。
>そんなの邪魔くさいとおっしゃるなら、Apacheの導入をお勧めします。
ですから一存で導入は難しいでしょう。
もちろん提案は可能ですが。

>そういう場合、わたしは全て絶対パスで書いています。
>このopenも絶対パスで指定したら動きましたか?
おかげさまで動作確認いたしました。

ご協力ありがとうございます。
回答者 まさ  [削除]  投稿日 2/22(木) 15:55:21
失礼、プロバイダーのサーバーですか、わたしは自分のパソコンかと思っていました。
プロバイダーのサーバーならApacheの導入は難しいですね。

返信(回答)する


Web裏技