• 締切済み

Socketに関して

mauraの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.2

while(<SOCK>){ print $_; # 追加 last if m/^\r\n$/; } while (<SOCK>) { print $_; # 追加 if ($_ =~ /<HTML>/i) { &error("バナ-画像が存在しません。バナ-URLを確認してください。"); } print OUT $_; } print 文を追加して実行すると どのような出力がありますか? 何かの手がかりにはなると思います。 インターネットへの接続は、"Proxyなし"でこちらは 確認しています。

das_horn
質問者

お礼

ご回答ありがとうございます。 エラーが出て試すことが出来ませんでした。

関連するQ&A

  • SOCKETで入手したデータを抜き出したい

    他サーバのHTMLから部分的に抜き出したいと思っています。 他サーバのHTMLを表示する所までは出来たのですが、抜き出す所が出来ずに困っています。 私が抜き出そうと、表示のwhile文内を下記に変えた所、何も表示されなくなりました。  if( $_ =~ m/抜き出したい頭のキーワード/ ){ $flag = 1;}  if( $_ =~ m/表示したい尾のキーワード/ ){ $flag = 0;}  if( $flag eq 1){ print $_;} このwhile文内には変数に代入するとどうもNGのようです。 教えてGooの過去ログにも同様の質問があったのですが、 解決に至っていませんでした。ご教示願います。 ↓現在のソースコード ---------------------------- #!/usr/local/bin/perl -w use strict; use Socket; # Socket モジュールを使う # 接続先ホスト名 my $host = 'www.xxxx.co.jp'; # HTTP プロトコルを使う my $port = getservbyname('http', 'tcp'); # ホスト名を、IP アドレスの構造体に変換 my $iaddr = inet_aton($host) or die "$host は存在しないホストです。\n"; # ポート番号と IP アドレスを構造体に変換 my $sock_addr = pack_sockaddr_in($port, $iaddr); # ソケット生成 socket(SOCKET, PF_INET, SOCK_STREAM, 0) or die "ソケットを生成できません。\n"; # 指定のホストの指定のポートに接続 connect(SOCKET, $sock_addr) or die "$host のポート $portに接続できません。\n"; # ファイルハンドル SOCKET をバッファリングしない select(SOCKET); $|=1; select(STDOUT); # WWW サーバに HTTP リクエストを送る print SOCKET "GET /index.html HTTP/1.0\r\n"; print SOCKET "\r\n"; # ヘッダ部分を受け取る while (<SOCKET>){ # 改行のみの行ならループを抜ける m/^\r\n$/ and last; } # ボディ部分を受け取り、表示 while (<SOCKET>){ print $_; }

    • ベストアンサー
    • Perl
  • PerlのソースをPHPに移植中なのですが...

    下記のようなperlをPHPに移植しようと考えています open( FHDR, "<$filename") || return; binmode( FHDR); if ( read( FHDR, $buf, 2) != 2 ) { close(FHDR); return;} if ( 0xffd8 != unpack("n", $buf)) { close(FHDR); return;} if ( read( FHDR, $buf, 10) != 10 ) { close(FHDR); return;} ( $marker,$size,$ext) = unpack("nna6",$buf); ...続く このなかでの最後の行 unpack()がさっぱりわからず 特に"nna6"が何を意味するのかわかりません。 PHPにもunpack()がありますが、やはり意味が解りません。 Perlとも少し動きが違うような... どなたか unpack("nna6",$buf) の意味、 "nna6" の意味、 そしてPHPに移植する場合どう書くのか? 教えてください! よろしくお願い致します!

    • ベストアンサー
    • Perl
  • 該当項目表示についての追加質問

    csvデータの列に%で区切った項目があります。 例) 1行目:aaa%bbb%ccc 2行目:aaa&bbb%ddd 3行目:aaa%bbb csvデータ内にはaaaは3個だけですが下記コードで実行すると aaaが6個と計算されます。bbb、ccc、dddの個数は正確に計算されます。 $find = 0; for($d = 0 ; $d < @TEST ; ++$d) { (@ITEM) = split(/\,/, $TEST[$d]); @T = split(/\%/, @ITEMD[2]); #csvデータ内項目%区切り if($in{'item'} eq @T[0]) #@T[0]にaaaが入ります { if(($in{'item2'} eq "") or ($in{'item2'} eq "全て")) { @FIND[$find] = $TEST[$d]; $find++; } elsif($in{'item2'} eq @T[2]) { @FIND[$find] = $TEST[$d]; $find++; } if($in{'item2'} eq @T[1]) { if(($in{'item3'} eq "") or ($in{'item3'} eq "全て")) { @FIND[$find] = $TEST[$d]; $find++; } elsif($in{'item3'} eq @T[2]) { @FIND[$find] = $TEST[$d]; $find++;     }    }   } } ご教授お願いいたします。

    • ベストアンサー
    • Perl
  • Perlで画像のサイズ取得する方法

    URL指定で画像サイズの取得が出来ません。 何方かご教授お願いします。 悲しいことにレンタルサーバーにはimage::magickがインストールされていないので使えません。 ----perl---- #!/usr/bin/perl $FileName = "http://i.yimg.jp/images/main11.gif"; ( $format, $width, $height ) = &GetImageSize( $FileName ); print "Content-type: text/html\n\n"; print <<"HTML"; <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <BR> $width x $height <br> <IMG src="$FileName" border="0"> HTML sub GetImageSize{ my ( $IMG, $in ) = @_; my ( %SHT, %LNG ); my ( $buf, $mark, $type, $f_size, $width, $height ); my ( $TAG, $TYPE, $COUNT, $V_OFFSET, $PK, $ENTRY, $Exif_IFD ); my ( $endian, $dummy1, $dummy2, $dummy, $EOI, $APP1, $length, $exif ); my ( $format, $offset, $line, $CODE, $jfif ); my @TGA; my $ntag; # 定数 $mark = pack("C", 0xff); %SHT = ( 'II' => 'v', 'MM' => 'n' ); %LNG = ( 'II' => 'V', 'MM' => 'N' ); # 初期値 $endian = ''; $width = -1; $height = -1; $format = ''; $Exif_IFD = -1; if( $in eq '' ){ $in = 'IMG'; } open( $in, $IMG ) || return( '', -1, -1 ); binmode($in); seek( $in, 0, 0 ); read( $in, $buf, 6 ); # GIF 形式 if($buf =~ /^GIF/i){ $format = 'GIF'; read( $in, $buf, 2 ); $width = unpack("v*", $buf); read( $in, $buf, 2); $height = unpack("v*", $buf); } close( $in ); return( $format, $width, $height ); } exit;

    • ベストアンサー
    • Perl
  • CGIにてソフトバンクがPCとして認識されます。

    掲示板のCGIなのですが、ソフトバンクではPC画面へ飛ばされてしまいます。下記の部分あたりではないかと思うのですが、書き直しで解決できるのでしょうか?このCGIを使いたいので、お願い致します。 #▼ホスト名・UA取得 $HOST = $ENV{'REMOTE_HOST'}; $ADDR = $ENV{'REMOTE_ADDR'}; $UA = $ENV{'HTTP_USER_AGENT'}; $SN = $ENV{'HTTP_X_UP_SUBNO'}; if ($UA =~ /^DoCoMo\/\d/) { $AGEN = "i-mode"; }elsif ($UA =~ /^Vodafone\/\d/) { $AGEN = "Vodafone"; }elsif (($UA =~ 'UP.B') && ($SN ne "")){ $AGEN = "AU"; }else { $AGEN="PC";} if ($UA =~ /Mozilla\/|MSIE|Netscape|Opera|Lynx|AOL|Gecko/) {$AGEN="PC";} if ($HOST eq '') { $HOST = $ADDR; } if ($HOST eq $ADDR) { $HOST = gethostbyaddr(pack('C4',split(/\./,$HOST)),2) || $ADDR; }

    • 締切済み
    • CGI
  • 掲示板に投稿編集機能付けたい

    質問の補足ができないので、新たに掲載します。 掲示板に投稿編集機能が無いので、付けようと奮闘しています。 書き込み時に削除PASSを入力するようになっています。 それを利用して投稿編集機能を付けたいです。 以下がユーザーの記事削除処理の部分ですが、 elsif ($in{'action'} eq 'usr_kill') { &kill_action; }##←始めの部分 記事表示部分↓↓↓ <FORM method="$method" action="$cgifile"> <INPUT type="hidden" name="action" value="usr_kill"> <INPUT type="hidden" name="sex" value="$in{'sex'}"> <BR> <TABLE cellspacing="0" width="200" border="0"> <TR align="left"><TD nowrap colspan="3"><B>【記事削除フォーム】</B></TD></TR> <TR><td nowrap align="right">記事No/</TD> <TD><input size="4" type="text" name="number"></TD></TR> <TR><td nowrap align="right">パスワード/</TD> <TD nowrap><INPUT size="10" type="password" name="pass"> <INPUT type="submit" value="削除"></TD></TR> </TABLE></FORM> 下の方にあるルーチン↓↓↓ ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> ユーザー記事削除処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub kill_action { if ($in{'number'} eq "") { &error("記事Noを入力してください"); } elsif ($in{'number'} =~ /\D/) { &error("記事Noは半角数字で入力してください"); } elsif ($in{'pass'} eq "") { &error("パスワードを入力してください"); } &lock1; if ($in{'sex'} eq '0') { &mens_read("lock2"); } elsif ($in{'sex'} eq '1') { &ladys_read("lock2"); } #--パスワードを暗号化--# $crypted = crypt($in{'pass'}, "xx"); #--削除対象データが見つかるまでループ--# $flag1 = 0; $flag2 = 0; foreach $line (@DATA) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/, $line); if ($in{'number'} eq "$no") { $flag1 = 1; chomp $m_pass; if ($crypted eq "$m_pass" || $in{'pass'} eq "$master_key") { $flag2 = 1; $line =~ s/.*\n//; last; } else { &lock2; &error("パスワードが一致しません"); } } } #--削除対象Noが見つからなかった場合のエラー処理ー--# unless ($flag1) { &lock2; &error("記事No$in{'number'}が見つかりません"); } if ($flag2) { if ($in{'sex'} eq "0") { if (!open(OUT,">$mensfile")) { &lock2; &error("$mensfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } elsif ($in{'sex'} eq "1") { if (!open(OUT,">$ladysfile")) { &lock2; &error("$ladysfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } &lock2; #--削除に成功したら完了メッセージを表示--# &html_head; &title; print <<"HERE"; <CENTER><TABLE width="560"> <TR><TD bgcolor="$top_t_bgc"><CENTER> <FONT color="$top_t_color"><B>削除完了!</B></FONT> </CENTER></TD></TR></TABLE><BR><BR> <FORM method="post" action="$cgifile"> <TABLE cellspacing="0" cellpadding="5" border="1"> <TR><TD nowrap bgcolor="#ffffd9" align="center"> <B>記事No$in{'number'}を削除しました。</B><BR><BR> <INPUT type="submit" value=" TOP "></TD></TR> </TABLE></FORM> HERE &html_footer; exit; } exit; } これに対しての回答が下記の一件ですが、 ↓↓↓ 削除と再登録が簡単に出来れば修正と同じことだと思いますので、 elsif ($in{'action'} eq 'edit') { &edit; } を追加したらeditの内容は kill_actionの削除処理を行った後に削除したデータを基にvalueやselectedを使って入力済みの状態にしたin_dataの処理を入れたらOKだと思います ~とのことですが、 プルダウンで選択させているところなどはどうすればいいのでしょう。 あらたにeditのルーチンを作ったとして、 どこからどこを追加して、何を記述してどうやって作れば良いか分かりません。 ズバッと回答して下さる勇者様はおりませんか?

    • ベストアンサー
    • CGI
  • Winsockプログラムの初歩的質問(connect()がうまくいかない)

    ソケットの練習をしています。とりあえずconnect()で通信経路を確立するところまでを書いたつもりですが、以下プログラムを実行すると「サーバーソケットに接続失敗」となります。 とりあえずprintf()でチェックしたところsocket()まではうまくいっているようです。 環境:Win2000 , VC++6.0 , LAN接続でDHCP→学内サーバー です。 よろしくお願いします。 #include<winsock2.h> #include<stdio.h> int main() { WSADATA wsaData; struct hostent *host; SOCKET sock1; SOCKADDR_IN name; WSAStartup(2 , &wsaData); host=gethostbyname("www.goo.ne.jp"); //gooのIPアドレスを取得 sock1 = socket(AF_INET,SOCK_STREAM,0); //ソケット生成 /**ここからがあやしい**/ name.sin_port=htons(80); name.sin_addr=*((in_addr *)*host->h_addr_list); if(connect(sock1,(PSOCKADDR)&name,sizeof(name))){ printf("サーバーソケットに接続失敗\n"); return 0; } WSACleanup(); return(0); }

  • PHP ファイルアップロードの縮小方法(比率)

    初めまして。PHP の初心者で勉強中なのですが、 ファイルのアップロードの際に確認として 画像を指定範囲に表示したいと考えています。 参考サイトで http://usualcms.net/contents/index/page/49/middle/201106/ で縮小する事ができ、 http://usualcms.net/contents/index/page/31/middle/201106/category_id/ で比率を変えずに縮小する関数の定義 とあるのですが、この二つを組み合わせて試行錯誤したのですが 行き詰まってしまいました。 <?php function getImgSize ($path, $new_width, $new_height) {        $size = array();        list ($getWidth,$getHeight) = getimagesize ($path);        $w = $new_height / $getHeight * $getWidth;        $h = $new_width / $getWidth * $getHeight;        //幅と高さの両方が指定より小さい場合        if ($getWidth <= $new_width && $getHeight <= $new_height) {                $size['new_width'] = (int)$getWidth;                $size['new_height'] = (int)$getHeight;        //幅が指定より大きい場合        } else if ($w >= $new_width && $h < $new_height) {                $size['new_width'] = (int)$new_width;                $size['new_height'] = (int)$h;        //高さが指定より大きい場合        } else if ($w < $new_width && $h >= $new_height) {                $size['new_width'] = (int)$w;                $size['new_height'] = (int)$new_height;        }        return $size; } if (isset($_POST['index_submit'])) {               $type = $_FILES['upfile1']['type'];               if ($type == 'image/jpeg' || $type == 'image/gif'                                                         || $type == 'image/png') {                       $ext = str_replace('image/', '', $_FILES['upfile1']['type']);                       $path = 'image.'.$ext;             move_uploaded_file($_FILES['upfile1']['tmp_name'], $path);            $new_width = 200;            $new_height = 200;             $new_image = imagecreatetruecolor ($new_width, $new_height);            if ($type == 'image/jpeg') {                            $image = imagecreatefromjpeg ($path);            } else if ($type == 'image/gif') {                            $image = imagecreatefromgif ($path);             } else if ($type == 'image/png') {                            $image = imagecreatefrompng ($path);             }             imagecopyresampled ($new_image,$image,                    0,0,0,0,$new_width,$new_height,                     $getWidth,$getHeight            );             imagejpeg ($new_image, $path, 100);             echo "<img src='".$path."' />";          } else {            var_dump ('error');  } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <form enctype="multipart/form-data" method="post"           action="<?php echo $_SERVER['PHP_SELF']; ?>" > <input type="file" name="upfile1" /><br /> <input type="submit" name="index_submit" /> </form> </body> </html> 定義したgetImgSize関数がうまく結びついていないのは自分でも分かるのですが、 getImgSize関数を機能させる方法がうまく分からず悩んでいます。 お分かりになる方からすればご指摘だらけかと思いますが、 お力を貸していただければ大変うれしく思います。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • アンケートフォームの設定について

    質問が1-1、1-2、1-3とあるのですが、その1-1質問中で「はい」と答えた方のみ1-2へ、更に1-2でも「はい」と答えた方が1-3まで回答いただく設定にし、1-1で「いいえ」と答えれば、次の1-2以降は答えなくても良いようにするにはどのようにすればよいのでしょうか?※csvデータ「いいえ」の回答の際は1-1 いいえ、1-2、1-3はブランクとなるような設定が理想ですが。 省略 # form.htmlよりデータを変数に代入 $d[0]=$in{'name'}; $d[1]=$in{'sex'}; $d[2]=$in{'age'}; $d[3]=$in{'q1-1'}; $d[4]=$in{'q1-2'}; $d[5]=$in{'q1-3'}; $d[6]=$in{'q2-1'}; $d[7]=$in{'q2-2'}; $d[8]=$in{'q2-3'}; # 未入力チェック  if($d[0] eq ""){$error[0]="名前入力";} if($d[1] eq ""){$error[1]="性別を入力";} if($d[2] eq ""){$error[2]="年齢を入力";} if($d[3] eq ""){$error[3]="質問1-1を入力";} if($d[4] eq ""){$error[4]="質問1-2を入力";} if($d[5] eq ""){$error[5]="質問1-3を入力";} if($d[6] eq ""){$error[6]="質問2-1を入力";} if($d[7] eq ""){$error[7]="質問2-2を入力";} if($d[8] eq ""){$error[8]="質問2-3を入力";} # データをカンマ区切りにしてdata.csvに保存 $data=join(",",$d[0],$d[1],$d[2],$d[3],$d[4],$d[5],$d[6],$d[7],$d[8])."\n"; open(FH,">>./data.csv"); print FH $data; close FH; 省略

    • 締切済み
    • CGI
  • perl Socketで文字化け

    お世話になります。 早速ですが、以下のスクリプトをWinXPHomeSP2+ActivePerl5.6.1の環境で実行しました。訳あって標準モジュールのみ使用しております。 #!/usr/local/bin/perl use Socket; use FileHandle; # デフォルトホストの設定 $host = 'jws.jalan.net'; $port = getservbyname('http', 'tcp'); $path = '/APICommon/OnsenSearch/V1/?key=and10fed2591c0&l_area=430400&xml_ptn=1'; #$path = 'APICommon/OnsenSearch/V1/?key=and10fed2591c0&l_area=430400&onsen_q=4&xml_ptn=1'; $ip = inet_aton($host) || die "host($host) not found.\n"; $sockaddr = pack_sockaddr_in($port, $ip); socket(SOCKET, PF_INET, SOCK_STREAM, 0); connect(SOCKET, $sockaddr); autoflush SOCKET (1); print SOCKET "GET $path HTTP/1.1\nHost: $host\nConnection: close\n\n"; # HTTP応答を受信 while (<SOCKET>) { print "$_"; } # 終了処理 close(SOCKET); exit; 長くて恐縮です m(__)m このスクリプトを実行するとUTF8形式のXMLが出力されますが、なぜかその中の”弱アルカリ性低張性泉”という文字だけが文字化けしてしまいます。 ところがIE6やFireFox2などのブラウザで http://jws.jalan.net/APICommon/OnsenSearch/V1/?key=and10fed2591c0&l_area=430400&xml_ptn=1 に直接アクセスすると、文字化けせずに表示されます。 従ってPerlの実装が悪いのかと思ったのですが、上記スクリプト8行目付近の#$pathのコメントをはずして実行すると(クエリストリングにonsen_q=4が追加され、出力内容が絞り込まれます)、文字化けが発生するレコードが出力されるにも関わらず文字化けしません。 というわけで、問題箇所が切り分けられず、途方にくれております。対処方法などご教授いただければ幸いです。

    • ベストアンサー
    • Perl