△▲ WebProg 初心者の質問 Part11 ▼▽
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/28 18:58:29ID:???質問したいけど、どうしたら良いか分からない。
そんなときは、ここに書き込んでください。
板の住人や、その他が、けなしながら、厳しく教えてくれるかも。
質問する前に、まずはここを読んでね。
【注意事項】
・質問する前にGoogleで検索してみましょう
http://www.google.co.jp/
・環境(ソフトウェアのバージョンなど)は、必ず書いてください。できるだけ詳しく。
後から情報を書き足す、いわゆる情報の小出しは極力避けてください。
・何がしたくて、何ができて何ができないのかを書きましょう
・マルチポスト(複数のスレッドで質問する行為)は絶対に禁止です。
・過去ログは必ず読みましょう。あなたと同じ質問をしてる人がいるかも知れません。
2ch 総合ガイド
http://www.2ch.net/guide/
お願い。
適切な、板、スレ、を発見した場合、誘導してあげましょう。
スレの性質上 age 進行でお願いします。
関連情報は
>>2-3
前スレ
△▲ WebProg 初心者の質問 Part10 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0102nobodyさん
04/12/06 01:42:11ID:???0103nobodyさん
04/12/06 01:55:25ID:???そりゃあんたが、SJISで送信し、SJISで処理し、SJISで出力するって環境だからだ。
convertの必要はない。
半角カナが化けるのは、convert(の内部で行ってるgetcode)が半角カナをsjisだと判定できないからだ。
getcode単独で呼んで見ろ。多分undef(判定不能)になる。
なので、ネット探してもうちょいマシなgetcodeを使って文字コード判定を行い、
convertに変換元の文字コードもちゃんと指定すれば良い。
0104nobodyさん
04/12/06 02:10:02ID:OXb69TxYブラウザに表示するCGIを作りかけてたんだけど
「Content-Type ヘッダが正しくありません」ってエラーが出るのです。
どこで間違えてるのかわからんので
とりあえず画像を読み込んで表示するだけのスクリプト書いたんだけど
やっぱりContent-Typeのエラーが出ます…
すみませんが、違う目で見てはくれませんか。
#!/usr/bin/perl
use strict;
use Image::Magick;
my $image = Image::Magick->new;
my $file = "hyousyou.gif";
$image->Read($file);
$image->Emboss(radius=>2, sigma=>1);
print "Content-Type: image/gif\n\n";
binmode STDOUT;
$image->Write('gif:-');
undef $image;
exit;
0105nobodyさん
04/12/06 02:11:34ID:OXb69TxY0107nobodyさん
04/12/06 11:29:27ID:???jcode.pl を正しく使えば、半角カナも正しく処理できる。
その手元の本の言っていることも、正しく使った場合の話だろう。
ただ現実には正しく使えてないことが多いかもしれん。
jcode.pl には、getcode と言って、
文字列のコードが sjis か euc か jis かを判定する関数があるのだが、
半角カナを含む文字を食わせると、この関数が誤判定を起こす。
一方 jcode.pl の convert 関数は、第三引数を省略すると、
getcode を使って入力文字列のコードを判定して、その上で変換を行なう。
入力文字列に半角カナが交じっていると、判定をしくじるので、変換にも失敗する。
入力文字列のコードがわかっていれば、
それを convert の第三引数に指定することで、正しく変換できる。
まあ「わからないから jcode.pl を使う」というケースが多いとは思うけど。
誤判定の問題は jcode.pl の責任ではない。
半角カナを含む文字列のコードを100%正しく判定することは原理的に不可能。
半角カナ対応の改良版 jcode.pl も出回っているが、
それも常に正しく判定できるわけではなく、
「たいていの場合正しく判定できる」と言うのが正しい。
POSTデータの文字コードを判別したい場合、
半角カナを含まない文字列を form に hidden で埋め込んでおいて、
そちらを getcode で判定して、
というのがベストなやり方だと思う。
0108nobodyさん
04/12/06 12:42:33ID:ZIRw4PTvpealでカウンターを作ったのですが、これをimgタグで呼び出すには
どういったタグを使えば良いでしょうか?
初心者丸出しの質問ですみません。
0110nobodyさん
04/12/06 12:44:16ID:ZIRw4PTv#!/usr/local/bin/perl
$num=&getCount;
print "content-type:text/html\n\n";
print "<html><head><title>count.cgi</title></head><body>";
print "<center>";
print "訪問者数は<b>$num</b>人です";
print "</center>";
print "</body></html>";
exit;
#------------
sub getCount{
my($num);
open(FH,"+<count.txt")
|| open(FH,"+>count.txt");
flock(FH,2);
$num=<FH>;
chop($num);
$num++;
seek(FH,0,0);
print FH "$num\n";
flock(FH,8);
close(FH);
return $num;
}
やってみたタグは
<IMG SRC="count.cgi" WIDTH="1" HEIGHT="1" BORDER="0">
でしたが、できませんでした。
おねがいします。
0111nobodyさん
04/12/06 12:48:35ID:???0112nobodyさん
04/12/06 12:50:53ID:???でも、Perlのソース見るとテキストのだよな。
テキストでカウンタを呼ぶんなら、CGIはJavascriptを出力して、
print <<"EOF";
<!--
document.write("$count");
//-->
EOF
HTMLでは
<SCRIPT type="text/javascript" src="http://www.hoge.com/counter.cgi"></SCRIPT>
と書いてCGIによって出力されたJavascriptを呼べばいける。
0113nobodyさん
04/12/06 13:16:41ID:???0115nobodyさん
04/12/06 22:49:06ID:???POSTに半角カナ以外の文字を入れて判別させる
方法をやりたいのですが、どのように書けばよいのか分かりません。
デコードは、&で切り、foreachさせた中でunpackし半角から全角にしています。
このままでは、判別用の文字はsjis、半角を入れた方はeucになってしまいます。 どう書けばいいですか?
0116nobodyさん
04/12/06 23:23:44ID:???0117JAPU
04/12/06 23:26:56ID:???質問する際には,わかっていない状態で中途半端な説明をするよりも,1. どのような動作を意図して 2. どのようなコードを書いて 3. どのような結果になったか を書くと良いです。
>> 107 氏の方法は,多くのブラウザの実装ではフォームのすべての値が同じエンコード(文字コード)とすることを利用しています。
絶対に1バイトカナ(所謂半角カナ)を含まないダミー文字列を入れておくことで,
ダミー文字列の文字コード判定 → その得られた文字コードはすべてに適用できる
とすることができるのです。
URIアンエスケープ(所謂デコード)処理された結果が %CGI に入っていると仮定して話をすすめると。
1. FORM には以下のタグを入れておく
<input type="hidden" name="_dummy" value="萌え">
2. Perl中で $CGI{_dummy} を利用して文字コードを判定させる。Jcode の getcode を利用しても良いし,
以下のようにバイト列と比較しても良し。
if($CGI{_dummy} eq "\xCB\xA8\xA4\xA8") {
$enc = "euc";
} elsif($CGI{_dummy} eq "\x96\x47\x82\xA6") {
$enc = "sjis";
} elsif($CGI{_dummy} =~ /\e\$/) {
$enc = "jis";
} elsif($CGI{_dummy} eq "\xE8\x90\x8C\xE3\x81\x88") {
$enc = "utf8";
} else {
$enc = undef;
}
0118nobodyさん
04/12/07 01:58:03ID:nhrA0njE画面のスクロールに追随する形で、画像も上下にスクロールさせる方法はありますでしょうか?
具体的には↓のトップに戻る▲画像のようにしたいのですが、ソースを見てもいまいち分かりません。
http://www.corum.jp/news/notice_list.asp?Gubun=1
お手数ですが、どなたかご教授お願いいたします。
0121nobodyさん
04/12/07 08:52:18ID:???0122nobodyさん
04/12/07 11:44:26ID:yCx6Q2sbモジュールのインスト等を行わずに使えるファイル格納方法で
何かお勧めの方法があったら教えてくださいまし。
私はハッシュ形式でぶち込むくらいしかわからないのので・・・。
0123nobodyさん
04/12/07 11:57:17ID:???これをサーバーに上げる場合、パーミッションをCGIは755、ログファイルとかは666などに設定しますが、
そのCGIが動作しているディレクトリのパーミッションというのはいくつにすればいいのでしょうか。
利用しているサーバーは@niftyのものなのですが、ディレクトリを作成すると勝手に755にパーミッションが変えられてしまいます。
CGIが動作するディレクトリのパーミッションは、どこのサーバーでも755にしておけば問題無いのでしょうか。
0124nobodyさん
04/12/07 13:44:29ID:???状況次第。
・CGI がどのユーザ権限で動くか (suExec など)
・グループが自分およびCGI実効ユーザを含むか
などによって違ってくる。
そのパーミッションが何を意味するのか全く理解しないまま
とにかくこうすれば大丈夫という「おまじない」的な設定を求める人は多いが、
そういう態度にはあまり感心できない。
例えばログファイルを 666 にするのははっきり言ってヤバ過ぎ。
しかし suExec してないサーバだと他に方法がないのでやむを得ずそうする。
そういうことを理解してないってのは、良くないと思うんだがなあ。
0125nobodyさん
04/12/07 18:06:49ID:9m/DtIcc>例えばログファイルを 666 にするのははっきり言ってヤバ過ぎ。
詳しくお願いします。
0126nobodyさん
04/12/07 18:11:43ID:???詳しく
0127nobodyさん
04/12/07 18:33:48ID:???0128JAPU
04/12/07 18:52:29ID:???「自分以外も読み書きできてしまうから。」
これ以外に言うことはあるかな?
一般論として述べれば,データがそのサーバ上にいる誰にでも読み書き出来てしまう (world readable, world writable) のは危険です。
よく分からない人はセキュリティ関係の本1冊読んで。プログラムを書くなら,本来その程度は知っておくべきなので。
0129nobodyさん
04/12/07 19:21:34ID:???0130nobodyさん
04/12/07 19:25:35ID:???状況次第。
・CGI がどのユーザ権限で動くか (suExec など)
・グループが自分およびCGI実効ユーザを含むか
などによって違ってくる。
0131nobodyさん
04/12/07 19:41:34ID:???0132nobodyさん
04/12/07 21:47:52ID:y618AvxhURLに含まれる値をそのまま利用する場合(***.php?id=aaaなどです)
$a = $_GET['id'];
とするとエラーになり、
$a = $_GET[id];
とすると$aにaaaが代入されます。
エラーが出ず、思ったとおりの動きをしてくれるのですが
シングルクォーテーションがある場合とない場合の違いは何でしょうか。
0133nobodyさん
04/12/07 21:59:15ID:bPzR9R/iローカル環境でテストしてます。OSはWindowsXPです。
Webサーバがapacheでは正常に動作するのですが、
IISにするとtie関数でエラーになります。
何が悪いのでしょうか。
レンタルサーバがIISなので、IISで動作させたいのです。
以下が簡略化したプログラムの一部です。
4行目のtie関数でIISでのみエラーが発生します。
use SDBM_File;
use Fcntl;
my %DB;
tie(%DB,'SDBM_File' , "data" ,O_RDWR|O_CREAT, 0644) or die;
0134nobodyさん
04/12/07 22:40:57ID:xwKFeRfzやっぱり言語を1から学んだほうがいいですか?それとも必要な部分を学だけで充分ですか?
時間、期限はそれなりに余裕があります。
0135nobodyさん
04/12/07 22:50:04ID:???私の釣りはどれでしょうww
0136nobodyさん
04/12/07 22:58:25ID:???何のエラーか知らんけど、大抵、IISでは相対パスはダメじゃない?
フルパスなり、レン鯖ならユーザディレクトリのトップからのパスを指定してみたら?
0140nobodyさん
04/12/07 23:11:31ID:???質問してしばらくしてリロードしたら答えもらえないなと思った…(´・ω・`)
とりあえず勉強中なのでいずれ分かるかもしれんです。
0143nobodyさん
04/12/07 23:43:47ID:s930U2tg漏れもまだ始めたばかりだけど、そんなことばっかり。
とりあえず、思ったとおり動けばいいじゃん。
0144nobodyさん
04/12/07 23:48:01ID:???5から変わった。
そんなもんだ。
0145nobodyさん
04/12/08 00:14:50ID:???〃∩ ∧_∧ 定数と区別するために、
⊂⌒( ´・ω・)く 「連想配列の添字の前後は常に引用符で括る必要があります」
`ヽ_っ⌒/⌒c とマニュアルに書いてあったでつ。
別の場所に原因があるのかもね。
0146132
04/12/08 02:41:46ID:???ありがとうございます。さっきからずーとやってるんですが分かりません。
ちなみにphp4.3.6です。
別のとこに原因…ですか。調べるのに1日かかりそうです…
0147nobodyさん
04/12/08 02:45:22ID:???0149nobodyさん
04/12/08 13:10:13ID:pdxf7oGjフルパスにしたらエラーが出なくなりました。
レス頂いた方々、ありがとうございました。
勉強になりました。
0150nobodyさん
04/12/08 13:41:31ID:???プログラムに直接書けばいいのですか?
0153nobodyさん
04/12/08 15:04:57ID:ZAvIRidH<a href="test.cgi?pass=$pass">TEST</a>
例えば、上記の様にHP上でリンクから値を引き回すとURLに
http://www.*****.com/cgi-bin/test.cgi?pass=***
の様に値が表示されてしまうのはどの様にして回避すればよいですか?
すべてsubmitボタンにしてhiddenにするわけにもいかないので。
0155nobodyさん
04/12/08 15:53:26ID:ZAvIRidH回答ありがとうございます。
Javascriptでそんなやり方があるとは知りませんでした。
記述等詳細はJavascript板で聞いた方が良いですか?
0156nobodyさん
04/12/08 15:58:12ID:???0157nobodyさん
04/12/08 16:55:29ID:ZAvIRidH上記の質問の記述と似たようなソースの説明があるサイト等をご存知ないでしょうか?
ググッてみたものの、良いサイトが見つからなかったので、
もし156氏が宜しければ教えてください。
0158nobodyさん
04/12/08 17:02:57ID:???0159nobodyさん
04/12/08 17:14:36ID:ZAvIRidHJavascript板で質問しました。
0161nobodyさん
04/12/08 17:40:38ID:ZAvIRidHマルチするつもりではなかったのですが、
スレ違いなのでJavascript板でも聞いてしまいました。
すいませんでした。
0162nobodyさん
04/12/08 18:25:12ID:???0163nobodyさん
04/12/08 19:06:33ID:ZAvIRidH少しは落ち着いたらどうですか?
0166nobodyさん
04/12/08 22:59:19ID:+AeusHNjオンクリックでjavascriptでごにょごにょしてポストするってことですよね?
0167nobodyさん
04/12/09 00:16:54ID:DwO4pp5GVIP 男前代表をパペットマペット1位にしちゃう パート3
http://ex7.2ch.net/test/read.cgi/news4vip/1102507871/
↑のスレにて只今日テレの不正スクリプトを暴くスーパーハカーを募集中!
0168nobodyさん
04/12/09 00:22:48ID:???phpの設定をいじろうと
php_flag magic_quotes_gpc off
と記述したのですが、いくらやっても500エラーが出てしまいます。
Options Includes ExecCGI等を記述などは利くので、
間違いなく.htaccessへの記述は有効なのですが、
php関係の設定のみ記述できないという可能性はありますか?
それともたんなる私の記述ミスなのでしょうか?
0169nobodyさん
04/12/09 01:51:03ID:???0171名無しさん
04/12/09 05:11:22ID:aEgBfSzeをダウンロードして
ttp://taisen.mycom.co.jp/taisen/
ボタン”対局室に入る”
というようにwebページ上からゲームを起動するには
どうすればよいのでしょうか?
どんな技術が使われているのかわからないので
検索にも困ってます。
どうぞおしえてください。
0172nobodyさん
04/12/09 05:35:22ID:???Apache は設定できる項目を制限できるので PHP の設定を変更できない可能性はある。
.htaccess 許可してるならそのへんも許可してるとは思うが……
まぁそのへんはレンタル鯖の仕様を見れ。自宅鯖じゃないんだろ?
とりあえず Apache モジュールの PHP じゃなくて CGI 版の PHP だったらエラーになるだろうから確認しれ。
<IfModule mod_php4.c> ←PHP 5.x.x ならmod_php5.c な。
php_flag magic_quotes_gpc off
</IfModule>
これで 500 が出なければ CGI 版だろ。
0174nobodyさん
04/12/09 17:43:12ID:HVrzYjrs最初の投稿は管理者だけができて、ゲストはレスのみができる、無料画像掲示板(公開日記)はありませんか?
よろしくお願いいたします。
0175nobodyさん
04/12/09 17:44:50ID:???板違いなので↓へ
【CGI】こんなCGI探してますver.15
http://pc5.2ch.net/test/read.cgi/hp/1097762828/
0177nobodyさん
04/12/09 18:16:45ID:HVrzYjrs見つけました。http://www.kooss.com/diary/
0178nobodyさん
04/12/12 14:43:07ID:k9kQIdnE仕方がないので、HTML出力するものを文字列として$mojiに保存して、
クッキー出力後に、
print"$moji";
をしています。
結果としては正しい物が出力されるのですが、普通はこのようなやり方をするのでしょうか?
また、この方法だとprintf出力ができません。
何かいい方法は無いでしょうか。
0180178
04/12/12 16:32:41ID:k9kQIdnE0181nobodyさん
04/12/12 16:50:12ID:???一時ファイルで保存しといてファイル渡しにするとか、
やりかたはいろいろ考えてみるよろし。
0182nobodyさん
04/12/12 17:05:39ID:???サーバから渡すクッキーはレスポンスにヘッダとして
出力しないとダメだから、HTMLより先に出力する。
1.クッキーを作って出力。
2.HTMLを作って出力。
1.と2.を同時にこなす必要はないし、
間に別の処理を挟んでも構わないという話じゃないの?
0183178
04/12/12 17:17:18ID:k9kQIdnEクッキーに出力の内容が、今回の処理の結果。
だから1よりも前に処理が必要ということです。
0184182
04/12/12 17:59:04ID:???演算結果は変数に入れる。
通常、結果は一つのスカラー変数に収まらないから、
ハッシュに入れておいて、リファレンスで引き回す。
必要なら配列も使う。
人によっては、オブジェクト指向プログラミングで、
オブジェクトを引き回すかもしれない。
そして、HTMLを作る段階で、そのデータを使う。
…という話?
# あと、ム板とマルチポストしてんのね。
0185nobodyさん
04/12/12 18:26:27ID:???放置放置。
0186nobodyさん
04/12/12 18:48:11ID:???0187nobodyさん
04/12/12 18:52:22ID:???CGIの機能を果たすやつ。
> ローカルサーバーがうまく動きません
うちの今日の晩御飯もうまくなかったです。何を足せばいいですか?
0189nobodyさん
04/12/12 22:45:28ID:???0190nobodyさん
04/12/13 00:47:48ID:???いい気分じゃないんだが、何が変わったんだろう。
体質?
0191nobodyさん
04/12/13 05:56:57ID:???設定された時間後(例えば1日後)あるIPが再びカウント対象になる場合、
普通そのcgiはアクセス時にリアルタイムで新規かチェックするのですか?
それとも一旦環境変数を保存してアイドル時に新規かどうか調べるのですか?
厨房な質問で申し訳ありません。どなたかご存知の方、教えてください。
0192nobodyさん
04/12/13 06:58:41ID:???0194nobodyさん
04/12/13 13:16:16ID:???0195nobodyさん
04/12/13 16:34:13ID:???確かに「アイドル時に新規かどうか調べる」のは仰る通りCGIではありません。
>>192
大抵の場合はアクセス時にリアルタイムでチェックしておりますよね。
そもそもなぜこのような質問をしたかと言うと、瞬間的な多くのアクセスを
CGIで裁ききれなくなる事はあるのかな、と不安に思ったからです。
もう少し具体的にいうと、単純なhtmlにせよ、phpにせよ、
CPU時間はリクエスト頻度にほぼ比例しそうですが、
比較対照のIPがアクセスと共に増大するため、
既存のIPかどうかのチェックは(下手なアルゴリズムを書いてしまうと)
リクエスト頻度の2乗にほぼ比例しそうですよね。
実際のところどういうアルゴリズムで書いているのか気になったのです。
0196nobodyさん
04/12/13 16:54:32ID:???それほどコストはかからないでしょ。
君の関心は、ハッシュのアルゴリズムにあるかと。
0197nobodyさん
04/12/13 17:25:22ID:QbByJwYm確かにそのとおりですね、ハッシュのアルゴリズムに全てがかかってそうです。
#連想の変数名はインデックス化しているのかなぁ、と思ってみたりして。
でも仰る通り、「それほどコストはかからない」なら問題ないのですね。
最近のコンピュータはなんだかんだいって意外に速いですからね。
#「それらが積もって問題が生ずる規模のサイト」は実在するだろうか……
0199nobodyさん
04/12/13 21:05:00ID:???ところでperlCGIを一から学べるユートピアHPはないかね?
0200nobodyさん
04/12/13 21:09:04ID:???0201nobodyさん
04/12/13 22:32:28ID:???■ このスレッドは過去ログ倉庫に格納されています