【Perl】初心者コーナー Part13
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0175nobodyさん
02/06/07 15:14ID:???「Perlでできますか?」と聞いてるから問題はない。
「JavaScriptならできるから、そっちで聞け」と答えているなら、それも間違いではない。
「Perlではできない」とだけ答えるよりむしろ親切。
0177nobodyさん
02/06/07 20:59ID:???$EUC_JP_ = '[\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8E[\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = ($str =~ /($EUC_JP_)/g);
よくわからんがこういうことかな?
0178nobodyさん
02/06/07 21:02ID:???質問が意味不明です。
だが、とりあえずここ逝け
http://www.din.or.jp/~ohzaki/perl.htm
0179nobodyさん
02/06/07 23:13ID:VaB1XovqDelphiのような総合開発環境がないので、どこが悪いのか探すのだけで直ぐ数時間ふっとびます・・・
効率のいい手法などあるのでしょうか?
0180nobodyさん
02/06/07 23:28ID:zKprkcjg古典的だがprintデバグ(wara
dieとか使えばデバグが楽になるらしいよ。
0181nobodyさん
02/06/07 23:31ID:???まずは
perldoc perldebug
当然-wスイッチとuse strictは必須
で、デバッグ機能としては…
perl -d script.pl # ビルトインCUIデバッガ
perl -d:ptkdb # GUIデバッガ Devel::ptkdbをインストールする必要あり
perl -d:Dprof script.pl ; dprofpp # Devel::Dprof プロファイラ
perl -MO=Deparse script.pl # オプティマイズの様子を見る ただしかなり不完全
ざっと見てこんなもんかな。
0183nobodyさん
02/06/08 00:24ID:???かったんで実験したら、コンマで繋ぐと上手く行くことがわかった。
例:open() or print "エラーしますた\n", return;
このコンマの意味って、Perl的にどういう意味?
0184nobodyさん
02/06/08 00:35ID:???コンマ演算子は式を左から順に評価し、最も右の式の値を返す。
voidコンテキストだと単に左から順に式を評価するだけ。
print("a"), print("b")
これはprint("a")を実行した後、print("b")を実行せよ、ということ。
ただし>>183は少し違う。
この場合はprintを"エラーしますた\n"とreturnの返り値の二つの引数で呼び出している。
ただしreturnは値を返さず呼び出し元に戻るから、"上手く行く"はずはないんだが…
0185age
02/06/08 00:49ID:???$count++;
の時は1ずつ上がっていたのに
$count+10;
にすると10ずつ上がるどころか全くカウンターが変わりません、
何かやりかたあるのでしょうか?
0186nobodyさん
02/06/08 00:57ID:???即レスどうもです。ラクダ本のコンマ演算子は読んだんですが、
左から順に評価し、は、実行すると言う意味なのね。
ちなみに、昨日の事を記憶で書いたので、今見直したら return
じゃなくて print, redo LABEL;でした。return は実験したか
記憶に無い。鬱
0189nobodyさん
02/06/08 11:45ID:R0Gdpaab何をやってもIPアドレスの方が取得されてしまいます。
$host = $ENV{'REMOTE_HOST};
これ一行だけにすると、何も取得出来ず・・・。
サーバがそういう設定にしているのか・・・。
どうすればいいのでしょうか?
0190nobodyさん
02/06/08 11:46ID:???サーバーの設定によっては使えない。
0191nobodyさん
02/06/08 11:48ID:R0Gdpaab返答ありがとうごさいます。
今使っているところは米tripod、あそこはダメか・・・
0192nobodyさん
02/06/08 11:48ID:???if ( $ENV{'REMOTE_HOST'} ne '' ) {
$host = $ENV{'REMOTE_HOST'};
}
else {
$host = $ENV{'REMOTE_ADDR'};
}
0193nobodyさん
02/06/08 11:58ID:R0Gdpaabそのように設定して、自分のリモホを見たら
10.10.17.178とか表示されました・・・。
どこのIPだ。しかも表示させたいのはリモートホストだし。
tripod逝ってよし
0194nobodyさん
02/06/08 12:03ID:R0Gdpaabこれはサーバの設定だな。
tripodは諦めます。
0195pear ◆FRUIT8pk
02/06/08 14:31ID:???XREAなら gethostbyaddr 関数でホストが取れたと思う。
0196nobodyさん
02/06/08 14:41ID:???全角カナ−>ひらがなへの変換は出来ないのでしょうか?だれか教えて下さい。
0197nobodyさん
02/06/08 14:43ID:JsVHaVnY$addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
if ($host eq "") { $host = $addr; }
0198nobodyさん
02/06/08 15:27ID:???jcode.plならtr関数が使えたと思う。
jcode::tr(\$str, 'ァ-ン', 'ぁ-ん');
もしかしてShift_JISには未対応だったかも。
だめだったら自分で変換用のハッシュでも定義して変換しる。
0199196
02/06/08 16:52ID:???返答ありがとうございます。
jcode.plのソースには「Code must be JIS or EUC」とあったので
&jcode'sjis2euc(*ss);
&jcode'tr(*ss, 'ァ-ン','ぁ-ん');
&jcode'euc2sjis(*ss);
こう記述したのですが無理でした。
もしかしてとんちんかんな事を書いてますか?
0201nobodyさん
02/06/08 18:11ID:???199+200の考えでいいと思いますよ。
'ァ-ン', 'ぁ-ん'をEUC-JPの文字コードで書けばいいんじゃない?
&jcode'tr(*s, "\xHH\xHH-\xHH\xHH", "\xHH\xHH-\xHH\xHH");
HHのとこは16進の文字コードで。
0202nobodyさん
02/06/08 19:18ID:Z1wnMQCd上の"1" "2" "3"を一つの()内にまとめる書き方ありますか?
0203nobodyさん
02/06/08 19:44ID:???簡単な方法は、無い。
1,2,3...が多い場合は、ハッシュを使えば若干パフォーマンスは上がるかもね。
use constant true => 1;
%tbl = (
1 => true,
2 => true,
3 => true,
);
if($tbl{$x}){ ... }
0204196
02/06/08 19:51ID:???有り難うございます。早速やってみたところ
カタカナとひらがなを相互に変換してしまいます。
カタカナはひらがなへ、ひらがなはそのままにしたいのですが…
&jcode'sjis2euc(*ss);
&jcode'tr(*ss, "\xa5\xa1-\xa5\xf3", "\xa4\xa1-\xa4\xf3");
&jcode'euc2sjis(*ss);
0205nobodyさん
02/06/08 22:37ID:???第2土曜7時、みたいな感じで・・・
0208nobodyさん
02/06/09 00:27ID:???悶えてるんですか?
ハァハァ・・・・
0210nobodyさん
02/06/09 00:57ID:???サンプルなどを見て研究していたのですが、仕組みがよくわかりません。
ファイルを指定する→送信ボタンを押す→指定したフォルダにファイルが保存される
という一番シンプルなソースコードを、どなたか示していただけませんでしょうか。
0211nobodyさん
02/06/09 01:11ID:???ttp://tohoho.wakusei.ne.jp/lng/199808/98080055.htm
これが参考になるかな?
0212Darkness Tester
02/06/09 10:17ID:???DL・解凍したのはいいのですが、どうすればいいのでしょうか?
0213nobodyさん
02/06/09 10:43ID:???"3 + 5 は?"などと返し、
続いて"8"を入力すると"正解"と返すa.exeがあるとします。
このa.exeをPerlスクリプトから
実行するにはどのようにするのでしょうか?
0215nobodyさん
02/06/09 11:28ID:???配布元サイトで聞く。
大体は配布場所に書いてあるだろう。
少なくともこのスレで聞くのは間違い。
0216nobodyさん
02/06/09 21:05ID:TDG2uPpc板違い。初心者板池
0217nobodyさん
02/06/10 17:07ID:???1.ロック処理
カウントファイルを参照できない場合ロックしたまま解除しない。
2."$count_file"を、うまく参照しない。
例)$count_file = "./count.dat"; OK
$count_file = "dat/count.dat"; NG
###################################################
sub count {
#-日時
&form_decord;
#-ホスト
&get_HostAgent;
#-バックアップ用のファイルを開く
open(IN,"$count_file") || &error("カウントファイルエラー");
$ac_data = <IN>;
close(IN);
($ac_count,$ac_ip,$ac_today,$ac_yes,$ac_day) = split(/\t/, $ac_data);
#今日/昨日のアクセス数の設定
if ($mday ne $ac_day) {
$ac_yes = $ac_today;
$ac_today = 0;
}
#-ロック開始
&lock1;
0218nobodyさん
02/06/10 17:08ID:???#-2重カウント許可
if ($bak_ip){
$ac_count = $ac_count + 1;
$ac_today = $ac_today + 1;
}
#-不許可(IPアドレスで判断)
elsif ($ac_ip ne $Addr) {
$ac_count = $ac_count + 1;
$ac_today = $ac_today + 1;
}
#-ファイルに書き込む
open(IN,">$count_file") || &error("カウントファイルに書き込むことができません。");
print IN "$ac_count\t$Addr\t$ac_today\t$ac_yes\t$mday";
close(IN);
#-ロック解除
&lock2;
}
どこがおかしいでしょうか??
0219nobodyさん
02/06/10 17:42ID:???ロックに問題があるのに、その部分のサブルーチンは出さないわけ?
0220nobodyさん
02/06/10 18:02ID:???【リテラル】で指定しよう
$count_file = './count.dat'; OK
$count_file = 'dat/count.dat'; OK
0221nobodyさん
02/06/10 18:39ID:???>#-日時
>&form_decord;
カウンタにデコードはいりませんよね・・?(しかもdecodeのつづりがまちがってる)
おそらくBBSかどっかからのコピペでしょうか。
自作の前にまずはKENTさんのソースをよく読みましょう(Perl神ですので)
http://www.kent-web.com/count/index.html
0222nobodyさん
02/06/10 18:45ID:???$count_file = './count.dat';
これが原因でした。参照できない場合でもerror後ロック解除できました。
アリガトウございます
0224pear ◆FRUIT8pk
02/06/10 22:05ID:???壊れることってどれくらいあるんですか?
0225nobodyさん
02/06/10 22:30ID:???運次第。
あと、人気次第。
要するに「同時アクセスが発生するか否か」の問題だから、運が悪ければ
たった二人の来客でもファイルが壊れるし、運がよければ数兆のアクセスが
あっても壊れない。
しかし、アクセスが多ければ確率的にその事故は起こりやすくなる。
ついでに言うと、コーディングの話じゃないからスレ違い。
0226151
02/06/11 03:57ID:zdO5gL3p>>155さんや>>158さんが新しい問題をくださいまして、またどうしても分からな
くなったので質問です。
今回は『return』についてです。
$year = "2000";
$month = "2";
@MONTHS = qw/0 31 28 31 30 31 30 31 31 30 31 30 31/;
$MONTHS[$month] = &feb($year, $month);
print "$MONTHS[$month]\n";
sub feb {
my ($year, $month) = @_;
if ($month == "2" and &rule($year, $month)) { return 29; }
else { $MONTHS[$month]; }
}
sub rule {
my $year = shift;
return (($year%4) == "0" || ($year%100) != "0" and ($year%400) == "0");
}
サブルーチンからのreturn返り値はどこに戻るのでしょうか。
とりあえず出力するために$MONTHS[$month]に代入することにしましたが、もっ
とシンプルな方法はあるんですか?つまり3行目に示したように代入する先を
$MONTHS[$month]と指定しなくてもよい$_のような特殊変数があるとか…。
また、>>155さんは以下のようにreturnを三つも使っておられますが、この文だ
と結局閏年であってもそうではなくても返り値は0、すなわちこの処理の場合は
常に『偽』が返ると思うのですが、間違ってますか?
sub leap_year {
my( $year, $month ) = @_;
if( $month == 2 && $year % 4 == 0 ) {
if( $year % 100 == 0 ) { return $year % 400 == 0;}
return 1;
}
return 0;
}
0227nobodyさん
02/06/11 05:28ID:???> 常に『偽』が返ると思うのですが、間違ってますか?
return $year % 400 == 0; は、まぁ置いといても、
return 1; を無視するのはなぜ?
0228nobodyさん
02/06/11 05:48ID:???0229nobodyさん
02/06/11 06:10ID:???>return返り値はどこに
&feb($year, $month); と &rule($year, $month)のトコ
>シンプルな方法
print feb($year, $month);
>returnを三つも
returnで返した時点でサブルーチンはオシマイ
0230pear ◆FRUIT8pk
02/06/11 07:13ID:???丁寧にどうもありがとうございます。。
スレ違い。。確かにそうですね、今後気をつけます。。
0231nobodyさん
02/06/11 09:29ID:???間違ってます。
前に書かれたけど、月の値は意味がないからそれさえ省けば
ちゃんと閏年を返すよ。
## まず月を抜かして・・・
sub leap_year
{
if( $year % 4 == 0 ) {
if( $year % 100 == 0 ) {
return $year % 400 == 0;
}
return 1;
}
return 0;
}
foreach my $year ( qw/ 1900 1940 1980 1995 2000 2002 2004 / ) {
print "$year = ";
print leap_year($year) ? "leap year\n" : "NOT leap year\n";
}
0233nobodyさん
02/06/12 07:36ID:???0236
02/06/12 11:39ID:R7g7sR2Xアップロードさせたいのですが、
6KBぐらいの小さいファイルだとアップ
できるのですがそれ以上大きいのだと
アップロードできず、IEだと「ファイルが
見つかりません」のエラーになります。
# ちなみにSSLでなくても120KBまでしか
# だめなようです。
同じような問題にあたった方いらっしゃいますか?
0237nobodyさん
02/06/12 16:38ID:NJerhR65月の最後の日が簡単に分かる関数がありますでしょうか?
ありましたら教えて頂きないでしょうか?
また、ない場合は、一番サーバーに負荷を掛けずに(軽い)同じ動作を
させるにはどうすればよいか教えて頂けないでしょうか?
自分なりにも考えてみました。
for ( $i = $mday ; ; $i++ ) {
( $k_sec , $k_min , $k_hour , $k_mday , $k_mon , $k_year , $k_day ) = localtime( time + $i * 24 * 3600 );
if ( $k_mon != $mon ){
last;
}
}
0238237
02/06/12 16:40ID:NJerhR65うるう年は、考えることとします。
そうでなければ、31日の月と30日の月、28日の月と3つに分けてしまえば
簡単にできてしまいます。
よろしくお願いします。
0239nobodyさん
02/06/12 16:41ID:???まず、うるう年をどうするか。
はっきり言って、配列にでも月ごとの日数を入れるのが一番軽い。
@monthday = (0,31,28,31,30,31,30,31,31,30,31,30,31);
これにうるう年の処理を加えるだけ。
わざわざスクリプトに計算させる必要性はあるのか?
宿題とか?
0240nobodyさん
02/06/12 16:42ID:???じゃあ、うるう年をどう考えるのか。
今年の2月の日数で求めるのか。
去年の2月の日数を求めるのか。
指定した年の2月の日数を見るのか。
0241237
02/06/12 16:43ID:NJerhR65どうもです。
その月の最後の日(日数)を知ることができる関数が知りたかったです。
それがあれば、一番簡単ですから・・・。
でも、ないようですので、 >>239の方法が一番よいようですね。
0242237
02/06/12 16:45ID:NJerhR65「今」の月の日数を知りたいです。
あと、用途は、プログラムを組んでいて、月の最後の日の23時〜24時だけは
違う画面を表示させるというものです。
0243nobodyさん
02/06/12 16:49ID:???$day = $monthday[$mon];
if($mon == 2 && $year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)){
$day = 29;
}
print qq($year $mon/$day<br>\n);
関数はないからこれが一番簡単かな?
しかし、>242のいうのならもっと簡単。
( $k_sec , $k_min , $k_hour , $k_mday , $k_mon , $k_year , $k_day ) = localtime(time);
@localtime = localtime(time+3600);
if($localtime[4] != $k_mon){
print qq(違う画面);
}
月の最後の1時間を判定するだけなら、これで十分じゃない?
0244237
02/06/12 17:09ID:NJerhR65どうもありがとうございました。
0245
02/06/13 00:15ID:N23nK9SFところが、デフォルトの登録ユーザーファイルが、usr.datという名前になっていて、そのファイルを決め打ちでアクセスすると、登録している人のemailアドレスが見れてしまうのです。
外部から見れないようにしたいのですが、そのCGIの説明書では、パーミッションは666にしろ、と書いてあります。
660ではだめなのでしょうか。
それか、ファイル名をaoeriuyba8.datとか、暗号のような名前にすればいいかもしれませんが、探検君とかで見つかりそうな気がします。
0246nobodyさん
02/06/13 00:25ID:???拡張子を.cgiにしとけ。
0247nobodyさん
02/06/13 00:29ID:???とりあえず設置鯖の仕様(.htaccess可?)を確認しろや
続きは適切なスレでやれ
0248151
02/06/13 04:13ID:???ヒントを下さった>>227
『exit』と同じようなものと教えてくれた>>229
例を示してくださった>>231
returnの機能のついでに、評価式の作りかた、それによる分岐のさせかたまで勉
強できました。
後は閏年の数字の関係です…。
400が絡むということは必ず100で割り切れるということだから…
うーん。
この辺は自分で解決します。
ありがとうございました。
0249nobodyさん
02/06/13 10:39ID:???一時ファイル(./tmp/*.tmp)を全削除するのに、
opendir(DIR, "./tmp/");
while ($filename = readdir(DIR)) {
if ($filename =~ /\.tmp$/) {
unlink("./tmp/$filename");
}
}
としてみたが、同じ事を Taintモード下で実現する方法ってありますか?
0250nobodyさん
02/06/13 10:58ID:???いいんじゃないの?
if( $filename =~ /^([^.]+\.tmp)$/ ) {
unlink( "./tmp/$1" );
}
0252nobodyさん
02/06/13 23:27ID:gf2d6vJqと
$s =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
って、どういうことをしているんですか?
教えてください。
0253 ◆hRKFl5jU
02/06/13 23:32ID:gf2d6vJq0254レス
02/06/14 00:21ID:nWmgmUzWよく分からないのでここでも質問させてください。
掲示板のレス機能のアルゴリズムについて考えていました。
レスをスレに追加して、そのスレをトップに持っていく処理です。
最適な方法やスマートな方法がありましたら教えてください。
・以下、現在考えているアルゴリズムです。
#ターゲット親記事番号
$targetnum = 1;
#テスト用書き込みレス記事 [記事通し番号,レス件数]
$value = "9,0\n";
my @lines = <DATA>;
#レスを書き込み後スレッドをトップに持っていく
$linecnt = 0;
foreach(@lines)
{
($num,$resnum) = split( /\,/, $_ );
if ( $targetnum == $num ){
@sure = splice( @lines, $cnt+1, $resnum ); $resnum++;
unshift( @sure, "$num,$resnum\n" ); push( @sure, $value );
unshift( @newlog, @sure );
$linecnt = $linecnt+@sure;
}else{
push(@newlog,$_); $linecnt++;
}
}
print @newlog;
__DATA__
3,2
6,0
8,0
1,2
4,0
7,0
2,1
5,0
0255レス
02/06/14 00:22ID:nWmgmUzW0256nobodyさん
02/06/14 06:21ID:???すべてのレスを1次元配列@linesに入れてガリガリ処理すると
面倒だし、スクリプトも読みにくいと思う。
レスの配列=スレッド、スレッドの配列=掲示板全体
というデータ構造に直すといいんじゃないか。ちょっと書いてみた。
use strict;
my $targetnum = 1;
my $value = "9,0\n";
# ログを読む
my @threadarray;
my %index_of;
while (my $line = <DATA>) {
my ($num, $resnum) = split(/,/, $line);
$index_of{$num} = scalar(@threadarray);
my $thread = [$line];
push(@$thread, scalar(<DATA>)) while (--$resnum >= 0);
push(@threadarray, $thread);
}
#目的のスレッドを切り出し、レスを追加し、配列の先頭に移動
my $thread = splice(@threadarray, $index_of{$targetnum}, 1);
push(@$thread, $value);
my $resnum = (split(/,/, $thread->[0]))[1] + 1;
$thread->[0] = "$targetnum,$resnum\n";
unshift(@threadarray, $thread);
# 出力
foreach my $thread (@threadarray) {
print "-----\n";
foreach my $res (@$thread) {
print $res;
}
}
0257254
02/06/14 07:35ID:nWmgmUzWさっそくありがとうございます。
ソースまで示してくれて感謝。
早速、トレースして理解してみます。
ところで、ログを変更してもいいとしてもこの方法がいいと思いますか?
掲示板には全然手をつけていないので、今ならログ変更はいくらでもOKです。
0258nobodyさん
02/06/14 08:44ID:???そのログ形式(>>255)だと、「レスのない親記事」と「レス」は
どっちも$resnumが0になるような気がするが
どうやって区別すんの?
0259レス
02/06/14 09:31ID:AMkrWmqxおっ指摘してくれてありがとう。
確かに、区別できないですね。
じゃあ resnamは、親記事自体の番号も含めてってことでおねがいします。
0260nobodyさん
02/06/15 00:42ID:???とりあえずその方法で突き進んで、問題あったら変更すればいいんでないの。
そのためにはログフォーマットに依存するコードは極力書かないようにしる。
行をsplitする生のコードをそこら中にちりばめたりすると、後で泣くこと必至。
0261nobodyさん
02/06/15 01:14ID:4GLBjH4Ittp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
をTripodに設置したいんですが、Tripodのcgi規定に
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
とあって、画像保存用ディレクトリimg-boxをcgiと同じ場所に置くことができません。
↓参考のページ
ttp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
も見たんですがうまくいきません。
どうか解決法を教えてください。
0262nobodyさん
02/06/15 01:28ID:???設置場所のディレクトリ構造は?
0263261
02/06/15 01:39ID:4GLBjH4Ittp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
を参考にして、
(url)http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
cgi-binフォルダの中は
imgboard.cgi,file.dat,fileback.dat,icon.dat,jcode_sj.pl,imgsize.pl,index.html
の7つのファイルが入ってて、
cgi-binフォルダと同階層にpublic_htmlフォルダを置いて、
その中に画像保存用ディレクトリimg-boxを置いてます。
0264nobodyさん
02/06/15 01:52ID:???なるほど、、、。
まず、cgi-bin 以下には CGI および データファイルを置くようにしてみてください。
それ以外は、public_html にすべていれるという形態になるのが普通です。
0265261
02/06/15 01:58ID:4GLBjH4Icgi-binフォルダの中にはimgboard.cgi,file.dat,fileback.dat,icon.dat、
public_htmlフォルダの中にはjcode_sj.pl,imgsize.pl,index.htmlおよび画像保存用ディレクトリimg-boxフォルダを
置くというかたちになるんですか?
0266264
02/06/15 02:02ID:???ディレクトリインデックスの隠し用だったようなので すべて cgi-bin
の中で問題ないようです。
0267261
02/06/15 02:11ID:4GLBjH4I>>264
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
ということで、画像保存用ディレクトリimg-boxをcgiと同じ場所に置かず、
投稿画像の格納ディレクトリ($img_dir = './img-box'; # デフォルト位置)を変更しなきゃならないようなんで、
($img_dir = '/public_html/img-box'; # デフォルト位置)に変更したんですがうまくいきません。
cgiは機能してるんですが、画像がアップロードできません。
img-boxフォルダの中をのぞいても何も入ってませんでした。
0268264
02/06/15 02:20ID:???6300 ステップもあったのでゲンナリしました。
まず、画像の表示は単純に imgタグに直接画像パスを書く方法を採っている
ので HTML と CGI の置き場所が別になっているタイプのサーバではこのまま
では動きません。
0269261
02/06/15 02:25ID:4GLBjH4ITripodはcgiを使う場合のURLが
http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
普通のhtmlは
http://members.tripod.co.jp/ユーザー名/
だからHTMLとCGIの置き場所が別になっている訳ですね。
別のサーバー探すしかないか…。
0270264
02/06/15 02:26ID:???$img_dir = '/ユーザ名/public_html/img-box';
0271261
02/06/15 02:43ID:4GLBjH4Iだめでした(爆)。サーバー側の問題?
配布されたcgiに「場所の指定方法は通常は相対パスで指定して下さい」とあったので、
ユーザー名は必要ないのかな?
0272261
02/06/15 02:45ID:4GLBjH4I絶対パスで正解でした。スマソ。
<以下配布されたcgiより>
あなたのプロバイダが、cgiとデータファイルを同じ場所に置くことが出来ない
特殊なプロバイダ(hi-ho等)で、cgiと同じディレクトリやcgi直下に保存
用ディレクトリを作れない場合、絶対パスによる指定が必要となる場合があります。
この場合、5行ほど前にある$img_dirを絶対パス*指定に書換えて下さい。
0273nobodyさん
02/06/15 02:48ID:mydlqxE+それともディレクトリにアップロードするだけでいいの?
0274264
02/06/15 02:55ID:???おそらく imgタグで .. がNGになる可能性あり。
$img_dir = '../public_html/img-box';
または
ソース内で img-box の存在チェックをしているのでWWWサーバのマウントポイント
からの相対パスを使えないのでダメもとでサーバのディレクトリ構造を推測して以下
のように書けばOKかも。
$img_dir = '/home/ユーザ名/public_html/img-box';
■ このスレッドは過去ログ倉庫に格納されています