質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

2839閲覧

perlの学習書のサンプルコードは実行できるが、僕が手入力した実行ファイルはソースがそのまま表示されて原因が分かりません

tada_tadaa

総合スコア111

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2016/05/27 15:57

編集2016/05/27 15:59

お世話になっております。
ただいまperlを学習書を用いて勉強しているのですが、学習書のサンプルコードはレンタルサーバーにアップロードして動くのですが、僕が入力して作成したperlの実行ファイルはレンタルサーバーにアップロードして、ページを表示させると、多分途中まで動いているのではないかと思いますが、HTMLを吐く部分でソースがそのまま表示されてしまいます。ちなみにこの僕が自分で作成した実行ファイルですが、レンタルサーバーではなく、自分のパソコンのLinux上ではきちんとHTMLが表示されます。

改行コードの問題かとも思いましたので、一応エディタで改行コードをLF(UNIX)で保存して、バイナリモードでアップロードしました。しかし相変わらず、ソースが表示されてしまいます。
このソースが表示されてしまうファイル名が「6-4.cgi」という名前ですが、レンタルサーバー上でこのファイルと同一ディレクトリにある「6-3.cgi」という6-4.cgiより少し、コードが少ないcgiファイルは実行できます。

パーミッションの問題かと思いましたのでパーミッションをレンタルサーバーが推奨している値に変更しても駄目でした。

以下にコードの内容を載せます。

perl

1#!/usr/bin/perl 2# 僕が本を見ながら手で入力したコードでファイル名は6-4.cgi 3 4# ===================== ユーザー設定 ============== 5$CHARSET = 'UTF-8'; #文字コード 6$USERFILE = './users.dat'; #ユーザファイル 7$ADMINPASS = 'goma'; # 管理パスワード 8 9# ===================== メインプログラム ========== 10loadFormdata(); 11 12if(not exists $FORM{'adminpass'}){ 13printGatePage(); 14} 15elsif($FORM{'adminpass'} eq $ADMINPASS){ 16 17loadUserfile(); 18 19if($FORM{"mode"} eq "adduser"){ 20addUser(); 21} 22elsif($FORM{'mode'} eq "deluser") { 23deleteUser(); 24} 25printAdminPage(); 26} 27else{ 28printErrorPage("管理パスワードが違います。"); 29} 30exit; 31 32#======================= ユーザー追加 ============== 33sub addUser 34{ 35 my ($name, $pass) = ($FORM{'user'}, $FORM{'pass'}); 36 my ($salt, $saltset, $n1, $n2); 37 38 if(exists $USERS{$name}) { 39 printErrorPage("そのユーザ名はすでに存在しています。1"); 40 } 41 $USERS{$name} = $pass; 42 43 # パスワードの暗号化 44 $saltset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"; 45 $n1 = int(rand 64); 46 $n2 = ($n1 + time) % 64; 47 $salt = substr($saltset, $n1, 1) . substr($saltset, $n2, 1); 48 $pass = crypt($pass, $salt); 49 50 # ユーザーファイル書き込み 51 open(FILE, ">>$USERFILE") 52 or printErrorPage("ユーザーファイルが開けません。1"); 53 print FILE "$name:$pass\n"; 54 close(FILE); 55} 56 57#=========================== ユーザー削除 ============== 58sub deleteUser 59{ 60 my ($key, $name); 61 foreach $key (keys %FORM) { 62 if($key =~ /del_(.+)/) { 63 delete $USERS{$1}; 64 } 65 } 66 67 # ユーザーファイル書き込み 68 open(FILE, ">$USERFILE") 69 or printErrorPage("ユーザーファイルが開けません。2"); 70 foreach $name (keys %USERS) { 71 print FILE "$name:$USERS{$name}\n"; 72 } 73 close(FILE); 74} 75 76# ===================== ユーザーファイル読み込み == 77sub loadUserfile 78{ 79 my ($ln, $name, $pass); 80 81 open(FILE, "<$USERFILE") 82 or printErrorPage("ユーザーファイルが開けません。3"); 83 while($ln = <FILE>) { 84 chomp $ln; 85 ($name, $pass) = split(/:/, $ln); 86 $USERS{$name} = $pass; 87 } 88 close(FILE); 89} 90#======================= 管理パスワードページ出力 == 91sub printGatePage 92{ 93# print "aaa"; 94 print <<END; 95 96Content-type: text/html; 97 98<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 99<html> 100<head><title>ゆーざかんり</title></head> 101<body> 102<h1>ユーザ管理</h1> 103<form acction="aaa" method="POST"> 104管理パスワード:<input type="password" name="adminpass"><br> 105<input type="submit" value="決定"> 106</form> 107</body> 108</html> 109END 110} 111 112#======================= ユーザ管理ページ出力 ====== 113sub printAdminPage 114{ 115 my $name; 116 117 print <<END; 118Content-type: text/html; charset=$CHARSET 119 120<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 121<html> 122<head><title>ゆーざかんり</title></head> 123<body> 124<h1>ユーザ管理</h1> 125<h2>新規ユーザ登録</h2> 126<form action="$ENV{'SCRIPT_NAME'}" method="POST"> 127ユーザ名:<input type="text" name="user"><br> 128パスワード:<input type="password" name="pass"><br> 129<input type="hidden" name="mode" value="adduser"> 130<input type="hidden" name="adminpass" value="$ADMINPASS"> 131<input type="submit" value="登録する"> 132</form> 133<hr> 134<h2>ユーザ削除</h2> 135<form action="$ENV{'SCRIPT_NAME'}" method="POST"> 136<table border="1"> 137<tr><th>削除チェック</th><th>ユーザ名</th></tr> 138END 139 140foreach $name (sort keys %USERS) { 141 print "<tr><td><input type=\"checkbox\" name=\"del_$name\"></td><td>$name</td></tr>\n"; 142} 143 144print <<END; 145</table> 146<input type="hidden" name="mode" value="deluser"> 147<input type="hidden" name="adminpass" value="$ADMINPASS"> 148<input type="submit" value="削除する"> 149</form> 150</body> 151</html> 152END 153} 154 155#============================エラーページ出力======== 156sub printErrorPage 157{ 158 print <<END; 159Content-type: text/html; charset=$CHARSET 160 161<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 162<html> 163<head><title>ゆーざかんり</title></head> 164<body> 165<h1>エラー</h1> 166<p>$_[0]</p> 167</body> 168</html> 169END 170 171 exit; 172} 173 174#========================= フォームデータ取り込み ===== 175sub loadFormdata 176{ 177 my ($query, $pair); 178 179 if($ENV{'REQUEST_METHOD'} eq 'POST') { 180 read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); 181 } 182 else { 183 $query = $ENV{'QUERY_STRING'}; 184 } 185 186 foreach $pair (split(/&/, $query)) { 187 my ($key, $value) = split(/=/, $pair); 188 189 $value =~ tr/+/ /; 190 $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; 191 192 $FORM{$key} = $value; 193 } 194} 195 196コード

次は学習書についてた(実行できた)サンプルコード

perl

1#!/usr/bin/perl 2 3 4#============================ ユーザー設定 ==== 5$CHARSET = 'Shift_JIS'; # 文字コード 6$USERFILE = './users.dat'; # ユーザーファイル 7$ADMINPASS = 'goma'; # 管理パスワード 8 9 10#======================== メインプログラム ==== 11loadFormdata(); 12 13if(not exists $FORM{'adminpass'}) { 14 printGatePage(); 15} 16elsif($FORM{'adminpass'} eq $ADMINPASS) { 17 loadUserfile(); 18 19 if($FORM{"mode"} eq "adduser") { 20 addUser(); 21 } 22 elsif($FORM{'mode'} eq "deluser") { 23 deleteUser(); 24 } 25 printAdminPage(); 26} 27else { 28 printErrorPage("管理パスワードが違います。"); 29} 30exit; 31 32 33#============================ ユーザー追加 ==== 34sub addUser 35{ 36 my ($name, $pass) = ($FORM{'user'}, $FORM{'pass'}); 37 my ($salt, $saltset, $n1, $n2); 38 39 if(exists $USERS{$name}) { 40 printErrorPage("そのユーザー名はすでに存在しています。"); 41 } 42 $USERS{$name} = $pass; 43 44 # パスワードの暗号化 45 $saltset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"; 46 $n1 = int(rand 64); 47 $n2 = ($n1 + time) % 64; 48 $salt = substr($saltset, $n1, 1) . substr($saltset, $n2, 1); 49# $pass = crypt($pass, $salt); 50 51 # ユーザーファイル書き込み 52 open(FILE, ">>$USERFILE") 53 or printErrorPage("ユーザーファイルが開けません。"); 54 print FILE "$name:$pass\n"; 55 close(FILE); 56} 57 58 59#============================ ユーザー削除 ==== 60sub deleteUser 61{ 62 my ($key, $name); 63 64 foreach $key (keys %FORM) { 65 if($key =~ /del_(.+)/) { 66 delete $USERS{$1}; 67 } 68 } 69 70 # ユーザーファイル書き込み 71 open(FILE, ">$USERFILE") 72 or printErrorPage("ユーザーファイルが開けません。"); 73 foreach $name (keys %USERS) { 74 print FILE "$name:$USERS{$name}\n"; 75 } 76 close(FILE); 77} 78 79 80#================ ユーザーファイル読み込み ==== 81sub loadUserfile 82{ 83 my ($ln, $name, $pass); 84 85 open(FILE, "<$USERFILE") 86 or printErrorPage("ユーザーファイルが開けません。"); 87 while($ln = <FILE>) { 88 chomp $ln; 89 ($name, $pass) = split(/:/, $ln); 90 $USERS{$name} = $pass; 91 } 92 close(FILE); 93} 94 95 96#================ 管理パスワードページ出力 ==== 97sub printGatePage 98{ 99 print <<END; 100Content-type: text/html; charset=$CHARSET 101 102<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 103<html> 104<head><title>ゆーざーかんり</title></head> 105<body> 106<h1>ユーザー管理</h1> 107<form action="$ENV{'SCRIPT_NAME'}" method="POST"> 108管理パスワード:<input type="password" name="adminpass"><br> 109<input type="submit" value="決定"> 110</form> 111</body> 112</html> 113END 114} 115 116 117#================== ユーザー管理ページ出力 ==== 118sub printAdminPage 119{ 120 my $name; 121 122 print <<END; 123Content-type: text/html; charset=$CHARSET 124 125<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 126<html> 127<head><title>ゆーざーかんり</title></head> 128<body> 129<h1>ユーザー管理</h1> 130<h2>新規ユーザー登録</h2> 131<form action="$ENV{'SCRIPT_NAME'}" method="POST"> 132ユーザー名:<input type="text" name="user"><br> 133パスワード:<input type="password" name="pass"><br> 134<input type="hidden" name="mode" value="adduser"> 135<input type="hidden" name="adminpass" value="$ADMINPASS"> 136<input type="submit" value="登録する"> 137</form> 138<hr> 139<h2>ユーザー削除</h2> 140<form action="$ENV{'SCRIPT_NAME'}" method="POST"> 141<table border="1"> 142<tr><th>削除チェック</th><th>ユーザー名</th></tr> 143END 144 145 foreach $name (sort keys %USERS) { 146 print "<tr><td><input type=\"checkbox\" name=\"del_$name\"></td><td>$name</td></tr>\n"; 147 } 148 149 print <<END; 150</table> 151<input type="hidden" name="mode" value="deluser"> 152<input type="hidden" name="adminpass" value="$ADMINPASS"> 153<input type="submit" value="削除する"> 154</form> 155</body> 156</html> 157END 158} 159 160 161#======================== エラーページ出力 ==== 162sub printErrorPage 163{ 164 print <<END; 165Content-type: text/html; charset=$CHARSET 166 167<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 168<html> 169<head><title>ゆーざーかんり</title></head> 170<body> 171<h1>エラー</h1> 172<p>$_[0]</p> 173</body> 174</html> 175END 176 177 exit; 178} 179 180 181#================== フォームデータ取り込み ==== 182sub loadFormdata 183{ 184 my ($query, $pair); 185 186 if($ENV{'REQUEST_METHOD'} eq 'POST') { 187 read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); 188 } 189 else { 190 $query = $ENV{'QUERY_STRING'}; 191 } 192 193 foreach $pair (split(/&/, $query)) { 194 my ($key, $value) = split(/=/, $pair); 195 196 $value =~ tr/+/ /; 197 $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; 198 199 $FORM{$key} = $value; 200 } 201} 202 203コード

具体的に何が違って自分の実行ファイルが実行できないのか(ソースが表示されてしまうのか)に興味があります。
ちなみにソースが表示されたときの画面をキャプチャしました。ソースが表示されたときの画面

ほかにも関連がありそうなこととして同一ディレクトリ内に.htaccessファイルがあります。.htaccessの内容は

Options -Indexes
<Files users.dat>
deny from all
</Files>

です。
やはり改行コードが原因かもしれないですが、ちょっと僕のほうではエディタでLFで保存してバイナリモードでアップするくらいしか対処が思い浮かばないです。
どなたか原因を思い当たる方がいれば教えていただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

print "Content-type: text/html; charset=utf-8\n\n";
print <<END;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

以下略
っていう風にしてみてはどうでしょうか?
なんだかContent-typeの前の改行が良くないような気がします。
または、サーバーがutf-8に対応していない可能性も考えて
print "Content-type: text/html;charset=Shift_JIS\n\n";
print <<END;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

というパターンも試してみたいです。

投稿2016/05/27 16:13

oskbt

総合スコア1895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tada_tadaa

2016/05/27 17:13 編集

回答ありがとうございます。 oskbt様のおっしゃった方法で見事HTMLページが表示されました。ちなみに下記のようにしました。 #======================= 管理パスワードページ出力 == sub printGatePage { print "Content-type: text/html; charset=utf-8\n\n"; print <<END; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>ゆーざかんり</title></head> 自分のパソコンのLinux上ではうまく動くのにレンタルサーバーでは文法的に間違ってないっぽいのに動かない原因がちんぷんかんぷんなのですが、とりあえず、 Content-type: text/html; charset=utf-8 はしっかり送っとけというのが今回の質問の大きな収穫だったように思います。 どうもありがとうございました。 追記 >または、サーバーがutf-8に対応していない可能性も考えて 問題が解決されたことを確認しましたし、レンタルサーバーがutf-8で動作していることは確認済みなので、Shift_JISは確認しておりません。
guest

0

ざっと見たところでは、
print <<END;Content-type: text/html; charset=$CHARSETの間に空行があるところが問題では。

空行があるのでヘッダーが無いとみなされてHTMLとして認識されず、ヘッダー無しでHTMLがテキストファイルとして送出されてしまっているのではないでしょうか。

Content-type: text/htmlが重要で、このファイルがHTMLファイルであることをブラウザーに知らせています。
これが認識されないとHTMLとしてレンダリングされません。

投稿2016/05/27 16:10

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tada_tadaa

2016/05/27 16:46 編集

回答ありがとうございます。 argius様がおっしゃるように空行を消したところ、今まではソースが表示されていたのが、今度はレンタルサーバーの「500 internal server error」になりました。自分のLinux上ではうまく動くのにレンタルサーバーではこのような挙動になるのが不思議です。その後、oskbtさんに教えていただいたやり方を試したところめでたくHTMLが表示されました。Content-type: text/htmlがうまくブラウザに伝わってなかったのかもしれません。なにはともあれ無事に解決してよかったです。Content-type: text/htmlを確実にブラウザに伝えることが重要っぽいというのが分かりました。 ありがとうございました。 追記 Content-type: text/html; charset=utf-8でもContent-type: text/html;でも「500 internal server error」のページになりました。文法的には間違ってないはずなのですが不思議です。
argius

2016/05/27 17:01

500 internal server error が出たときは、レンタルサーバーに出力されているエラーログ(error_log)を 参照することができれば、原因を突き止められるかも知れません。 あと念の為ですが、 Content-type: text/html; charset=$CHARSET の下の空行は消していないですよね? もしそうなら説明が良くなかったですね、すみません。 上手く行っている方と見比べてみてください。 (と書いておくべきでした) ついでなので説明書いておきますが、 HTTPレスポンスヘッダーは、最初に空行なしで ヘッダー(Content-type: text/html;など)を出力したら、 改行コードを続けて2つ(厳密にはCRLFを2回)出力するとヘッダーの終わりを表します。 最初の1つ目はヘッダーの末尾の、2つ目は空行の改行コードになり、空行が1行ある状態になります。
tada_tadaa

2016/05/28 00:15 編集

>レンタルサーバーに出力されているエラーログ(error_log)を参照することができれば、原因を突き止められるかも知れません。 レンタルサーバーはロリポップを使っているのですが、僕が検索した限りではperlとApacheのエラーログらしきものが見当たりませんでした。ロリポップでのperlのバグ退治に四苦八苦していた掲示板がありましたが、そこを見た感じではエラーログがでないのかなぁと思ってしまいました。ロリポップに聞いてみないと分かりませんけど。 >あと念の為ですが、 >Content-type: text/html; charset=$CHARSET >の下の空行は消していないですよね? 申し訳ありません。消していました。次のようにしたところargius様の方法でちゃんとHTMLが表示されました。 #======================= 管理パスワードページ出力 == sub printGatePage { print <<END; Content-type: text/html; charset=utf-8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>ゆーざかんり</title></head> ↑これでちゃんと動いてくれました。 ちなみに僕が最初に試していたのが、以下です。 #======================= 管理パスワードページ出力 == sub printGatePage { print <<END; Content-type: text/html; charset=utf-8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>ゆーざかんり</title></head> ↑これだと 500 internal server errorになります。 改行がひとつあるかないかだけの違いですが、その差でエラーになるか、うまく表示されるかに別れるのだと勉強になりました。argius様のおっしゃるように >HTTPレスポンスヘッダーは、最初に空行なしで >ヘッダー(Content-type: text/html;など)を出力したら、 >改行コードを続けて2つ(厳密にはCRLFを2回)出力するとヘッダーの終わりを表します。 ということなのではないかと思いました。
argius

2016/05/28 03:34

やはりそうでしたか。> 下の空行 説明不足で余計な時間をかけさせてしまって申し訳ありませんでした。 今回の件は上手く行っているケースがあったので特定はしやすかったですけどね。 ともあれ、解決できたみたいで良かったです。 ロリポップは使ったこと無いのですが、 レンタルサーバーのマニュアルにエラーログの出力場所が書かれているはずですので、 後々のために調べておいた方が良いと思います。
tada_tadaa

2016/05/28 08:36

>レンタルサーバーのマニュアルにエラーログの出力場所が書かれているはずですので、 >後々のために調べておいた方が良いと思います。 問い合わせましたところ、 use CGI::Carp qw(fatalsToBrowser); をすすめられました。 ほかの方の参考になればと思いますので使い方の一例を載せときます。 #!/usr/bin/perl #↓これを付け加える。 use CGI::Carp qw(fatalsToBrowser); # CGIヘッダーの出力 print "Content-type: text/html\n\n"; # さいころを振る $r = rand 6; $d = int($r) + 1; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; prit "<head><title>Perlさいころ</title></head>\n"; print "<body><p>さいころの目は<big>$d</big>です。</p></body>\n"; print "</html>"; ページを表示させようとすると次のようなエラーメッセージが表示されます。 Software error: syntax error at 1-4.cgi line 16, near "prit "<head><title>Perlさいころ</title></head>\n"" Execution of 1-4.cgi aborted due to compilation errors. ただし、今回のようなケースでは(Content-type: text/html; がうまく送られていない)、このuse CGI::Carp qw(fatalsToBrowser);を使う方法でも、レンタルサーバーのエラーページが表示されるっぽいので(僕のやり方が悪いのかもしれませんが)、特殊なケース?っていうか、Content-type: text/html; の前には空白行をいれず、ヘッダーを出力したら改行コードを続けて2つ出力するものと覚えておくことが大切であると思います。
argius

2016/05/28 09:05 編集

事後報告いただきましてありがとうございます。 デバッグ情報をブラウザーに出力すると、万が一悪意のある第三者にサーバー内部の情報が暴露されてセキュリティー的に危険になることがありますのでご注意ください。 あくまでデバッグ中のみオンにするようにしてください。 なので、本番稼動中にはやはりエラーログを参照できるようにしておきたいですね。 ロリポップはそれが無理なのかも知れませんが。 手元にテスト用のLinux環境があるということですので、そちらを上手く活用できれば良いですね。 それでは、アプリ開発、頑張って下さい!
tada_tadaa

2016/05/28 09:45

こちらこそ、いろいろと有益な情報を教えていただきとても感謝しております。 ロリポップは一応普通のログ?とかもあってみれるのですが、perlのエラーのログとかは見れないみたいです。PHPなんかはエラーコードをブラウザに表示させる設定があるのですが。気になられる方はお試し期間で試すなり、メールやチャットで問い合わせてみるとよいと思います。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問