トップページ⇒php
981コメント390KB

くだすれPerl(超初心者用)2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/03(月) 05:07:32ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0322nobodyさん2008/06/25(水) 05:30:05ID:???
>>320さん >>321さん
318です。仰るとおり、送って来るReuestHeaderが異なるのは、各ブラウザ側の挙動の違いの問題です。

その後、教えて頂いたprototype.jsのXHR周りの動作について、手持ちのブラウザで基本的な動作確認をしましたが、
やはり送ってくるRequestHeaderはブラウザごとに違います。設定によりいくらかのヘッダの操作も出来ますが、
FireFox3で、当該の"chaesrt=..."の部分を消すことは出来ないようです。

( これもブラウザにより異なります。IEでもデフォで、"charset="が付いてきたりします。
 ここら辺の違いを吸収してくれるハズのライブラリで、ブラウザごとに分かち書きとかしないといけないのは、
 本末転倒のような気がします。まあJavascriptのことはスレ違いになるんで、言及はここら辺でやめときます。)
03233222008/06/25(水) 05:30:57ID:???
で、何が問題かと言うと、実は今自分の運営しているサイトで、CGI::Liteで書いた既存のcgiが動いてるんですが、
現在、日中平均で30req/s前後、ピーク時で90-100req/s程度のリクエストがあります。このスクリプトを導入した際に、
CGI.pmとCGI::Liteでそれぞれベンチを取ったのですが、本番環境と同一ハード,ソフトの環境で、
CGI.pmだと40rq/s位で限界、CGI::Liteだと150-160rq/s位までは持ちこたえられるとの結果を得ましたので、
CGI::Lite版を採用することに決めました。(その時は、最大50rq/s程度が想定でしたが・・・)

で、今回これと同じ処理をするcgiに、Jsからajaxリクエストを投げるような構成を考えていたのですが、
そのテストの段で、上記の>>311のような問題に行き当たったわけです。
現実問題として、速度や負荷の観点から、今回もCGI::Liteで行こうと思ったのですが、上記のような問題のため
(prototype.jsを使う使わないに関係なく)CGI::Liteが使えないので困ったなぁ とゆう感じです。
( 実は、mod_perl+Apache2::Requestでは、同様の処理で 1800rq/s! とかベンチ出たんですが、
 実験的な環境のため、そのまま本番環境には投入できません。)
0324nobodyさん2008/06/25(水) 10:26:42ID:???
>>323
当然考えているとは思うけど、CGI::Lite に手を入れてしまうのがリーズナブルなんじゃないかな。
parse_form_data() 内で、
$content_type eq 'application/x-www-form-urlencoded'
と判断しているので、これを =~ にでもすればいいだけなわけだし。
0325nobodyさん2008/06/25(水) 13:14:34ID:???
簡単なパースしかしないなら、モジュール使わない方法もあるんじゃね?
0326nobodyさん2008/06/28(土) 19:23:20ID:???
HTMLフォームから送信されてきた文字列の中からURLを探しだして
<a href=>のタグをくっつけたいんですが、cgiのURLとかで?が入ってると上手く置き換えできません。
これを回避する方法を教えていただければ幸いです。

$mojiretu =~ s/$url/<a href="$url">$url<\/a>/; #$ulに?が入ってると置き換えできない。
0327nobodyさん2008/06/28(土) 19:59:00ID:???
>>326
上手く行くかどうかしらんし、根本的な解決にはならんかも知れんが、
$mojiretu =~ s/\Q$url\E/<a href="$url">$url<\/a>/;
0328nobodyさん2008/06/28(土) 20:12:33ID:???
>>327
うはwできた
ありがとおお!!
0329nobodyさん2008/06/28(土) 22:15:55ID:???
「\E までのパターン指定メタ文字の意味を打ち消す」

ってどういう意味かな?
0330nobodyさん2008/06/28(土) 22:29:45ID:???
$str="a?b";

のとき、

/$str/

が

/a?b/

じゃなくて、

/a\?b/

に展開されるようにしてくれる。
0331nobodyさん2008/06/28(土) 22:33:22ID:???
?が「パターン指定メタ文字」なんだな、たぶん。

それで、?があると、そのあとに続く文字が
特別な意味をもつんだな。

だからそれをエスケープ?しなくてはならなくて、
そのための呪文という意味か。よくわかりました。
0332nobodyさん2008/06/28(土) 22:50:41ID:???
>>331
>それで、?があると、そのあとに続く文字が
>特別な意味をもつんだな。
違うよw
ま、追い追い勉強しなw
0333nobodyさん2008/07/01(火) 21:46:30ID:???
perl -MCPAN -e shellの後に、install Math::BaseCalcしたら、
make: *** [test_dynamic] エラー 255ってでるんだよ
どうしたら、解決出きるのか教えてください
0334nobodyさん2008/07/01(火) 23:37:34ID:???
>>333
config で make program を変更してみるとか、、、フォースインストール
するとか、、、
俺の場合はMath::BaseCalcじゃないけど、makeでコケた奴はソースで手動で
コンパイルして入れたりもする。
0335nobodyさん2008/07/01(火) 23:40:04ID:???
>>333
まずはインストール時のメッセージをじっくり調べてみてはいかがでしょう。
0336うっとりハムちゃん2008/07/05(土) 00:33:32ID:NR2upuAB
すいません、おじゃまします。

cgiにアクセスした際に、同時に○○.phpを読み込む際のPerl記述を教えていただけると助かります。
よろしくおねがいします。
0337nobodyさん2008/07/05(土) 09:04:26ID:???
つ system
つ ``
0338うっとりハムちゃん2008/07/05(土) 13:03:49ID:NR2upuAB
レスありがとうございます!

例えば○○.php を読み込みたい(実行したい)場合、以下では無反応なのですが、間違っていますか?

system ("○○.php");
0339うっとりハムちゃん2008/07/05(土) 13:38:38ID:NR2upuAB
説明不足で申し訳ないのですが、用途としては、
phpカウンターをcgi(掲示板)実行時にも
カウントさせたいのです。

IMGタグでphpを読み込んでもいいのですが、
これだと携帯で見た時に壊れた画像マークになっちゃうので。。。

それで、cgiを実行時にphpファイルも同時実行できないかと思い、困っています。
よろしくお願いします。
0340nobodyさん2008/07/05(土) 14:13:13ID:???
携帯でそうなる理由を調べてそれを解消したほうが早い
systemで実行するなら/usr/local/bin/php xxx.phpとかだろうけど
それでキミの欲しいものが得られるのか?
http経由で呼ぶならそうすればいい
0341うっとりハムちゃん2008/07/05(土) 15:00:49ID:???
できました!
とても助かりました!!
どうもありがとうございました。 m(_ _)m
0342nobodyさん2008/07/05(土) 20:33:29ID:???
>>341
おめでとう。
何をどう変えてどのような望む動作が得られたのかはさっぱりわからんが。
0343nobodyさん2008/07/05(土) 21:27:12ID:???
おそらく直に読んでカウンターが上がったんじゃないかと
0344うっとりハムちゃん2008/07/05(土) 23:02:34ID:NR2upuAB
たびたびすいません (><)

system ("/usr/local/bin/php ○○.php");


↑これで うまくできたのですが、他のレンタルサーバーでも使おうと思ってみたら、
そっちではphpを読み込んでくれず、ソースコードが丸ごと表示されちゃいました。
サーバーによって動作は異なるのでしょうか?



0345うっとりハムちゃん2008/07/06(日) 01:29:25ID:+aL1pH4z
もしかして system の場合、何か終了(閉じる?)を記載しないといけないのでしょうか?
単純にphpカウンターを実行するだけでいいのですが。。。
0346nobodyさん2008/07/06(日) 02:26:42ID:???
>>344
そりゃあんた、その違うレンサバとやらがphp対応なのかどうかと、
phpの実行パスが/usr/local/bin/phpとは限らんだろう。

サーバによっては、httpからはphp実行出来ても、ユーザー権限で直接実行出来ないように
設定されてる場合もあるし。
0347うっとりハムちゃん2008/07/06(日) 02:40:09ID:+aL1pH4z
ありがとうございます。
サーバー会社に問い合わせたところ、

system ("/usr/local/bin/php ○○.php");

で動作しますと言われました。
パスに関してはあっているようです。
0348nobodyさん2008/07/06(日) 10:59:36ID:???
こんにちは初心者です。
KENTWEBさんのところのBASIC認証式パスワード管理pwmgrというCGIを使いたいと思っています。
サーバーはろりぽっぷなのですが

CGIプログラムの説明を読んでいると、ログの取得について、
# 【利用条件】
# 1. SSIの利用できるサーバ
# 2. 環境変数 $ENV{'REMOTE_USER'} にてユーザーIDが取得できること
# ※ 2. については、同梱の pwlog_test.cgi にてテストすること
とあるのですが、
環境変数 $ENV{'REMOTE_USER'} とは何なんでしょうか?
使えない場合、使えるようにする方法はあるんでしょうか?
教えて下さい。
よろしくお願いします。

また、他の方法でIDとホスト名をリスト化することはできないでしょうか?
0349nobodyさん2008/07/06(日) 13:52:43ID:???
KENTWEBさんに聞くとか^^
0350nobodyさん2008/07/06(日) 15:54:22ID:???
>>348
固有の ID であれば良い、ということであれば、何かユニークな文字列を生成して $ENV{'REMOTE_USER'} に代入しておく手もあります。
あんまり筋の良くない手法なので元のスクリプトの動作を理解した上でどうぞ。
詳細は perlvar の %ENV ハッシュの項を見てください。
0351うっとりハムちゃん2008/07/06(日) 16:27:06ID:+aL1pH4z
たびたびすいません。

system ("/usr/local/bin/php ○○.php");

で正常に動作するのはCLI版のPHPで、
CGI版のPHPだとヘッダが出力されるため
表示がおかしくなり、動作しないみたいです。

解決するためにはCGI版のPHPでヘッダが出力されないように
systemを行いたいのですが、その場合の記述は
どのようになるのでしょうか?
0352nobodyさん2008/07/06(日) 17:26:48ID:???
>>351
# 勘でレス
my $php_output = qx{"/usr/loca/bin/php ○○.php"};
print +(split(/\n\n/, $php_output, 2))[1];
0353うっとりハムちゃん2008/07/06(日) 17:41:18ID:+aL1pH4z
レスありがとうございます。

my $php_output = qx{"/usr/local/bin/php ○○.php"};
print +(split(/\n\n/, $php_output, 2))[1];

を使わせていただきましたが、phpが実行されませんでした。。
03543522008/07/06(日) 18:08:25ID:???
>>353
system( qw{/usr/local/bin/php -q ○○.php} ); # これも勘
0355うっとりハムちゃん2008/07/06(日) 18:17:32ID:+aL1pH4z
レスありがとうございます。
phpを実行しようとしているようですが、そのために
ヘッダが出力されるため表示がおかしくなり、動作しないみたいです。
03563522008/07/06(日) 18:29:36ID:???
# さらに勘で
# Perl スクリプトをその場で即座に終了してよければ
exec( qw{/usr/local/bin/php -q ○○.php} );

ちなみになぜ勘なのかというと、情報がタリンからです。
ぱっと思いついた不足情報を以下に列挙しておきます。

・最終的に端末に返されるデータはどういうものか
・それは perl から返すのか php から返すのか
・Perl スクリプトで system() を呼び出す前後にどのような処理を行い、
・また、どのような出力をどこに返しているか

「phpが実行されませんでした」
    ・PHP処理系が起動しないのか、
    ・期待した表示が行われないだけなのか

「表示がおかしくなり」
「動作しないみたいです」
    ・おかしいとは具体的にどういうことか
    ・おかしいながらも表示はされているのに動作しないとはどういうことか
0357うっとりハムちゃん2008/07/06(日) 19:15:01ID:+aL1pH4z
度々すいません。

掲示板CGIにアクセスがあった際に
phpカウンターを同時に実行(カウント)させたいのです。

とくに戻ってくる必要はなく、基本的には教えていただいた
system ("/usr/local/bin/php ○○.php");
で良さそうなのですが、問題は
CGI版のPHPでヘッダが出力されないように
systemを行うことなので、悩んでいます。

system ("/usr/local/bin/php ○○.php");
の場合、phpのヘッダが戻ってくることにより
CGIがおかしくなり、ソースコードがまるまる表示されてしまいます。
単純に、返ってくるヘッダを無効(?)にする記述があると助かります。
説明が下手ですいません。。
03583522008/07/06(日) 21:03:06ID:???
>>357
> 単純に、返ってくるヘッダを無効(?)にする記述があると助かります。

実際に HTTP Response Header 出力が原因だとすれば、やはり、
system( qw{/usr/local/bin/php -q ○○.php} ); # -q に注目
でうまいこといきませんか。

> CGIがおかしくなり、ソースコードがまるまる表示されてしまいます。

「CGIがおかしくなり」には具体的情報がありません。
「ソースコード」は何のソースコードでしょう?

どうしてもうまくいかないときは、あっさり発想を切り換えて別の設計を試すのも一興。
がんばってください。
0359nobodyさん2008/07/07(月) 01:56:34ID:???
>>357
phpから帰って来た値(文字列)を出力する必要あるのか?
それまでの説明から、
> 掲示板CGIにアクセスがあった際に 
> phpカウンターを同時に実行(カウント)させたいのです。
ってことだから、多分外部ファイルなりにカウントを保存してるんだと思うけど、
その数値がインクリメントされさえすればいいってのなら、

my $php_res = `/usr/local/bin/php *.php`; とでもして、
その受け取った戻り値の$php_resは出力させなければいい。
system()にしろ、print $php_res; にしろ受け取った戻り値をそのまま出力させようとするから、ヘッダとかでおかしくなる。

どうしても戻り値をperl側から出力したいのであれば、>>352で出来そうな気もするけど、
ひょっとしたら改行が"\r\n"かも知れないので、
for (split/\n/,$php_res){
    print "$_\n" unless(m/^Content\-type:/i);
}
でどうか?(生の戻り値に"Content-type"から始まる文字列行がないことが前提だけど・・)

> ソースコードがまるまる表示されてしまいます。
これだけど、自分のごく勝手な勘だけど、上記の件とは無関係に、<? ?>が原因でね?
ちゃんと<?php ?>にしてるか〜?
0360うっとりハムちゃん2008/07/07(月) 02:22:31ID:w0zyvflA
皆さん、レスありがとうございます。

>358
-q でヘッダを出力しないようにできると思ったのですが、ダメでした。
同様にCGIのプログラムが まるまる表示されてしまいます。
phpを実行しているのは間違いなさそうですが、
戻ってきたヘッダが、その後のcgiを無効にしちゃっているみたいです。

>359
おっしゃるとおり、外部ファイルにカウントしているので、
php自体は。あくまでも実行させるだけで、
返ってくるヘッダは無用なのです。

さっそく

my $php_res = `/usr/local/bin/php ○○.php`;
for (split/\n/,$php_res){
print "$_\n" unless(m/^Content\-type:/i);
}

と記述してみましたが、戻ってきたヘッダが邪魔をして
cgiのプログラムが まるまる表示されてしまいます。
php自体は実行させているようです。

戻り値に Content-type ですよね!?
たぶん、入っていないかと。。。

phpのほうは、
<?php
?>
ではさんでいます。
0361nobodyさん2008/07/07(月) 05:51:43ID:???
>>360
なあそれ、phpの呼び出し云々ではなくて、cgi(perl)のほうは正常に動いてる?
(例えば、print "hellow world"だけとか、php呼び出し部分をコメントアウトするとかして)

> cgiのプログラムが まるまる表示されてしまいます。
コレ見るに、その"別のレンサバ"とやらに移したときに、*.cgiに実行権限がないとか、
実行が許可されてないディレクトリに配置したとか、そこらへんは大丈夫か?

phpの戻り値に"Content-type"ヘッダがあろうがなかろうが、cgiがちゃんと実行されてたなら、
そのcgiのソースが表示されるってことはないと思う。
(仮にヘッダ出力がおかしくても、500 Internal Server Errorとかになるハズ)
0362nobodyさん2008/07/07(月) 10:16:19ID:???
問題がカウントだけなら、掲示板でカウントしちゃったら?
0363nobodyさん2008/07/07(月) 12:28:07ID:???
hello
0364nobodyさん2008/07/07(月) 12:43:24ID:???
世界
0365うっとりハムちゃん2008/07/07(月) 15:24:36ID:Q4oOUlGo
皆さん、度々レスありがとうございます。

CLI版PHPのサーバーでは問題なく動いています。
CGI版PHPのサーバーだとcgiも動いていますが、PHPのヘッダが
戻ってきたのが影響してプログラムがテキストで表示されちゃいます。

ちなみにcgiの実行権限等は大丈夫です。

たしかに今回はカウントに関してのみなので、
別の策を考えたいとも思っていますが、
今後も同様の悩みを抱えると困るので、
できれば解決したいと思い、皆さんのお力に頼ってしまっているところです。
0366うっとりハムちゃん2008/07/07(月) 16:51:12ID:???
サーバー会社がPHPをCLI版に設定してくれ、無事に動作しました。
数日に渡り、皆さんに親身に相談にのっていただき、大変嬉しかったです!
お騒がせしました。 m(_ _)m
0367nobodyさん2008/07/07(月) 20:11:38ID:???
my $calc = new Math::BaseCalc(digits => [0,1]);
を、->を使って
my $calc = Math->BaseCalc->new(digits => [0,1]);
と書いても大丈夫ですか?
0368nobodyさん2008/07/08(火) 00:16:28ID:???
you,まずやってみなyo!
質問はそれからだ
0369のの2008/07/08(火) 00:36:18ID:???
yomi-search Ver4.21が携帯で使えるように改造中です。
INランキングはリフレッシュジャンプを使っているので、携帯によってはリフレッシュジャンプが出来なくて
真っ白なページが表示されてしまいます。そこで、
sub r_link{
#(2.1)アクセスジャンプ処理(&r_link)
if($EST{rev_fl}){
$FORM{id}=~s/\D//g;
if($FORM{id}){
local($fl=0,@ref_list);
$FORM{id}=~s/\n//g;
&lock_rev();
open(OUT,">>$EST{log_path}rev_temp.cgi");
print OUT "$FORM{id}<>" . time() . "<>$ENV{'REMOTE_ADDR'}\n";
close(OUT);
&unlock_rev();
}
}
$EST{location}=0; #refreshジャンプにする
&location($EST{rev_url});
}
の&location($EST{rev_url});をprint<<"EOM"〜EOMに変えて、htmlタグを記入したら、PCとソフトバンクではきちんとページが表示されるのに、auではタグがむき出しになります。
何かよい方法はありませんでしょうか。
0370nobodyさん2008/07/08(火) 12:58:18ID:???
改造スレ池
0371nobodyさん2008/07/08(火) 14:12:44ID:???
1から9までの4つの数字からできている配列の中で、重複した数字をヒットさせるには
どうしたらいいでしょうか。
たとえば
@suuji = (5,4,5,4)の時
@suuji = (3,3,3,3)の時
@suuji = (1,2,9,9)の時
などです。
if($suuji[0] ==$suuji[1])||($suuji[0] ==$suuji[2])||(略) )
{print "重複してるよ\n";}
のようにひとつひとつチェックしていっても可能ですが
もっとすっきり書く方法があったらお願いします。
0372nobodyさん2008/07/08(火) 14:27:25ID:???
if($suuji[0] ==$suuji[1])||($suuji[0] ==$suuji[2])||(略) )
{print "重複してるよ\n";}

ねーよwwwww
0373nobodyさん2008/07/08(火) 14:53:48ID:???
ねーですか。
普通はどう書くんでしょうか。
0374nobodyさん2008/07/08(火) 14:56:36ID:???
sub test {my %U;1 <= grep $U{$_}++,@_}
0375nobodyさん2008/07/08(火) 15:22:07ID:???
えーと難しいですね
配列から重複した要素をgrepで取り出して
その数をカウント…でいいんでしょうか
0376nobodyさん2008/07/08(火) 17:03:27ID:???
>>375
ハッシュテーブルさえ理解してればどの様にでも出来る。
このスレの>>12->>15あたり読め。後は自分で応用しろ。
0377nobodyさん2008/07/08(火) 17:10:18ID:???
あ、例を書くの忘れてたw
@res = keys %{ { map{ $_, 1 } qw( 1 2 9 9 ) } } ;
0378nobodyさん2008/07/08(火) 17:29:42ID:???
ありがとうございました。
まだ完全には理解しきれてませんが、
なんか見えてきた気がします。
0379質問2008/07/08(火) 23:51:46ID:ELkvWtkp
誘導されてきました。
送信ボタンを2回押さないとframe2へ出力されなくて困っています。
送信ボタンを1回押すだけで出力できるような方法を教えてください。

現在の構成ですが、

A.cgi
<form action="B.cgi" target="frame2">
と作成しています。
A.cgiではチェックリストを作って、選択したデータ(装置名)を取得するようにしています。
送信ボタンを押すとB.cgiが実行されてその結果をframe2へhtmlで出力するようにしています。

vi B.cgi
�@取得したデータをCファイルへ書き込み
�A取得したデータをhtmlで出力
�B ` D.pl` を実施

vi D.pl
 D.plがすでに起動していれば、改めてD.plを実行しない(多重起動防止)
 Cファイルに何も記録がなければD.pl自体を終了させる
 while(-s Cファイル){
Cファイルに何か書き込みが有る場合、
Cファイルを読み込んでその装置へデータをsnmpで取得しに行く
 sleep 30;
}

状況としては、チェックリストで項目を選択し送信ボタンを押すと、1回目のB.cgiが実行されるわけですが、
B.cgi内でD.plを走らせている為(30秒ループ)、D.plが終了しない限りB.cgiが終了しないので
結果としてframe2への出力がされないようです。
次に送信ボタンを押すと、1回目のD.plがすでに起動しているので2回目のD.plは終了し、2回目のB.cgiは終了し、
frame2へも出力されます。
0380nobodyさん2008/07/09(水) 02:49:40ID:???
いまいち何したいかわからんけど、

> B.cgi内でD.plを走らせている為(30秒ループ)、D.plが終了しない限りB.cgiが終了しないので
結果としてframe2への出力がされないようです。

D.plを呼ぶ前に「close STDOUT」 してもだめかな?
0381nobodyさん2008/07/09(水) 03:25:24ID:???
>>379
> frame2への出力
ってのが、B.cgiの2.の段階のこと?(多分違うと思うけど。3.の後の`D.pl`の後かな)

D.plを多重起動禁止とか、Cファイルに書き出しとかせずに、
B.cgiからrequireなりで呼び出して、直接その装置(何のだ?)に値するものを引数なりで渡せばええんでね?
で、戻り値をB.cgiから出力と。

これなら、ファイルのロックだとか破損だとか考えずに、B.cgiをいくらでも(cpuとメモリの限り)実行できると思うが・・。
snmpのことはよう知らんから、これではダメなのかも知れないけど。
0382nobodyさん2008/07/09(水) 07:17:22ID:bhbbhnXI
>>381
>> frame2への出力
>ってのが、B.cgiの2.の段階のこと?(多分違うと思うけど。3.の後の`D.pl`の後かな)
そうです。B.cgi内では�@�A�Bの順番で記述していますが、B.cgiが終了しないと
B.cgiの処理結果である�Aが出力されないようです。

>>380 >>381
今日あたり書かれていることを勉強して試してみます。
03833812008/07/09(水) 10:16:07ID:???
>>382
あれ、そうなの?じゃあD.plは一体何をしてるんだ?

自分の解釈としては、
A.cgi→フォーム(装置の種類?)を選択→B.cgiでそれを受け取りCファイルに書き出す
→D.plがCファイルの内容を読み取り、snmpからその装置の値(統計?測定値?)を取りに行く
→結果をB.cgiに返す→B.cgiで結果を出力  かと思ってたんだけど・・。

もし言うとおり、B.cgiの2.の部分が出力されないってことなら、>>380の方法か、
(Web鯖がApacheだと仮定して)
$| = 1;
print "Content-type....."
print " " x 256;
とかを、HTMLの出力前にやってみれば?
(確かApacheがcgiかの出力を256byte分バッファリングしたはず。だから最初に256byte分なにかを出力する)
0384nobodyさん2008/07/10(木) 13:55:54ID:udSkOiii
<FONT>タグだけ禁止するようにしたいんだけどどうすればいいですか?

$FORM_DATA{$name_data}=~s/<FONT>/<FONT>/g;
$FORM_DATA{$name_data}=~s/<\/FONT>/<FONT>/g;

これでやってもうまくいかないです。
0385nobodyさん2008/07/10(木) 14:08:18ID:???
タグ、こういう使い方しないし → <FONT>
それに、スタイルシートとかJavaScriptで壊滅しちゃうよ?
0386nobodyさん2008/07/10(木) 14:15:16ID:???
Perl以前の問題ですね。
0387nobodyさん2008/07/10(木) 14:37:38ID:???
ひろゆきがあめぞうを攻撃したとき、
「スタイルシート破壊攻撃」
というものであめぞうを壊滅させたのだ
0388nobodyさん2008/07/10(木) 17:37:23ID:dih1cMi9
いくらググってもまったくわからなかったから質問です
ソフトバンクでの$ENV{'HTTP_USER_AGENT'}の中に含まれる
ブラウザのことなんですが、携帯のブラウザって変更できますか?
機種変えないとブラウザは変更できませんか?
0389nobodyさん2008/07/10(木) 21:21:21ID:???
携帯は途中に介するゲートウェイで追加するから、自由には出来ない。
0390nobodyさん2008/07/10(木) 21:45:49ID:???
アプリのブラウザとか
0391nobodyさん2008/07/10(木) 21:53:43ID:???
Perl関係ないやん。
0392nobodyさん2008/07/11(金) 11:46:21ID:blsFm1gd
389さんくす
perlで携帯サイトを作ったので個体識別情報を
パスにして重複登録を防ごうとしてるので。
0393nobodyさん2008/07/11(金) 12:48:17ID:???
何で質問時にそういう情報出さないのかね?
0394nobodyさん2008/07/11(金) 17:55:47ID:8w4o/9wt
2ちゃんで使える自動書き込みスクリプトを作るにはperlを学べばいいのですか?
0395nobodyさん2008/07/11(金) 18:02:09ID:???
perlである必要は無いが、perlでもできる
0396nobodyさん2008/07/11(金) 18:24:17ID:8w4o/9wt
簡単なものでいいのですが、より早くそれを作れるのはどの言語ですか?
0397nobodyさん2008/07/11(金) 18:35:49ID:???
個人のスキルに依る。
教えると荒し幇助になるから、後は勝手にやってろ
0398nobodyさん2008/07/11(金) 19:06:48ID:???
早く作れるのはPerlに決まってるだろ。他の言語環境だと、往々にしてミラーリングでいきなり詰まる。
0399nobodyさん2008/07/11(金) 19:11:25ID:8w4o/9wt
ではPerlをやってみようと思います。
ありがとうございます。
0400nobodyさん2008/07/14(月) 09:37:28ID:???
Perlのスレで聞いたらPerlという答えが来るに決まってるだろw
0401nobodyさん2008/07/14(月) 12:27:09ID:???
昔からデューク(笑)とかフェイザー(厨)はPerlです。
0402nobodyさん2008/07/15(火) 23:35:01ID:xfy/3+9x
すいません、2点教えてください。

別ファイルからURLを読み込んで表示させたいのですが、

$url = http://○○○.○○.jp/********/**********/************/********/****.htm 等の場合、

の$url中から http:// という文字だけを削除する記述と、
URLが長すぎる場合、20文字以降は ... で省略して表示させる記述を教えてください。
よろしくお願いします。


0403nobodyさん2008/07/16(水) 00:07:34ID:???
>>402
http の h を抜くんだね? .htm の h は抜かないんだね?
$url =~ s/^h// ;
20文字以降、、、は、
$url = +( unpack q{A20}, $url ) . '...' if length $url > 20 ;
04044022008/07/16(水) 00:28:18ID:WNn5k82F
ありがとうございます!

$url でやろうと思ったのですが、他ファイル(plファイル)から
%url% というので読み込む際の記述を教えていただけると助かります。(^^;

あと、 h だけではなく、 http:// の全てを削除したいと思います。
度々すいませんが、よろしくお願いします。m(_ _)m
04054022008/07/16(水) 00:36:08ID:WNn5k82F
あ、すいません。
「 http:// 」 を抜きたいのです。
.htm の 「 h 」 は抜かないです。
0406nobodyさん2008/07/16(水) 00:38:06ID:???
s|http://||
httpsも含まれるなら
s|https?//||
0407nobodyさん2008/07/16(水) 00:41:20ID:???
>>404
すまんが %url% と言うのは理解出来ん。なんじゃそりゃ?
.htm 以外の h を全部抜くのは
$url =~ s/h(?!tm.?$)//g ;
あたりで何とか。
04084022008/07/16(水) 00:52:08ID:WNn5k82F
他サーバーから入ってくるXMLデータから抽出したurlを
cgiの中で %url% という記述で呼び出しているんです。

%url% を $url に変換(?)しようと思い、
$url ="%url%";
と書いてみましたが、無反応でした。
記述が間違っているようで・・


あと、 .htm 以外の h を全部抜くのはなく、
「 http:// 」 と 「 https:// 」 を抜きたい場合は、
$url =~ s|http://|| ;
$url =~ s|https://|| ;
でしょうか??


説明下手ですいません。(^^::
0409nobodyさん2008/07/16(水) 00:58:11ID:???
>>408
s{^(h|https://)}{} ;
0410nobodyさん2008/07/16(水) 01:04:47ID:WNn5k82F
ありがとうございます。

%url% を $url に変換(?)できれば希望通りになりそうなのですが、
この記述は難しいでしょうか??
0411nobodyさん2008/07/16(水) 01:05:58ID:???
s{^(https://|h)}{} ; 質問者さんの意図には関わらず、一応の訂正
%url% に関しては知らん。
0412nobodyさん2008/07/16(水) 01:19:18ID:???
専ブラで見たのが間違いだった。409、411は無意味だ。スレ汚しすまん。
04134022008/07/16(水) 01:28:15ID:???
すいません、発想を変えたらできました!!!!
cgiではなく、読み込む前のplファイル内でイジっていたら、うまくいったようです!
大変助かりました!
ありがとうございました!!
0414nobodyさん2008/07/16(水) 04:08:39ID:???
今回初めてperlでcgiを作ったのですがローカルサーバで動作を確認しようと
したのですがうまくいきませんでした。
このcgiはブラウザから引き渡されたデータを処理するのして記録(log)に残す
のですがInternal Server Errorになってしまいます。
perlのパスはあっていましたし、改行もLFでした。
apacheを使っている?のですが他のcgiは動いたのでapacheの設定は間違って
いないはずです。。。
cgi-lib.plを使っているのですがそれのパスが違うのと思いましたが
よくわかりません。
cgi-lib.plがあるフォルダのパスはそのフォルダをTerminalにつっこんで
でたパスをそのまんま書きました。
use lib'#ここにTerminalからのパス';みたいな感じです。

下にファイルのURLを張りましたのでどなたか教えて頂けないでしょうか?
よろしくお願いします<(_ _)>
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/356.zip
0415nobodyさん2008/07/16(水) 10:00:31ID:???
Macかいな。
InternalServerErrorのときは、その理由も別のエラーで出てるはずだが、apacheのログはどうなってる?
0416nobodyさん2008/07/16(水) 10:05:39ID:???
perl -wc

[confirm.cgi]
syntax error at confirm.cgi line 43, near "print"

[reservation.cgi]
Name "main::LOG" used only once: possible typo at reservation.cgi line 19.
0417nobodyさん2008/07/16(水) 10:07:17ID:???
あとコンソールから直接実行してみるのもいいよ。
ちょっとやってみたが、confirm.cgi の
>print "<HTML><BODY BGCOLOR=\"YELLOW\">\n"
この行の末尾に ; セミコロンがないからsyntax errorおこしてる。
04184142008/07/16(水) 11:49:34ID:???
>>415-417
返信ありがとうございます<(_ _)>
たしかにセミコロンが抜けていました;つけるとちゃんと実行はできたの
ですが記録するlogファイルは作成されるのですが中身が空なのです。
>>416さんのreserve.cgiの警告は1回だけしか変数と言う警告みたいで
気にすることはないみたいな感じで書かれていました。
ファイルでに追加書き込みの部分が
open(LOG1,">>reserve.log");
print LOG "\"$yourname\",\"$phone\",\"$email\",\"$answer1\",\"$date\",\"$stay\",\"$answer2\"\n";
close(LOG1);
みたいな感じなのですがどこかおかしいでしょうか?
ファイルが存在しない場合は新規で作成してくれました。
カレントディレクトリに存在しなければ umask 666 で新規作成する。
とありましたがそこが問題なのでしょうか?umask 666;とopen関数の後に
入れても何も書き込まれなかったのですが...。
0419nobodyさん2008/07/16(水) 12:31:03ID:???
openがLOG1なのに、print が LOGなのはおかしいと思わないのか
0420nobodyさん2008/07/16(水) 12:41:15ID:???
あとファイルが作成できてたならパーミッションいじらんでいいよ。
suEXECで動いてるんだろう。
04214142008/07/16(水) 12:53:40ID:???
>>419-420
回答ありがとうございます。
なんとも単純なミス・・・・
昨日から徹夜でしたので頭が回ってないようです;;
何度も確認してこれからは聞きたいと思います、ありがとうございました!
■ このスレッドは過去ログ倉庫に格納されています