![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
perl プログラミング 2日目の初心者です。
以下のようなスクリプトを書いて test.cgi とかで
$del_count = unlink glob("msg-*.txt");
保存し、ブラウザーでアクセスすると、ちゃんと
ファイルが削除されるのですが、
シェル上で実行すると、以下のようなメッセージ
glob failed (child exited with status 1) at test.cgi line 5.
とか出て削除ができないのです。
パーミッションも 755 とかで試したのですが、
どうしてなのでしょうか・・・うんうん煮詰まって
います。
No.4ベストアンサー
- 回答日時:
おっしゃるように権限でしょうか...。
だとすると、シェルでWebサーバの実行ユーザ(多分wwwかnobody)を使って動かすとうまくいくのでしょうか?
※マシン管理者の協力がいりますが...。
------------------------
globe() と unlink() を分けるとどちらでエラーに
なるのでしょうか?
#!/usr/local/bin/perl
$a = glob("msg-*.txt");
$b = unlink("msg-1.txt");
------------------------
ほとんど可能性はないですが、リソース不足(メモリ、DISK)ということもあるかもしれません。
ちなみに私のPerlの環境は
This is perl, v5.6.1 built for sun4-solaris
です。
glob(),unlink()はきちんと動きます。
本件、無事解決しました。
親身になってご回答くださり、本当にありがとうござい
ました。
どうやってもラチあかないのでサーバーの管理者に
泣きをいれたところ、なにやら設定に問題があった
ようです。
ユーザーが同時にアクセスできるファイル数を2倍に
した、とかでちゃんと削除できることを確認しました。
・・・こんな些細なことにとにかく何日も時間を
費やしてしまいましたが、これも経験になりました。
気持ちのこもったアドバイスに、感謝いたします。
No.3
- 回答日時:
Perlのバージョンがperl4 ということはないでしょう
か?
glob()はPerl5から追加されたようですので。
調べましたところ、参考URL「Perl日本語マニュアル」
の下の方に表があり1番先頭のの「Perl5で追加された
新機能等」に書いてありました。
perlのバージョンは -v オプションでわかります。
例えば
/usr/local/bin/perl -v
です。
------------------------
なお、"msg-*.txt" のモードが何であれ、
エラーにはならないです。しかし、"msg-*.txt"
のパーミッションは666 が妥当です。
------------------------
参考ですが、<*>を使うと、glob()と同様のことを
行えます。
$del_count = unlink <msg-*.txt> ;
ただし、<*> を使えない関数があるかもしれません。
その場合、glob()を使わざるを得ないと思います。
できるだけglob()を使った方がプログラムの保守が
楽になるように思えます。
参考URL:http://www.harukaze.net/~mishima/perl/man/index. …
この回答への補足
URLまでご紹介いただいてありがとうございます。
教えていただいコマンドで調べてみたら、
This is perl, version 5.005_03 built for i386-freebsd
と出ましたので、バージョンはたぶん5 のようです。
それでも、IEでアクセスするときちんと削除できる
ので、やはりシェル上での実行権限にからんでくる
ような気がしてます。しかし原因がわからない。。。
こんなところで詰まって何日も先に進まないのが
悔やまれます。
No.2
- 回答日時:
自信はありませんが、
シェル上で動かないのは、シェルスクリプトとして
実行されてしまっているからかもしれません。
シェル上で明示的に /usr/local/bin/perl test.cgi
としても動きませんか?
(ただし環境によっては /usr/local/bin/perl では
なく、例えば/usr/bin/perl のようにしないといけ
ません。)
もし、これで動き、かつ、ファイルのモードがあって
いるのでしたら、test.cgi の1行目が間違っていると
思います。
UNIXのスクリプト(perl,sh,csh,awk,sedなど)では、
1行目にスクリプトを実行するコマンドのパスを記述
しますが、perl でしたら、次のようになっている必
要があります。
(記述例) #!/usr/local/bin/perl
-------------------------
ちなみに、ブラウザで動く理由は、Webサーバの設定で、
CGIは全てPerlで動かす、という設定がされている
ことになります。
-------------------------
この回答への補足
おっしゃるように、パスをしっかり書いて、かつ
実行ユーザーを確かめてやってみました。
やはり消えないようです。
Shell 上で、rm msg-*.txt とやるとちゃんと消える
ようです。
どうもありがとうございました。もうちょっと
がんばってみます。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67b6d)
No.1
- 回答日時:
scriptの実行ユーザが違うからではないですか?
cgi経由で実行する場合、scriptの実行者はhttpdの実行uidで実行されます(wwwとかnobodyとかdaemonとか・・・httpdの設定によります)。
それに対してshellから実行する場合、現在のuidで実行されるのですからパーミッションが755の場合、ファイルオーナーでないと削除できません。
shellから該当ファイルをls -alFとかして、ファイルオーナーを確認してみてはいかがでしょうか?
この回答への補足
おっしゃるように、実行ユーザーを確かめてみました。
ログインユーザーと間違いはありません。
ちなみに、Shell 上で、rm msg-*.txt とやると
きっちり消えるようです。
どうもありがとうございました。もうちょっと
がんばってみます。
本件、解決しました。
アドバイスくださり、本当にありがとうございました。
どうやってもラチあかないのでサーバーの管理者に
泣きをいれたところ、なにやら設定に問題があった
ようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
-T(汚染モード)でメールが送れ...
-
Perlの初歩の初歩の初歩(#!/us...
-
EXCELファイルに誰がアクセスし...
-
MT/カスタムフィールドでのPDF...
-
CGI実行環境下の.jsや.cssが動...
-
ApacheでのCGIについての質問
-
《エクセルVBA》「他の人が該当...
-
WebPatioの設置ができません。
-
htmlファイルにPHPとCGIを埋め込む
-
Perlプログラム上でアラートを表示
-
VBAでサーバーにアクセスするに...
-
ASP(IIS?)のエラーについて
-
ラジオボタンのグループ化
-
.htaccessを2つ以上設置した場合
-
safariでcgiが表示されず cgi...
-
VBScriptで、ファイルから任意...
-
perlからJavascriptを起動
-
Javaに対応しないレンタルサー...
-
JAVAで別サーバーのファイルの...
-
電子回路の教科書を教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プロバイダで定められたPerlへ...
-
mailformのCGI設置で「Internal...
-
古ーくからフリーのtree.cgi掲...
-
コアサーバー(coreserver)でのc...
-
CGIでリフレッシュメタタグの代...
-
Perlへのパス
-
Mac OS X 10.5 LeopardのApache...
-
ファイルの削除について ( unli...
-
イントラネットにカウンター設置
-
フォームの送信ボタンを押すと
-
急にCGIが動作しなくなった。
-
1日の売上表を作りたいのですけ...
-
Can't locate R.pm in @INC
-
掲示板CGIが設置できないです。
-
SSI(<!--#exec cmd="./XXXpl")...
-
Perlの初歩の初歩の初歩(#!/us...
-
文法チェックにひっかかりまし...
-
ニフティでメールフォームを使...
-
so-netのu-page+
-
CGIのパーミッションについて
おすすめ情報