くだすれPerl(超初心者用)2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/03/03(月) 05:07:32ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0322nobodyさん
2008/06/25(水) 05:30:05ID:???318です。仰るとおり、送って来るReuestHeaderが異なるのは、各ブラウザ側の挙動の違いの問題です。
その後、教えて頂いたprototype.jsのXHR周りの動作について、手持ちのブラウザで基本的な動作確認をしましたが、
やはり送ってくるRequestHeaderはブラウザごとに違います。設定によりいくらかのヘッダの操作も出来ますが、
FireFox3で、当該の"chaesrt=..."の部分を消すことは出来ないようです。
( これもブラウザにより異なります。IEでもデフォで、"charset="が付いてきたりします。
ここら辺の違いを吸収してくれるハズのライブラリで、ブラウザごとに分かち書きとかしないといけないのは、
本末転倒のような気がします。まあJavascriptのことはスレ違いになるんで、言及はここら辺でやめときます。)
0323322
2008/06/25(水) 05:30:57ID:???現在、日中平均で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:???当然考えているとは思うけど、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:???<a href=>のタグをくっつけたいんですが、cgiのURLとかで?が入ってると上手く置き換えできません。
これを回避する方法を教えていただければ幸いです。
$mojiretu =~ s/$url/<a href="$url">$url<\/a>/; #$ulに?が入ってると置き換えできない。
0327nobodyさん
2008/06/28(土) 19:59:00ID:???上手く行くかどうかしらんし、根本的な解決にはならんかも知れんが、
$mojiretu =~ s/\Q$url\E/<a href="$url">$url<\/a>/;
0329nobodyさん
2008/06/28(土) 22:15:55ID:???ってどういう意味かな?
0330nobodyさん
2008/06/28(土) 22:29:45ID:???のとき、
/$str/
が
/a?b/
じゃなくて、
/a\?b/
に展開されるようにしてくれる。
0331nobodyさん
2008/06/28(土) 22:33:22ID:???それで、?があると、そのあとに続く文字が
特別な意味をもつんだな。
だからそれをエスケープ?しなくてはならなくて、
そのための呪文という意味か。よくわかりました。
0333nobodyさん
2008/07/01(火) 21:46:30ID:???make: *** [test_dynamic] エラー 255ってでるんだよ
どうしたら、解決出きるのか教えてください
0334nobodyさん
2008/07/01(火) 23:37:34ID:???config で make program を変更してみるとか、、、フォースインストール
するとか、、、
俺の場合はMath::BaseCalcじゃないけど、makeでコケた奴はソースで手動で
コンパイルして入れたりもする。
0336うっとりハムちゃん
2008/07/05(土) 00:33:32ID:NR2upuABcgiにアクセスした際に、同時に○○.phpを読み込む際のPerl記述を教えていただけると助かります。
よろしくおねがいします。
0337nobodyさん
2008/07/05(土) 09:04:26ID:???つ ``
0338うっとりハムちゃん
2008/07/05(土) 13:03:49ID:NR2upuAB例えば○○.php を読み込みたい(実行したい)場合、以下では無反応なのですが、間違っていますか?
system ("○○.php");
0339うっとりハムちゃん
2008/07/05(土) 13:38:38ID:NR2upuABphpカウンターを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
0343nobodyさん
2008/07/05(土) 21:27:12ID:???0344うっとりハムちゃん
2008/07/05(土) 23:02:34ID:NR2upuABsystem ("/usr/local/bin/php ○○.php");
↑これで うまくできたのですが、他のレンタルサーバーでも使おうと思ってみたら、
そっちではphpを読み込んでくれず、ソースコードが丸ごと表示されちゃいました。
サーバーによって動作は異なるのでしょうか?
0345うっとりハムちゃん
2008/07/06(日) 01:29:25ID:+aL1pH4z単純にphpカウンターを実行するだけでいいのですが。。。
0346nobodyさん
2008/07/06(日) 02:26:42ID:???そりゃあんた、その違うレンサバとやらが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:???0350nobodyさん
2008/07/06(日) 15:54:22ID:???固有の ID であれば良い、ということであれば、何かユニークな文字列を生成して $ENV{'REMOTE_USER'} に代入しておく手もあります。
あんまり筋の良くない手法なので元のスクリプトの動作を理解した上でどうぞ。
詳細は perlvar の %ENV ハッシュの項を見てください。
0351うっとりハムちゃん
2008/07/06(日) 16:27:06ID:+aL1pH4zsystem ("/usr/local/bin/php ○○.php");
で正常に動作するのはCLI版のPHPで、
CGI版のPHPだとヘッダが出力されるため
表示がおかしくなり、動作しないみたいです。
解決するためにはCGI版のPHPでヘッダが出力されないように
systemを行いたいのですが、その場合の記述は
どのようになるのでしょうか?
0352nobodyさん
2008/07/06(日) 17:26:48ID:???# 勘でレス
my $php_output = qx{"/usr/loca/bin/php ○○.php"};
print +(split(/\n\n/, $php_output, 2))[1];
0353うっとりハムちゃん
2008/07/06(日) 17:41:18ID:+aL1pH4zmy $php_output = qx{"/usr/local/bin/php ○○.php"};
print +(split(/\n\n/, $php_output, 2))[1];
を使わせていただきましたが、phpが実行されませんでした。。
0355うっとりハムちゃん
2008/07/06(日) 18:17:32ID:+aL1pH4zphpを実行しようとしているようですが、そのために
ヘッダが出力されるため表示がおかしくなり、動作しないみたいです。
0356352
2008/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がおかしくなり、ソースコードがまるまる表示されてしまいます。
単純に、返ってくるヘッダを無効(?)にする記述があると助かります。
説明が下手ですいません。。
0358352
2008/07/06(日) 21:03:06ID:???> 単純に、返ってくるヘッダを無効(?)にする記述があると助かります。
実際に HTTP Response Header 出力が原因だとすれば、やはり、
system( qw{/usr/local/bin/php -q ○○.php} ); # -q に注目
でうまいこといきませんか。
> CGIがおかしくなり、ソースコードがまるまる表示されてしまいます。
「CGIがおかしくなり」には具体的情報がありません。
「ソースコード」は何のソースコードでしょう?
どうしてもうまくいかないときは、あっさり発想を切り換えて別の設計を試すのも一興。
がんばってください。
0359nobodyさん
2008/07/07(月) 01:56:34ID:???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:???なあそれ、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:???0364nobodyさん
2008/07/07(月) 12:43:24ID:???0365うっとりハムちゃん
2008/07/07(月) 15:24:36ID:Q4oOUlGoCLI版PHPのサーバーでは問題なく動いています。
CGI版PHPのサーバーだとcgiも動いていますが、PHPのヘッダが
戻ってきたのが影響してプログラムがテキストで表示されちゃいます。
ちなみにcgiの実行権限等は大丈夫です。
たしかに今回はカウントに関してのみなので、
別の策を考えたいとも思っていますが、
今後も同様の悩みを抱えると困るので、
できれば解決したいと思い、皆さんのお力に頼ってしまっているところです。
0366うっとりハムちゃん
2008/07/07(月) 16:51:12ID:???数日に渡り、皆さんに親身に相談にのっていただき、大変嬉しかったです!
お騒がせしました。 m(_ _)m
0367nobodyさん
2008/07/07(月) 20:11:38ID:???を、->を使って
my $calc = Math->BaseCalc->new(digits => [0,1]);
と書いても大丈夫ですか?
0368nobodyさん
2008/07/08(火) 00:16:28ID:???質問はそれからだ
0369のの
2008/07/08(火) 00:36:18ID:???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:???どうしたらいいでしょうか。
たとえば
@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:???{print "重複してるよ\n";}
ねーよwwwww
0373nobodyさん
2008/07/08(火) 14:53:48ID:???普通はどう書くんでしょうか。
0374nobodyさん
2008/07/08(火) 14:56:36ID:???0375nobodyさん
2008/07/08(火) 15:22:07ID:???配列から重複した要素をgrepで取り出して
その数をカウント…でいいんでしょうか
0376nobodyさん
2008/07/08(火) 17:03:27ID:???ハッシュテーブルさえ理解してればどの様にでも出来る。
このスレの>>12->>15あたり読め。後は自分で応用しろ。
0377nobodyさん
2008/07/08(火) 17:10:18ID:???@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:???> 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>> frame2への出力
>ってのが、B.cgiの2.の段階のこと?(多分違うと思うけど。3.の後の`D.pl`の後かな)
そうです。B.cgi内では�@�A�Bの順番で記述していますが、B.cgiが終了しないと
B.cgiの処理結果である�Aが出力されないようです。
>>380 >>381
今日あたり書かれていることを勉強して試してみます。
0383381
2008/07/09(水) 10:16:07ID:???あれ、そうなの?じゃあ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$FORM_DATA{$name_data}=~s/<FONT>/<FONT>/g;
$FORM_DATA{$name_data}=~s/<\/FONT>/<FONT>/g;
これでやってもうまくいかないです。
0385nobodyさん
2008/07/10(木) 14:08:18ID:???それに、スタイルシートとかJavaScriptで壊滅しちゃうよ?
0386nobodyさん
2008/07/10(木) 14:15:16ID:???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:???0392nobodyさん
2008/07/11(金) 11:46:21ID:blsFm1gdperlで携帯サイトを作ったので個体識別情報を
パスにして重複登録を防ごうとしてるので。
0393nobodyさん
2008/07/11(金) 12:48:17ID:???0394nobodyさん
2008/07/11(金) 17:55:47ID:8w4o/9wt0395nobodyさん
2008/07/11(金) 18:02:09ID:???0396nobodyさん
2008/07/11(金) 18:24:17ID:8w4o/9wt0397nobodyさん
2008/07/11(金) 18:35:49ID:???教えると荒し幇助になるから、後は勝手にやってろ
0398nobodyさん
2008/07/11(金) 19:06:48ID:???0399nobodyさん
2008/07/11(金) 19:11:25ID:8w4o/9wtありがとうございます。
0400nobodyさん
2008/07/14(月) 09:37:28ID:???0401nobodyさん
2008/07/14(月) 12:27:09ID:???0402nobodyさん
2008/07/15(火) 23:35:01ID:xfy/3+9x別ファイルからURLを読み込んで表示させたいのですが、
$url = http://○○○.○○.jp/********/**********/************/********/****.htm 等の場合、
の$url中から http:// という文字だけを削除する記述と、
URLが長すぎる場合、20文字以降は ... で省略して表示させる記述を教えてください。
よろしくお願いします。
0403nobodyさん
2008/07/16(水) 00:07:34ID:???http の h を抜くんだね? .htm の h は抜かないんだね?
$url =~ s/^h// ;
20文字以降、、、は、
$url = +( unpack q{A20}, $url ) . '...' if length $url > 20 ;
0404402
2008/07/16(水) 00:28:18ID:WNn5k82F$url でやろうと思ったのですが、他ファイル(plファイル)から
%url% というので読み込む際の記述を教えていただけると助かります。(^^;
あと、 h だけではなく、 http:// の全てを削除したいと思います。
度々すいませんが、よろしくお願いします。m(_ _)m
0405402
2008/07/16(水) 00:36:08ID:WNn5k82F「 http:// 」 を抜きたいのです。
.htm の 「 h 」 は抜かないです。
0407nobodyさん
2008/07/16(水) 00:41:20ID:???すまんが %url% と言うのは理解出来ん。なんじゃそりゃ?
.htm 以外の h を全部抜くのは
$url =~ s/h(?!tm.?$)//g ;
あたりで何とか。
0408402
2008/07/16(水) 00:52:08ID:WNn5k82Fcgiの中で %url% という記述で呼び出しているんです。
%url% を $url に変換(?)しようと思い、
$url ="%url%";
と書いてみましたが、無反応でした。
記述が間違っているようで・・
あと、 .htm 以外の h を全部抜くのはなく、
「 http:// 」 と 「 https:// 」 を抜きたい場合は、
$url =~ s|http://|| ;
$url =~ s|https://|| ;
でしょうか??
説明下手ですいません。(^^::
0410nobodyさん
2008/07/16(水) 01:04:47ID:WNn5k82F%url% を $url に変換(?)できれば希望通りになりそうなのですが、
この記述は難しいでしょうか??
0412nobodyさん
2008/07/16(水) 01:19:18ID:???0413402
2008/07/16(水) 01:28:15ID:???cgiではなく、読み込む前のplファイル内でイジっていたら、うまくいったようです!
大変助かりました!
ありがとうございました!!
0414nobodyさん
2008/07/16(水) 04:08:39ID:???したのですがうまくいきませんでした。
この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:???InternalServerErrorのときは、その理由も別のエラーで出てるはずだが、apacheのログはどうなってる?
0416nobodyさん
2008/07/16(水) 10:05:39ID:???[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おこしてる。
0418414
2008/07/16(水) 11:49:34ID:???返信ありがとうございます<(_ _)>
たしかにセミコロンが抜けていました;つけるとちゃんと実行はできたの
ですが記録する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:???0420nobodyさん
2008/07/16(水) 12:41:15ID:???suEXECで動いてるんだろう。
0421414
2008/07/16(水) 12:53:40ID:???回答ありがとうございます。
なんとも単純なミス・・・・
昨日から徹夜でしたので頭が回ってないようです;;
何度も確認してこれからは聞きたいと思います、ありがとうございました!
■ このスレッドは過去ログ倉庫に格納されています