• 締切済み

ファイルをopenできない時別のページを表示したい

ファイルをopenできない時、エラー表示しているのを  if (!open(IN,"$userfile")) { &error("投稿データファイルを開けません "); 別のページを(abc.cgi)表示したいのですがよろしくお願いします

  • Perl
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

open(IN,"$userfile") or die("Location : abc.cgi\n\n "); ではどうでしょう? 但し、これより前に、ヘッダ等を出力しているとダメです。

hana3090
質問者

補足

回答ありがとうございます エラーの出るとき実行してみます。

関連するQ&A

  • cgiでのファイルオープン

    cgiでファイルをオープンする時 open IN,"$file" でオープンしているのですが この時、$file に他のサーバー下のファイルを指定すると エラーになってしまうんですか? 管理しているサーバーが2つあり、他方のサーバーからファイルを 読み込んで処理をしたいのですが、どうしたらいいのでしょうか? 読み込むだけで、書き込むことはしません。 お知恵を貸してください。 よろしくお願いします。

    • 締切済み
    • CGI
  • 簡単なユーザーページ

    掲示板的なものを改造中です。 各ユーザーにパスワードを配布し、そのパスワードで入場すると、ユーザー名やアイコンがすでにセットされた状態で書き込みが出来るようにしたいと考えています。 そこで、簡単ですが、以下のようにやってみました。 sub admin { @new=(); open(FILE,"$userfile") || &error("Open Error : $userfileが開けません"); $top = <FILE>; while (<FILE>) { #while open ($userno,$cpwd,$cnam,$cico) = split(/<>/); if ($in{'pass'} eq $cpwd) { #if open &header; print <<"EOM"; <TABLE > <TBODY> <TR> <TD bgcolor="$obi_color" align="center"><font color="$tx"><B>新 規 記 事<B></font></TD> </TR> <TR> <TD><BR></TD> </TR> EOM # 投稿フォーム &form(); }else{ &error("パスワードがちゃいます"); } } #while close exit; --------------------------- datファイル 3<>0003<>イッシー<>is.jpg<> 2<>0002<>ますます<>ma.jpg<> 1<>0001<>うっちー<>un.jpg<> --------------------------- こうすると、パスワードが違いますと言われてしまいます。 しかも、パスワードを「0002」にすると、入場は出来るのですが、下に「パスワードがちゃいます」のエラーが表示されてしまいます。 どこが間違ってますか? また、必要な情報が足りていない場合は指摘してください。すぐに掲載します。

    • ベストアンサー
    • Perl
  • ファイルopenについて

    1----------------------------------- open(IN,">$past_file")|| &error; @lines2=<IN>; close(IN); >は書き込みopenということですが、この使い方で一応読み込みはできます。しかしやはり使い方としては間違っているのでしょうか?OSによってはできないとか・・ というのも、ないファイルをOPENするとき、読み込みではファイルはopenできませんよね。書き込みでopenすれば、ないファイルを自動で作成してくれます。今作っている掲示板だとこれは都合がいいので、こういう風に記述したいのですがだめでしょうか。

    • ベストアンサー
    • Perl
  • (Perl)UTF-8で別ファイルに書き出したい

    現在、jcode.plを使用したShift JISで構成されていた Perlのcgi を UTF-8 に改造しています。 冒頭で use utf8; を宣言した後、jcode関連の文は、全てコメントアウトしてきました。 複数ある別ファイルからデータ読み込む場合も、 open(IN,"<:utf8","$別ファイル"); という形で、"<:utf8"を挿入して、うまく読みこめています。 ただ、読み込んだ後、別ファイルへUTF-8で書きこむのが、どうしてもうまくいきません。 書きこんだ後、文字化けしてしまいます。 書きこんだファイルを開けてみると、日本語が文字化けしています(アルファベットは大丈夫) 以下のPerlをどのように改造すれば、文字コードをUTF-8で書き込みすることができるのでしょうか? どうかご教授、よろしくお願い致します。 m(_ _)m --------------------------------- #------------------------------------------------- # 編集内容登録処理 #------------------------------------------------- sub EDITREGIST { #全角英数字を半角に変換 $zenkaku = '0123456789'; $hankaku = '0123456789'; # Jcode::tr(\$in{'CLICK'}, $zenkaku , $hankaku ); $in{'attach_file'} = &AttachCheck($attach,$attach_name); #ファイルロック開始 if( $lockkey ne "0" ){ &LOCK; } if (!open(IN,"<:utf8","$linkdata_file")) { &ERROR( read_linkdata ); } @BASE = <IN>; close(IN); foreach $data (@BASE) { &LINKDATALIST; if( $in{'editnum'} eq $CNTNUM ){ if( $in{'attach_file'} eq '' ){ if( $in{'CHDEL'} eq '1' ){ $in{'attach_file'} = ''; unlink("$updir/$IMAGE"); }else{ $in{'attach_file'} = $IMAGE; } }else{ unlink("$updir/$IMAGE"); $in{'attach_file'} =~ s/$updir\///g; } $in{'LINKNAME'} =~ s/\,/&%/g; $in{'LINKURL'} =~ s/\,/&%/g; $in{'LINKURL'} =~ s/&amp;/\&/g; $in{'COMMENT'} =~ s/\,/&%/g; $in{'COMMENT'} =~ s/\<br \/\>/!%/g; if( $in{'CLICK'} eq "" ){ $in{'CLICK'} = 0; } $new_data = "$CNTNUM,$datenow,$DATE_LMT,$DATE_ESY,$in{'OPN'},$in{'NEWMARK'},$in{'CATEGORY'},$in{'LINKNAME'},$in{'HONORIFIC'},$in{'LINKURL'},$in{'COMMENT'},$in{'CLICK'},$in{'attach_file'},\n"; }else{ $new_data = "$CNTNUM,$DATE_LINKDATA,$DATE_LMT,$DATE_ESY,$OPN,$NEWMARK,$CATEGORY,$LINKNAME,$HONORIFIC,$LINKURL,$COMMENT,$CLICK,$IMAGE,\n"; } push( @TOTAL,$new_data ); } #実際にファイルに書き込む if( !open(OUT,">$linkdata_file") ){ &ERROR( read_linkdata ); } print OUT @TOTAL; close (OUT); #ファイルロック解除 if( $lockkey ne "0" ){ &UNLOCK; } &SendFinish2; }

    • ベストアンサー
    • Perl
  • ファイルのコピー

    ファイルのアップロードプログラムを作成しています。 HTML側で<input type="file" name="UserFile"> とし、アップロードボタンを押すとphp側で値を受け取るようなプログラムにしています。 値はうまく渡っているのですが、コピーができません。 コピーするPHPは以下のようなプログラムです。 $file = tempnam("/tmp","upload_"); if (copy($all_data['UserFile'],$file)) { print "ファイルコピー成功。 $all_data['UserFile'] -> $file<BR>\n"; } else { print "ファイルコピー失敗。 $all_data['UserFile'] -> $file<BR>\n"; } エラー内容は Warning: Unable to open 'percent.txt' for reading: No such file or directory となってます。 $all_data['UserFile']にはpercent.txtです。 どなたか、お分かりになる方がいましたら、 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 同名ID、同名画像ファイル名があったらエラー表示

    CGI勉強中です。既に同名の商品id_num及び画像ファイル名gazouが存在する場合、エラー表示する場合、コードの書き方がわかりません。 教えて下さい。 --------------------------------------------------------------- # 商品登録処理 sub goods_regist { if ( $in{'id'} eq '' ) { &error ('エラー','IDが未選択です'); } if ( $in{'id_num'} eq '' ) { &error ('エラー','商品個別番号が未入力です'); } if ( $in{'goods'} eq '' ) { &error ('エラー','商品名が未入力です'); } if ( $in{'tanka'} eq '' ) { &error ('エラー','商品単価が未入力です'); } if ( $in{'id_num'} eq '' ) { &error ('エラー','商品個別番号が未入力です'); } if ( $in{'ad_amount'} eq 'text' && $in{'ad_amount2'} eq '' ) { &error ('エラー','個数設定が不正です'); } if ( $in{'ad_amount'} eq 'list' && $in{'ad_amount3'} eq '' ) { &error ('エラー','個数設定が不正です'); } $goods_data = "$goods_dir/$in{'id'}.cgi"; open (DATA,"$goods_data") || &error('オープンエラー','商品データファイルが開けません。'); @LINES = <DATA>; close (DATA); $count = @LINES; if ( $count == 0 ) { $num = 1; } else { @lists = $LINES[-1]; $num = $lists[0]; $num = $num + 1; } &lock2; open (OUT,">>$goods_data") || &error('オープンエラー','メール設定ファイルが開けません。'); print OUT "$num\t$date_now\t$in{'id'}\t$in{'id_num'}\t$in{'goods'}\t$in{'tanka'}\t"; print OUT "$in{'ad_amount'}\t$in{'ad_amount2'}\t$in{'ad_amount3'}\t$in{'rem'}\t\n"; close (OUT); # 画像アップロード処理 ################ $filename = $in{'gazou'}; $gif = 1; $jpeg = 1; $macbin=0; foreach (@in) { if ($_ =~ /(.*)Content-type:(.*)\/(.*)/i) { $tail=$3; } if ($_ =~ /(.*)gazou=(.*)/i) { $fname=$2; } if ($_ =~ /application\/x-macbinary/i) { $macbin=1; } } $tail =~ s/\r//g; $tail =~ s/\n//g; $filename =~ s/\"//g; $flag=0; if ($image_up eq '0') { $flag=1; } if ($tail =~ /gif/i && $gif) { $tail=".gif"; $flag=1; } if ($tail =~ /jpeg/i && $jpeg) { $tail=".jpg"; $flag=1; } if (!$flag) { if ($fname =~ /.gif/i && $gif) { $tail=".gif"; $flag=1; } if (($fname =~ /.jpg/i && $jpeg) || ($fname =~ /.jpeg/i && $jpeg)) { $tail=".jpg"; $flag=1; } } if (!$flag) { &error("アップロードできないファイル形式です","lock"); } $upfile = $in{'gazou'};

  • PHPのファイルの読み方のコード

    下記はpearlのファイルの読み込みです #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; require './jcode.pl'; if (!open(IN,"$userfile")) { &error("投稿データファイルを開けません"); } @DATA = <IN>; @DATA = reverse(@DATA); close(IN); foreach $line (@DATA){ ($f1,$f2,$f3) = split(/,/, $line); &jcode'convert(*line,'sjis'); push(@CS,$line); } foreach (1.. 100) { ($f1,$f2,$f3) = split(/,/, $CS[$_]); print "$f1\n"; } exit; ############################################## foreach (1.. 100) { ($f1,$f2,$f3) = split(/,/, $CS[$_]); print "$f1\n"; } この部分のPHPのコ-ド書き方をお願いします

    • ベストアンサー
    • PHP
  • 画像とtxtファイルの表示

    現在CGIでtxtファイルが表示されるように print "Content-type: text/html; charset=euc-jp\n\n"; $count = 0; $viewline = 1; open(IN, "A.txt"); while(<IN>){ if($count == ( $viewline - 1)){ $line = $_; last; } $count++; } close(IN); print "$line\n"; としています。 ここでさらに画像も一緒にCGIで表示させたいのですが、そうゆうことはできるのでしょうか? できるのであれば教えて頂きたいです。調べてみたのですがなかなか見つからなくて・・・。 よろしくお願いします。

    • 締切済み
    • CGI
  • 別のページを開く方法

    以下のようなプログラムにおいて、 1)最初にフォームが表示 2)submitボタンを押すと、sub addUserによって、ユーザーファイルに書き込み 3)その後に、自動的に別のページ(cgi)が開く方法が分かりません。sub addUserでclose(FILE); の後に何かプログラムが必要と思うのですが分かりません。 教えてください。 #! c:/perl/bin/perl #============================ ユーザー設定 ==== $CHARSET = 'Shift_JIS'; # 文字コード $USERFILE = './users.dat'; # ユーザーファイル #======================== メインプログラム ==== loadFormdata(); loadUserfile(); if($FORM{"mode"} eq "adduser") { addUser(); } printAdminPage(); exit; #============================ ユーザー追加 ==== sub addUser { my ($name, $pass) = ($FORM{'user'}, $FORM{'pass'}); my ($salt, $saltset, $n1, $n2); if($USERS{$name} eq $pass) { printErrorPage("そのユーザー名はすでに存在しています。"); } $USERS{$name} = $pass; # ユーザーファイル書き込み open(FILE, ">>$USERFILE") or printErrorPage("ユーザーファイルが開けません。"); print FILE "$name:$pass\n"; close(FILE); } #================ ユーザーファイル読み込み ==== sub loadUserfile { 中略 $USERS{$name} = $pass; } close(FILE); } #================== ユーザー管理ページ出力 ==== sub printAdminPage { my $name; print <<END; Content-type: text/html; charset=$CHARSET <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>ゆーざーかんり</title></head> <body> <h1>ユーザー管理</h1> <h2>新規ユーザー登録</h2> <form action="$ENV{'SCRIPT_NAME'}" method="POST"> ユーザー名:<input type="text" name="user"><br> パスワード:<input type="password" name="pass"><br> <input type="hidden" name="mode" value="adduser"> <input type="submit" value="登録する"> </form> </body> <html> END } #======================== エラーページ出力 ==== sub printErrorPage { 中略 } #================== フォームデータ取り込み ==== sub loadFormdata 中略

    • ベストアンサー
    • CGI
  • UNIX上でのファイルopenについて

    C言語で同一ディレクトリから複数のファイルを順番に読み込んでいきたいのですが、うまくいきません。 シェルで、ファイル名の取得を行っていっています。 shell ---- ls /home/data > /home/src/infile.txt ---- C ----------------------------- FILE *fp; char y[30]="/home/data/"; // ↓aには上記シェルにて取得した1件目のファイル名が入っています。 strcat(y,a); // ↓ここでは絶対パスが正しく表示されます printf("ddd:%s\n",y); // ddd:/home/data/11.txt // ↓ここでfile open errorで一件目で終了してしまいます。 if ((fp = fopen(y,"r")) == NULL){ printf("file open error!!\n"); exit(1); } ----------------------------- このようなファイルの読込みのやり方ができるのか教えてください。 もしできるのであるのなら、そのやり方も教えてください。 わかりにくい文章ですが、お願いします。