プロが教える店舗&オフィスのセキュリティ対策術

PHP初心者です。
少し訂正があるため、それを書き直しました。
回答を頂く方には大変面倒をおかけする事になり、誠に申し訳ありませんが、2つのファイルのソースコードをまず見てもらえますか。
test.php
<?php
session_start();
?>
<html>
<head>
<title>test</title>
</head>
<body>
<h2>メールの送信</h2>
<?php
if ($_SESSION["address"]=="NG") {
unset($_SESSION["address"]);
print("E-Mailは必須入力です。"."<br>");
}
if ($_SESSION["subject"]=="NG") {
unset($_SESSION["subject"]);
print("タイトルは必須入力です。"."<br>");
}
if ($_SESSION["message"]=="NG") {
unset($_SESSION["message"]);
print("コメントは必須に入力です。"."<br>");
}
?>
<form action="./test1.php" method="post">
E-Mail:<br><input type="text" name="address"
<?php print("value='".$_SESSION["address"]."'")?> size="50"><br>
タイトル:<br><input type="text" name="subject"
<?php print("value='".$_SESSION["subject"]."'")?> size="50"><br>
コメント:<br><textarea name="message" rows="5" cols="35">
<?php print($_SESSION["message"])?></textarea><br><br>
<input type="submit" value="送信">
</form>
</body>
</html>

このページを表示させてどこかを空欄のままにしますが、エラー表示は出ません。
↑の部分はソースコード抜けや誤字で正常に表示できるようになりました。
では、全ての欄に入力してtest1.phpに移ります。

test1.php
<?php
session_start();
if(strlen($_POST["address"])==0){
$_SESSION["address"] = "NG";
}else{
$_SESSION["address"] = $_POST["address"];
}
if(strlen($_POST["subject"])==0){
$_SESSION["subject"] = "NG";
}else{
$_SESSION["subject"] = $_POST["subject"];
}
if(strlen($_POST["message"])==0){
$_SESSION["message"] = "NG";
}else{
$_SESSION["message"] = $_POST["message"];
}
if($_SESSION["address"]=="NG" or
$_SESSION["subject"]=="NG" or
$_SESSION["message"]=="NG"){
header("Location: test.php?".SID);
exit;
}
?>
<html>
<head><title>test1.php</title></head>
<body>
<?php
$address=$_POST["address"];
$subject=$_POST["subject"];
$message=$_POST["message"];
$header="From:xxx@xxxxx.xxx\nContent-Type:
text/plain;charset=iso-2022-jp";
mb_language("Japanese");
if(mb_send_mail($address,$subject
,mb_convert_encoding($message,"JIS","SJIS"),$header)){
print("送信完了!");
}else{
print("エラー:送信に失敗しました");
}
?>
</body>
</html>

問題はここです。
移動前にmb_language("Japanese");の部分でエラー表示されます。
この構文がどうしてもエラーになります。
エラー文をここで書きます。
Fatal error: Call to undefined function mb_language() in C:\Apache2\htdocs\sample18_1.php on line 42
それで、構文をググって見ましたが、こういうサイトを見つけました。
http://lib.stwing.jp/archives/2005/12/phpmb_lang …
ここにも書かれているので構文自体にエラーが出るのはおかしいはずなんですけど。
どこに問題があるのでしょうか。
このソースコードが何故上手く通らないのか教えて頂けると大変助かります。
どうか宜しくお願い致します。

A 回答 (3件)

よく見たら


C:\Apache2
と書いてありますね
Windowsでしたらphp.iniで
;extension=php_mbstring.dll
と書いてあるところの先頭のセミコロンを削除してApacheを再起動したら使えるようになります。

この回答への補足

今回のエラーはメールアドレスにあるようです。
エラーコードを書きます。
Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 550 Can not speak with you in C:\Apache2\htdocs\tes1.php on line 44
確かにここではxxx@xxxxx.xxxなので送信されません。
なので、自分のOutlook Expressのメールアドレスを書き込みました。
でも上記のエラーが出ました。
勿論、php.iniのSMTPの部分もlocalhostからそのメールアドレスに変更しています。
何がダメなのでしょうか。
後、test1.phpは正常に『エラー:送信に失敗しました』の表示はされていました。
余裕があれば、どうぞ宜しくお願い致します。

補足日時:2009/06/03 11:04
    • good
    • 0
この回答へのお礼

再度アドバイスありがとうございます。
php504さんの言われるとおりにやったら上手くいきました。
でも、どうすればphp.iniの;extension=php_mbstring.dllって分かるのですかね。
あまりに凄くてただただ驚くばかりです。
ただ、今度は別のエラーが出ました。
補足欄に書きますので、もし余裕があればそれも解決してくれませんか。
厚かましいとは承知でお願いします。

お礼日時:2009/06/03 10:40

php.iniのSMTPにはメールアドレスではなくインターネット契約しているプロバイダのSMTPサーバを書きます


ただSMTP認証を行っているプロバイダでは使えません
    • good
    • 1
この回答へのお礼

わざわざ答えて頂き、感謝します。
>php.iniのSMTPにはメールアドレスではなくインターネット契約しているプロバイダのSMTPサーバを書きます
そうですね。自分もそういう設定をしてました。
でも、それに気付いたときには残念ながらphp504さんと行き違いになってしまいました。
ダメだったという事は、私のプロバイダであるBiglobeはSMTP認証を行っているプロバイダという事になるのですかね。
すいません、また質問になってしまいました。
php504さんのおかげで、最初のエラーはなくなりました。
それだけでも十分な回答を頂いたと言うべきですね。
3度にわたり、適切な回答を頂き、どうもありがとうございました。

お礼日時:2009/06/03 19:44

PHPは設定条件により使える関数と使えない関数があります


お使いの環境では multibyte 関連の関数が使えない設定になっているようです
レンタルサーバであれば管理者に連絡を
自分のパソコンにインストールしてあるならOS等の詳細を補足してください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!