perlの勉強をしていて困っています。
perlをHTML表示で実行した時にファイルが書き込みモードで開けません。コマンドラインで実行すると開いて書き込まれます。よってファイルの書き込み禁止などでは無いようです。以下がソースです。
#!/Perl/bin/perl
$|=1;
print "content-type: text/html; charset=Shift_JIS\n\n";
open(OUT, ">other.html") or die "not open";
print OUT "test";
close(OUT);
読み込みモードでは成功します。フリーのCGIなども見ましたが通常は出来るはずだと思うのですが・・・。
ちなみにperlはApache2.0で動作させています。こちらの設定の問題でしょうか?
No.3ベストアンサー
- 回答日時:
そのソースのままで(perlのパスだけうちのに書き換えて)
WinXP+Apache2.0.55 でちゃんと書き込めてますよ
デフォルト状態のwindowsのフォルダなら書き込み可なので
仮にパスが違っていても、新たにfileが生成されますし、、、
一応判りやすくするために
#!/usr/local/bin/perl
$|=1;
print "content-type: text/html; charset=Shift_JIS\n\n";
open(STDERR, ">&STDOUT");#エラーを画面に表示
open(OUT, ">>other.html") or die "not open";
print OUT "test<BR>\n";
close(OUT);
__END__
と変えて ブラウザで http://***/****/a.cgi にアクセスすると何も表示されませんがエキスプローラで確認するとother.htmlが生成されています。
http://***/****/a.cgi をリロードしてから
ブラウザの別タブで file:///C:/home/hoge/public_html/other.html とfileとして開いて CGIの方をリロードするたびに fileの方もリロードすると ちゃんと2行、3行と増えていきます
エキスプローラでother.htmlを右クリックしてプロパティ
>読み取り専用にチェックを入れ(unixで言うパーミッション -wxですな)
再度CGIにアクセスすると
not open at C:/home/hoge/public_html/a.cgi line 5.
とエラーメッセージが、、、
答えになっていませんが、参考になりませんか?
詳しいご説明ありがとうございます。
上記を試してみましたが、やはりダメです。
とりあえずperlのプログラムに問題がある訳ではないみたいですので、他のPCで試してみる事や、apacheの再インストール、あるいはapache以外のwebサーバーで試してみます。
No.6
- 回答日時:
OSがWindowsということなので、アクセス権限ではないと思いますが、
「書き込みができない」という確認はどのようにされましたか?
それぞれ対処法は違いますので、以下の点でどの状態になっているのか、教えていただけますか?
(解決されているのであればいいのですが)
1) ファイルをオープンできない("not open"が表示される)のか、
2) ファイルがない状態でCGIを動かすと、ファイルが作成されるが、ファイルの内容は何も書かれていないのか、
3) あらかじめ何かを書いて保存しておき、そのCGIを動かすとファイルの内容が消されるのかどうか
たぶん関係ないと思いますが、
$|=1;
をコメントアウトして、出力バッファを使うようにしてみるとどうなりますか?
また、正常に保存できたとして、HTMLは出力されていますでしょうか?
(HTMLを出力しなくても保存はできますが、ブラウザにはInternal serever errorが表示されますので、誤解されてるだけのこともありますので、一応確認を、、、)
返答ありがとうございます。Apacheを入れなおしたら解決しました。初めて質問したので問題解決の手続きをしていませんでした。お手間をとらせて申し訳ありませんでした。
とりあえず質問にお答えします。
1)not openと表示されます。
2)ファイルも作成されませんでした。
3)消されません。
$|=1;をコメントアウトしますと、エラーは出ませんがopenコマンドは実行されませんでした。コマンドラインで正常に動作した場合はHTMLで出力されます。以上です。
No.5
- 回答日時:
Windows XP + Perl + Apache という事で…
当方も同じ環境があるので試してみました。
test.cgi として other.html は置かずに試してみると…
test.cgi と同ディレクトリに other.html が作成されて
ちゃんと書き込みも出来ました。
一度 other.html を削除して試してみては…
また Apache の error.log には何かエラーを吐いてないでしょうか?
返答ありがとうございます。Apacheを入れなおしたら解決しました。初めて質問したので問題解決の手続きをしていませんでした。お手間をとらせて申し訳ありませんでした。
No.4
- 回答日時:
これはOSによって違うことですが、たとえば UNIX 系 OS の場合、ウェブサーバのプロセスの uid とディレクトリのオーナーが違っていて、尚且つパーミッションが 770 などの、他の人が書き込めない状態になっているとファイルは作れません。
また、Linux で SELinux の機能により読めないとか書けないとかCGIが実行できないとかの症状が出ることがあります。
ただこのような原因だった場合、 OS や環境固有の問題であり Perl の問題ではありません。OS やそのバージョン (またはディストリビューションとそのバージョン) やファイルシステム、使用しているウェブブラウザとそのバージョンなどを明らかにして他のカテゴリで聞いた方がいいかも知れません。
No.2
- 回答日時:
コマンドラインではどのように確認を?
> perl ファイル名.cgi
↑こんな感じでしょうか?
とすると…perl のパスが間違っているとか・・・
あるいは unix 系 OS 上での事でしたら
ファイルのパーミッションに問題ありとか・・・
サーバエラーとは表示されませんか?
単純に書き込み出来ないだけでしょうか?
この回答への補足
確認はren10さんの通りです。
書き込みだけで、ほかのプログラムは動きますのでパスではないと思います。コマンドラインでは書き込めるのでパーミッションではないと思います。OSはWindowsXPでpwel5を使用しています。
単純に書き込みだけが出来ないんです。訳がわからないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI -T(汚染モード)でメールが送れません 1 2022/06/12 14:11
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザー登録型のサイトを作成...
-
Perlで特定文字列から特定文字...
-
ファイルから読込んだ文字列か...
-
python renameについて
-
FindFirstFileとFindNextFileで...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
Perlでのファイル出力における...
-
ListBoxのデータを高速でファイ...
-
fgets で値が取得できない
-
sprintfについて
-
Pythonでegrep機能をつかいたい
-
csvファイルの横方向への改行に...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
htaccessで特定のディレクトリ...
-
perlをwindows環境でshift-jis...
-
バッチファイルの作り方(CSV→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで特定文字列から特定文字...
-
requireで同じライブラリを複数...
-
RSS自動生成で文字化け
-
HTML表示での実行でファイルが...
-
ユーザー登録型のサイトを作成...
-
perlのエディタでおすすめを教...
-
ファイルロックの仕方
-
ファイルアップロード時の経過表示
-
ファイルから読込んだ文字列か...
-
VBAでCSVファイルを途中行まで...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
バッチファイルの作り方(CSV→...
-
openした後、closeしないでプロ...
-
ExcelをCSV書き出す場合のシー...
-
batファイルでrenameができませ...
-
エクセルVBA コードが同じでも...
-
window.open でのファイル指定方法
-
VBAで巨大なファイルの途中から...
-
DOSコマンドで、標準出力を出力...
おすすめ情報