0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP_エラー備忘録

Last updated at Posted at 2023-09-10

はじめに

PHP学習中に起こった、解決まで時間がかかったエラーをどう解決したかまとめる

Uncaught Error: Call to undefined function ○○(mb関数)

試したこと
  1. 独習PHPのセットアップ順を再度試した
    1. XAMMP再インストール
      1. php.ini
      2. 環境変数PATH再設定&最も上に設置
    2. 学習用コードファイルをhtdocsディレクトリにコピー
  2. VSCode
    1. settings.json確認
    2. 拡張機能確認
  3. ネット検索

👆環境PATH設定確認した所、指定先が間違っていた
  学習用コードファイルをhtdocsディレクトリにコピーし、そこからファイルを実行したときに上手くいった
※原因はわからん

mb_send_mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\○○

▼和訳
mb_send_mail(): php.iniの "SMTP "と "smtp_port "の設定を確認するか、ini_set()を使用してください。

▼試したこと(1/3)
資料:知恵袋

・設定でSMTPサーバにlocalhostを指定しているため、自分のPC上にSMTPサーバが動いていなければエラーになる
 ・対策
  1. 自身の契約しているISPのアドレスまたは利用できるSMTPサーバーの情報を書く
  2. 「実際にはメールが飛んで行かない」ダミーのメールサーバを使う
👆使い方わからんから別の方法を探す

▼試したこと(2/3)
資料:独習PHP 第4版
1)php.iniの設定を変更する(Windows版)

<変更前>
1)メール送信に利用する文字コードの変更設定
;mbstring.language = Japanese
2)sendmail.exeを有効化
;sendmail_path =

<変更後>
1)
mbstring.language = "Japanese"
2)
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"


2)sendmail.iniの設定を変更する(Windows版)

<変更前>
1)SMTPサーバーのホスト名を変更
smtp_server=mail.mydomain.com
2)SMTPサーバーのポート番号
smtp_port=25
3)認証ユーザー名
auth_username=
4)認証パスワード
auth_password=
5)送信元アドレス
force_sender=

<変更後>
1)
smtp_server=smtp.example.com
2)
smtp_port=587
3)
auth_username=user01
4)
auth_password=passwd01
5)
force_sender=user01@example.com


3)Apacheを再起動
・サンプルを実行した結果、送信されたメールを指定の宛先で受け取ることができれば成功

👆参考書に書かれている内容のまま変更した状態で以下のコードを実行すると以下のようなエラーメッセージが来た

コード内容.php
<?php
$to = 'wings@example.com';
$subject = '独習PHP 改訂版';
$body = "こんにちは、mb_send_mail関数!\nどうですか?";
$headers  = "From : user01@example.com\n";
$headers .= "Cc : yamada@example.com\n";
$headers .= "X-Mailer : PHP 8\n";

if (mb_send_mail($to, $subject, $body, $headers)) {
  print 'メール送信に成功しました。';
} else {
  print 'メール送信に失敗しました。';
}

;エラーメッセージ.
You must configure the smtp_server and default_domain in:
  C:\xampp\sendmail\sendmail.ini
  or
  HKLM\Software\Sendmail

/// 和訳
smtp_serverとdefault_domainを設定する必要があります。

👆書籍にある事をそのまま実行していた為、自身の環境に合わせていない。各変更項目の確認を再度行う必要がありそう。

▼試したこと(3/3)
「▼試したこと(2/2)」で変更した設定項目の確認
目的:自身のGmailを使って自分あてにメールを送りたい

資料:GmailのSMTPサーバーを使って無料でメールを送信する方法

・Gmailに合わせた変更を行う

<変更前(sendmail.ini)>
1)
smtp_server=smtp.example.com
2)
smtp_port=587
3)
auth_username=user01
4)
auth_password=passwd01
5)
force_sender=user01@example.com

<変更前後>
1)Gmailのデフォルトのサーバーアドレス
smtp_server=smtp.gmail.com
2)GmailのSMTPポート
smtp_port=587
3)メールアドレス
auth_username=you@gmail.com
4)ログインパスワード or アプリパスワード
auth_password=passwd01
👆ログインパスワードでやったら、「配信中にエラーが発生しました: アプリケーション固有のパスワードが必要です。」とエラーメッセージが来た。そのためアプリパスワードを設定して代わりに張り付けた
5)メールアドレス
force_sender=you@gmail.com

👆再設定して実行したら正しく処理された!

コード内容.php
<?php
$to = 'you@gmail.com';
$subject = '独習PHP 改訂版';
$body = "こんにちは、mb_send_mail関数!\nどうですか?";
$headers  = "From : you@gmail.com";

if (mb_send_mail($to, $subject, $body, $headers)) {
  print 'メール送信に成功しました。';
} else {
  print 'メール送信に失敗しました。';
}


// 結果
//メール送信に成功しました。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?