• 締切済み

スクリプト中の特定の処理部分における時間制限のかけ方

初めて質問させていただきますheepoo9と申します。 PHP歴は1年ちょっとです。 (1)PHP実行WEBサーバ(サブSMTPサーバ(Xmail)も兼ねる) (2)メール送信用SMTPサーバ(Postfix、25番ポート使用) の二台を使ってメール送信をしたいのですが、その際にクリアできない問題に当たっています。 (1)上のPHPスクリプトをブラウザを通して起動させ、(2)のSMTPサーバを使ってmb_mail_send()でメールを送るとします。 現在(1)のphp.iniではSMTPのデフォルトがlocalhostに設定されているためにini_set(SMTP,"(2)サーバIP")という形で一時的にSMTPを(2)に切り替えて送信しています。 その際に(2)サーバが何らかの理由で使用不能ならばデフォルト通り(1)(localhost)でメール送信をしたいとします。 この時の処理として、 --------------------------------- //SMTP設定を(2)に変更 ini_set(SMTP,"(2)サーバIP"); $mail_res = mb_mail_send(各引数); if(!$mail_res){ ////SMTP設定をデフォルトに変更 ini_restore(SMTP); mb_mail_send(各引数) or die; } --------------------------------- のような処理を行っているのですが、これで対応できないケースについてどうしたら良いのか分からず困っています。 具体的な(2)サーバの状況として、 ・電源が落ちている ・完全にOSが落ちている ・LANケーブルが切れている などの場合には上記の処理で問題ないのですが、 ・ソケットで25番ポートへの接続は正常() ・Postfixに何らかの問題がある の場合に、mb_mail_send()部分でのレスポンスが得られず、タイムアウトとなってしまいます。 対策として、このレスポンスを得るまでの時間に時間制限を設けて、 ・5秒以上応答無しならば、デフォルトSMTP設定に戻して(1)サーバから送信する などの処理を行おうと思うのですが、PHPスクリプトの特定の部分に制限時間を設ける方法を全く探し出せずにいます。 非常に困り果てています。 どなたか解決方法がおわかりになる方はいらっしゃいますでしょうか?

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ああ・・失礼しました。ポート25は正常なんですね >・Postfixに何らかの問題がある をどう判断するかですかねぇ・・・ HELOを送って戻り値をチェックするとか? それも通っちゃいます? if($fp){ fputs($fp,"HELO $server\r\n"); $result = fgets($fp,128); fclose ($fp); $resultの書式を検証してみる・・・ }

heepoo9
質問者

補足

$result = fgets($fp,128)の行で、なんの反応もなくなってPHP側のタイムアウトになってしまいます。 エラー文は、 Fatal error: Maximum execution time of 30 seconds exceeded ~ ちなみにmail()では同じくタイムアウトするのですが、30秒以上反応がなく、(2)サーバー側のタイムアウトになります。 ちなみにエラー文は、 CGI Timeout The specified CGI application exceeded the allowed time for processing. The server has deleted the process. になります。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ソケットでチェックしてみるとか・・・ <? $server="・・・"; $fp = @fsockopen($server,25, $errno, $errstr,5); if($fp){ fclose ($fp); 成功した処理; }else{ 失敗した処理; } ?>

heepoo9
質問者

補足

早速の回答ありがとうございます! 一応これも試してみたのですが、ここは成功してしまうケースなのです。 …なのでどこにどのようにしてタイムアウトを設けたら良いのか分からないんです…。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • phpでメール送信

    phpでメールを送信しようとすると、 Warning: mb_send_mail() [function.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() というエラーが出てしまいます・・・。 何が原因なんでしょうか?Localhostの原因でしょうか?

    • 締切済み
    • PHP
  • ローカル環境でのメール送信ができません。

    ローカル環境で、mb_send_mail関数を使用してメールの送信を行いたいのですが、 Warning: mb_send_mail() [function.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 ... というエラーメッセージが表示されてしまいます。 ローカル環境の設定は、 Apache2.0.55 MySQL5.0.15 PHP5.0.5 を使用しており、PHP,MySQLの文字コードはShift_JISで統一しております。 別途メールサーバを導入しないと駄目なのでしょうか?

  • ローカル環境でのメール送信ができません。

    ローカル環境で、mb_send_mail関数を使用してメールの送信を行いたいのですが、 Warning: mb_send_mail() [function.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 ... というエラーメッセージが表示されてしまいます。 動作環境は、 Apache2.0.55 MySQL5.0.15 PHP5.0.5 を使用しており、PHP,MySQLの内部文字コードはShift_JISで統一しております。 別途メールサーバを導入しないと駄目なのでしょうか?

    • ベストアンサー
    • PHP
  • PHPについて質問です。

    Warning: mb_send_mail() [function.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:\Program Files\Apache Group\Apache2\htdocs\sai.php on line 51 php5で送信フォームを作成してますが上記のようば エラ―がでて困っております。 送信ができるよう、修正の仕方を教えて下さい。 お願いします。

    • 締切済み
    • PHP
  • メールが送信出来ないのですが

    PHPでメールを送信すると、以下のエラーが出るのでが、こんな時何を手がかりに対処していいかわかりません。お手数ですが、アドバイスを頂けたらうれしいのですが。(素人なもんでよろしくお願いします。) Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 587, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in xxxxxxxx.php on line nnn

    • ベストアンサー
    • PHP
  • SMTPサーバの接続に失敗する原因について

    現在、Webからmb_send_mailを使ってメール送信を行おうと思っていますが、 以下のようなエラーが発生します。 Warning: mb_send_mail(): Failed to connect to mailserver at "XXX.XXX.co.jp" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in XXX.php on line XX エラー内容の通り、SMTPサーバに接続できていないのですが、 同じソースをPHP.EXEを使って直接実行すると、 正常にメールが送信されます。(php.iniも同じ) Apacheの設定のような気もしますが、 原因・解決方法について、 どなたかご存知の方がおられましたら、ご教授ください。 環境 Apache2.0.50 PHP4.3.8 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでメールの送信ができない

    xampp1.8.0環境から PHPのmb_send_mailでメールの送信をしようとしています。 php.ini SMTP = smtp.xxx.ne.jp (プロバイダから指定されてるもの) smtp_port = 25 xampp1.7.7くらいの環境のときは↑の設定のみで送信できたのですが 新しいバージョンに変えてから送れなくなりました。 古いバージョンのphp.iniと差し替えると送信可能になります。 上記の2行以外でメールの設定に関わる部分はありますでしょうか?

    • 締切済み
    • PHP
  • mb_send_mailを実行するとエラーになります

    Warning: mb_send_mail() [function.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 ・・・・ XPにPHPとアパッチを入れて <?php $mlfr = "xxxx@nifty.com"; $mlto = "xxxx@mail.goo.ne.jp"; mb_internal_encoding("EUC-JP"); $mlsb = "たいとる"; $mlms = "ないよう"; $mlhd = "from: $mlfr\r\n"; mb_send_mail($mlto,$mlsb,$mlms,$mlhd,"-f".$mlfr); ?> を実行してもメールが送られません XPにメールサーバを入れなければならないのでしょうか?

    • ベストアンサー
    • PHP
  • ローカル環境でのメール送信

    PHP超初心者です。 ローカル環境でmb_send_mail関数をつかってメール送信をしたいのです が、上手くいきません。 エラーメッセージは Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first n44sm11126503pyh in C:\xampp\htdocs\○○○\○○.php on line 15 とでています。 文字コードはUTF-8で保存しており、 <?php mb_language("ja"); mb_internal_encoding("UTF-8"); $mailto="○○○@○○○.jp"; $subject="タイトル"; $content="内容"; $mailfrom="From:".mb_encode_mimeheader("nicoko")."<○○○@フリーメールアドレス.com>"; mb_send_mail($mailto,$subject,$content,$mailfrom); ?> です。 15行目はmb_send_mail($mailto,$subject,$content,$mailfrom); 色々調べたところ、 (1)SMTP = メールアドレス用のsmtpサーバの設定 (2)smtp_port = 25 (3)sendmail_from = メールアドレス を設定しなおし、 C:\xampp\apache\bin\php.ini C:\xampp\php\php.ini C:\xampp\php\php5.ini C:\xampp\php\php4\php.ini 全ての設定を変更しました。 またphpinfoで確認したところ(1)~(3)まで変更されていました。 (3)はOutlookのメールのアカウント→プロパティを見て サーバー情報→送信メールに○○.○○○.jpと書いてあり、 それをうつしました。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP/XAMPPのローカルホストからのメール送信

    1) 困っている点 PHP初心者です。PHPでXAMPPを用いてお問い合わせフォームからローカルホスト経由でメールを飛ばすことができるよう環境設定をしていますが、つまづいています。ご教示くださるようお願いします。他に試す箇所、確認すべき個所はありますでしょうか。 環境条件は、Windows11を使用。メールアドレスは外部プロバイダーメール(OCNの@dream.com)を用いて設定を試みています。XAMPPはApache/2.4.56 (Win64) OpenSSL/1.1.1t PHP/8.2.4 Server at localhost Port 80。 (なお、一通り、PHPの基本的なプログラムは記載し、Marina DB含め、ローカルホストからメールを飛ばさないPHPコードは無事動いています。) 2)PHPのコード ローカルホストから自分のgmailにメールに飛ばすテスト hogehoge@gmail.comのhogehogeの箇所は自分のメールアドレスを記載。PHPではエラーを表示するようにさせた。 <?php error_reporting(E_ALL); ini_set('display_errors', 1); mb_language('Japanese'); mb_internal_encoding('utf-8'); $to = 'hogehoge@gmail.com';  ←hogehogeは自分のgmailアドレス $subject = 'メール送信テスト:test for PHP'; $message = 'メール送信テスト:test for PHP'; $headers = 'From: 自動送信 <hogehoge@dream.com>' . "\r\n"; ←hogehogeは自分のプロバイダーアドレス $headers .= 'Content-Type: text/plain; charset=utf-8'; if(mb_send_mail($to, $subject, $message, $headers)) { echo "送信完了"; } else { echo "送信失敗"; } ?> 3) phpホルダー内のphi.iniの記載 (一部抜粋) [mail function] ; For Win32 only. ; https://php.net/smtp SMTP=localhost  ← 修正 https://php.net/smtp-port smtp_port=25     ← 修正 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" ← 修正 上記のSMTP、Portのパラメータは下記のHPを参考にし、倣った。 https://miya-system-works.com/blog/detail/xampp-send-mail/ *なお、ここの箇所では下記のパラメータでも行ったがNG。エラーメッセージは5)ii)に記載。 このパラメータはsendmail.iniで入力したものと同じ。 SMTP = smtp.ocn.ne.jp smtp_port = 465 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 4) sendmail内ホルダーのsendmail.iniの記載 (一部抜粋) hogehogeの箇所は自分のアドレス、P/Wを入力。 pop3_~=~の箇所は三行空欄。 smtp_server=pop.ocn.ne.jp ← 修正(プロバイダー案内通り) smtp_port=465 ← 修正 (プロバイダー案内通り) smtp_ssl=auto ← 修正 auth_username=hogehoge@dream.com ← 自分のアドレスに修正 auth_password=hogehoge       ← 自分のPWに修正 ; if your smtp server uses pop3 before smtp authentication, modify the ; following three lines. do not enable unless it is required. pop3_server=       ← デフォルトのまま空欄 pop3_username=     ← デフォルトのまま空欄 pop3_password=     ← デフォルトのまま空欄 force_sender=hogehoge@dream.com ← 自分のアドレスに修正 5) ブラウザーでの表示 (上記2)のコードを走らせた後) ポートに接続できないとのエラーメッセージ。しかし、6)に記載したThunderbirdからはポート:465からメールを送れている。 i) SMTP:localhost,、SMTPポート:25の場合 Warning: 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:\xampp\htdocs\test\test_sendmail_2.php on line (mb_sendとしたPHPコードのラインの箇所) 送信失敗 ii) SMTP :smtp.ocn.ne.jp、 SMTPポート:465の場合 Warning: mb_send_mail(): Failed to connect to mailserver at "pop.ocn.ne.jp" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\test\test_sendmail_2.php on line (mb_sendとしたPHPコードのラインの箇所) 送信失敗 6)補足 なお、プロバイダーメールアドレス、PWは念のためローカルPC上にメールソフトを新規にThunderbirdを落とし、設定したところ、溜まっていたプロバイダーメールは全て落ちてきたのでPWに間違いはないことを確認済み。その際、SMTPサーバー名とsmtp_portは自動検出されたので、手打ちはしていない。Thunderbirdでは自動的にSMTPサーバー名:smtp.ocn.ne.jp、ポート:465で設定されていた。 以上よろしくお願いします。説明不足、用語の使い方で適切でない箇所がありましたら、修正、追記します。

SwitchにLANアダプタが繋がらない
このQ&Aのポイント
  • Switchにインターネット接続できない問題について
  • 購入した10/100MLANアダプターがSwitchでのインターネット接続に繋がらない現象に悩まされています
  • WiFiではインターネット接続できるが、アダプターを使用した場合にのみ接続できない状況に遭遇しています
回答を見る