• 締切済み

ファイルを読み込み、URL転送をしたい

URL転送するプログラムを作成してます。 以下のURLでアクセスします。 http://hoge.com/index.cgi?mou=1 以下のデータ構成となってます。 dat.cgiのデータ 1<>http://google.co.jp/ 2<>http://yahoo.co.jp/ 3<>http://goo.ne.jp/ 4<>http://msn.co.jp/ この場合1レコード目のURLを転送しgoogleのサイトを表示させたいのですが、初歩的なミスでサーバーエラー 500を表示しています。 index.cgi (ここから) #!/usr/bin/perl # 文字コード取得 require './jcode.pl'; $datfile = "./dat.cgi"; open(DB,"$datfile") || &error("Open Error : $datfile"); @lines = <DB>; close(DB); @new=(); foreach $line (@lines) { $flag=0; ($num,$mourl) = split("<>", $line); foreach $mou (@DEL) { if ($mou eq "$num") { print "Location: $mourl"; } } } (ここまで) 同じホルダーに jcode.pl dat.cgi は入っています。 申し訳ありません。よろしくご指導をお願いいたします。

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

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

これだけではわかりませんが、 サーバーのエラーログはどうなってますか? ローカルでテストした結果は? $ perl index.cgi ローカルサーバーでの結果は?  http://local.host/index.cgi?mou=1

hihin2003
質問者

補足

回答ありがとうございます。 >サーバーのエラーログはどうなってますか? 確認しているのですが、よくわかりません。 >ローカルサーバーでの結果は? 500のエラーとなっています。 >これだけではわかりませんが、 やっぱりわからないでしょうか? ファイルを読むために何が必要で、あるのかも良く分かってません。 なんとなくですが、データを読み込むために必要な情報がこのプログラムだけでは足らないような感じがしています。 ありがとうございます。 もう少しがんばってみます。

関連するQ&A

  • データ件数が多くなってもエラーにならない方法

    perlで、URLからサイトが表示されるかを確認するプログラムを作成しました。 ただ現在の方法だと、チェックするデータ件数が多くなるとエラーとなってしまいます。 現在のソース (ここから) open(DB,"$memfile") || &error("Open Error : $memfile"); flock DB, 2; @lines = <DB>; close(DB); @new=(); foreach $line (@lines) { $flag=0; ($num,$url,$title) = split("<>", $line); &url_ckeck("$url"); $data = "$num<>$url<>$title\n"; $data =~ s/\n<>/<>/g; $data =~ s/\r\n<>/<>/g; $data =~ s/\r<>/<>/g; push(@new,$data); } open OUT, "> $memfile"; print OUT @new; close OUT; (ここまで) この方法だと300件を超えると「ページが表示出来ない」エラーがでてしまうので、 チェックの方法を小分けしてエラー回避できないかを考えているのですが、とのようにすれば良いのかがわからず先に進められなくなってしまいました。 プログラムも見よう見真似で作成しているのでおかしな箇所が多々あるかと思いますが、助けていただけないかと思い書き込みました。 「$line (@lines)」を「$start .. $end」として件数を小分けにしてボタンを表示させてクリックして進められるようにしてみたらとも思いましたが データがうまく更新出来ずにいます。 不明点はご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ファイルアップローダーの設置ができません。どこがおかしいのでしょうか?

    OSはVistaで、FlashMXを使ってIswebベーシック上で、HP作成中の超初心者です。 http://flashrave.org/index.html ここのファイルアップローダーの設置をしたいのですが、どうしてもできません。 cgi-binにフォルダfuploadeを作成し、以下のようにUPしました。 +-- fuploader [755]       ├ file.dat [666]       ├ index.html [644]       ├ index.swf [644]       ├ jcode.pl [644]       └ login.cgi [755] この状態で  http://***.web.infoseek.co.jp/fuploader/index.html にアクセスし  ログインすると アップロード後、「(転送しました。」の画面が表示されました。 (実際に転送されたかは、不明です。)  ファイルダウンロードができません。 Iswebベーシックでは Cgi-bin にすべてを入れること禁止しています。 そこで、次の構成でUPしました。 +-- cgi-bin        fuploader       ├ file.dat [666]       ├ jcode.pl [644]       └ login.cgi[755] public_html (ue.html sita.htmlの上下のフレームページ)   |   +-- fuploader              ├ index.html       └ index.swf        この状態で  http://***.web.infoseek.co.jp/fuploader/index.html にアクセスすると ログインページがでますが、ログインできません。 CGIが動作する場所とアップロード先のフォルダを分けたいので (58行目) $datadir = ""; の""の間にディレクトパスを (60行目) $url = ""; の""の間に設置したURLを設定してください。 の指示どおり login.cgiを次のように変更してUPしましたが、できません。 $datadir = './cgi-bin/fuploader'; $url = 'http://***.web.infoseek.co.jp/fuploader'; 作成者にメールしましたが回答いただけません。どうか助けてください。

    • ベストアンサー
    • Flash
  • mkdirでのファイルロック

    私はCGIの経験がほとんどなく超初心者です。下記のようなファイルを作りましたがファイルのロックをしなければデータが書き込まれないようなので困ってしまっています。flockはつかえないようなのでmkdirでロックをかけたいのです。 #! /usr/local/bin/perl $| = 1; require './jcode.pl'; require './mimew.pl'; require './cgi-lib.pl'; &ReadParse(*FORM); $thisfile = 'mother'; $countfile = './mother.txt'; $predatadir ='./mom'; $fromname = "sabra net"; $fromemail = '***@****.co.jp'; $act = $FORM{'act'}; #### main始動 #### if($act eq "indata"){   &getnumber;   &datamod;   &inputDB;   &mailsend;   &view; } else{   &datamod;   &kakunin; } #### main終了 #### #### メッセージ番号設定 #### sub getnumber {   open(COUNTER,"$countfile") || &error('countfileが開けない');     $this_num = <COUNTER>;   close(COUNTER);     $this_num++;   open(COUNTER,">$countfile") || &error('countfileに書きこめない');     print COUNTER "$this_num";   close(COUNTER);   if( length($this_num) == 1 ){     $this_num ="000000" . $this_num;   }   elsif( length($this_num) == 2 ){     $this_num ="00000" . $this_num;   } } #### datafileへ入力 #### sub inputDB {   $datafile = "$predatadir/userdata01.csv";    open(DB,">>$datafile") || &error('datafileに書きこめない');      print DB "$yourname,$email\n";    close(DB); }

    • 締切済み
    • CGI
  • 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
  • perlでファイルのデータの一部を削除したい

    久しぶりにPerlを操作してファイルのデータの一部を削除したいのですが、削除出来ずに困っております。 3年以上触っていないため、過去のファイル等々を見ながらやってましたが、結果は出来ずじまいで停滞して困っております。 ご指導いただけないかと思い、書き込みしました。 ファイル名 $tmpfile データ構成  no,名称 1<>フレーム 2<>レンズ 3<>カメラ 4<>ファインダー 5<>めがね 6<>ズーム これで「めがね」を削除したいのです。 データnoで削除したいと思っておりますが、うまく動作しません。 以下ソース open(DB,"$tmpfile") || &error("Open Error : $tmpfile"); flock(DB, 1); @lines = <DB>; @new=(); foreach $line (@lines) { $flag=0; ($no,$meisyo) = split("<>", $line); foreach $x (@DEL) { if ("$x" eq $tmpnum) { $flag=1; last; } } if ($flag == 0) { push(@new,$line); } } open(OUT,">$tmpfile") || &error("Write Error : $tmpfile"); print OUT @new; close(OUT); ここまで 上のソースですと、エラーこそならずに(そうみえているだけかもしれません)終わりますが、データ削除が正しく出来ませんでした。 説明不足があるかもしれませんので、指摘いただけますと幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • jcode.plファイルが閲覧できるのですが

    http://△☆.sakura.ne.jp/cgi/jcode.pl 上記のURLでアクセスすると、jcode.plファイルが表示されます。 http://△☆.sakura.ne.jp/cgi にアクセスした時は、Forbiddenが表示され アクセスが拒否されるようになっています。 さくらインターネットのファイルマネージャーで 設定したのですが、なぜかjcode.plだけは閲覧できてしまいます。 これは他の方も同じなのでしょうか。 パーミッションを755にしても644にしても同じでした。

    • ベストアンサー
    • CGI
  • ファイルに書き込めない/ファイルの内容が消える

    編集機能を掲示板につけているところです。 テキストファイルの内容がまったく消えてしまうのです。 どうしてでしょうか? データ形式 314:2006年2月20日(月)22時31分:あああ:いいい:ううう 313:2006年2月20日(月)22時31分:あああ:いいい:ううう 312:2006年2月18日(土)23時18分:あああ:いいい:ううう #コード↓######################################## open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; @all = <KEIJI>; $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; #***** 文字列の置換 ***** $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得るサブルーチン $time = &jp_time if( $time eq '' ); # 重複があったら置き換えるルーチン foreach(@all){ $data = $_; chop $data; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); } push @all, $data; } die "File 'keijiban.dat' Open Error."; flock(KEIJI, 2); foreach (@all){ print KEIJI $_,"\n"; } flock(KEIJI, 8); close(KEIJI); ~~~~~~~~~~~~~~~~~~~~~~~~ どんどん手をつけていったら書きこめなくなってしまいました。最初は書き込めていたんですけど・・・。 真ん中あたりのじ「重複があったらおきかえるルーチン」を付け加えていたら書き込めなくなりました。書き込めたときはpushではなくunshiftを使っていました。

    • ベストアンサー
    • Perl
  • データファイルのソート方法について

    perlで使用している、データファイルのソート方法について質問いたします。 やりたいこと。 1.ファイルを読み込み 2.指定されている文字列でソートをして 3.同じファイルに格納する 以上になります。 以下のファイルにデーターが入ってます・ namedata.cgi 田中,4 佐藤,2 鈴木,1 水野,3 このファイルをソートして以下のように並び替えて保存したいと思ってます。 スクリプトを実行後 namedata.cgi 鈴木,1 佐藤,2 水野,3 田中,4 となっていてほしいのです。 スクリプト sort.cgi 略・・・ #ふぁいる読み込み open(DB,"<$file") || &error("Can't write $file"); flock(DB, 1); @lines = <DB>; close(DB); #ソート @result = sort { $a <=> $b } @lines; #ファイル書き込み open(DB,">$file") || &error("Can't write $file"); flock(DB, 2); print DB "@result"; close(DB); ファイルの2項目目が分からないからソートされていないような気がするのですが、記述方法がわかりません。 ファイル読み込み時にforeachを使用して読み込まないとだけなのでしょうか? うまく説明できていないかもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ファイルの転送モード(Euc Jis 無変換)について

    ファイルの転送モードについてわからないので質問させてください。 ソフトはffftpを使用しています。 txt html cgi dat(bbsのログ) などはアスキーモードで転送するというのはわかったのですが、ffftpのメニューにある Euc Jis 無変換はどのように使い分ければよいのでしょうか?以下のファイルの場合、どれを選択すればよいか教えてください。また無変換で転送しなくてはいけないものにJisなどを使用した場合、何か問題は起こりますか?(特に掲示板のログファイルやCGIファイルなど) アスキー *.html *.cgi *.dat(bbs のログ) *.pl

  • perlで容量の大きいCSVファイルを開く方法

    perlで容量の大きいCSVファイルを開く方法 ファイル容量の大きいcsvファイルから、必要な項目を抜き出して別ファイルにするプログラムを作成したいと思ってます。 csvファイルが少ない場合は動作したのですが、容量が140MBを超えたデータを読み込もうとすると、ブラウザー表示で何も変化いたしません プログラムは以下のようになってます。 ------------------------------------------------- 略 open(IN,"$inport") || &error(" $inport を読み込みopen出来ません"); flock(IN,1); @lines = <IN>; foreach $lines (@lines) { local(@val) = split("\,", $lines); print "$val[0]"; $dat .= "$val[1]\,$val[5]\n"; } open(OUT,">$dcsv"); flock(OUT,2); print OUT "$dat"; close OUT; 略 ------------------------------------------------- 件数も多いので、foreachを$lines (@lines) としないで($start .. $end)として読み込みの件数を制限して対応しようと考えてましたが、うまくいきませんでした。 ご指導いただけますと幸いです。

    • ベストアンサー
    • Perl