バックグラウンド処理についての質問

このQ&Aのポイント
  • バックグラウンド処理についての問題を解消する方法について教えてください。
  • バックグラウンドでのメール送信が非同期にならず、画面が固まる問題が発生しています。
  • 問題の原因を特定し、効果的な対策方法を教えてください。
回答を見る
  • ベストアンサー

バックグラウンド処理について

環境:CentOS5 php 5.1.6 (cli) safe_mode off メールをバックグランド処理するため、system関数を用いています。 以下のように記述し、 system("/usr/bin/php -f /フルパス/sendjob.php > /dev/null &"); sendjob.phpには ------------------ sleep(10); 自分宛メール送信 ------------------ としております。 メールは問題なく届くのですが、非同期になっておらず困っております。 sleep(10)ブラウザで固まってから、画面遷移し送信メールが届きます。 どこを確認すればよろしいでしょうか? ご教授頂けますようよろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

バックグラウンド処理や非同期、で検索するとsystem/exec関数での処理方法が結構でてくるのですが、どの記事も最終的に、 PHPをCGIモードで動作させないと、非同期なバックグラウンド処理が出来ない、という結論になっていました。

vivakool
質問者

お礼

少しほかの方法を模索してみることにしました。 調べていただきありがとうございました。

関連するQ&A

  • PHP バックグラウンド処理

    apache1.3系+PHPで大量のメール送信プログラムを作成していますが、ある動きで困っております。 特定のフォームにて件名と本文を入力し、submitすることでsystem関数を利用して別のプログラムをバックグラウンドで動かそうとしてますが、メール送信前にコメントを表示したいのです。 しかし、表示をする前に後に記述しているsystem関数が読み込まれるようで、system関数の処理が終わると、そのコメントが表示されるようになってしまってます。 例) // ここでコメントを表示 print<<<HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>WEBMAIL</title> </head> 送信を受付ました </body> </html> HTML; // メール送信プログラムをバックグラウンドで system("/usr/local/bin/php webmail2.php $subject $address $data & "); 実際に100件程のアドレスに向けて送信しましたが、送信処理は正常に動作しているようですがバックグラウンドで動いている気配がありません。 また、system関数の処理の前にコメントを表示したいのですが、実際に表示されるのは配送処理が終わってからとなっています。 system("/usr/local/bin/php webmail2.php $subject $address $data >/dev/null & "); ↑ これですと変数が受け渡しされませんでした。 先にコメントを表示するにはどうしたらいいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでバックグランド処理

    PHPでバックグラウンド処理をSYSTEM関数で行っていたのですがサーバーの変更をしてからSYSTEM関数が動作しなくなってしまいました(´;ω;`) なのでSYSTEM関数以外でバックグラウンド処理はできないでしょうか?よろしくお願いします(m。_。)m ↓旧サーバーで使用していた奴です system("/usr//bin/php /home/member/ユーザーID/public_html/melmaga.php");

    • 締切済み
    • PHP
  • PHPでバックグランド処理について

    PHPでバックグランドで処理させたいと考えています。 300通前後のメールを一括送信するために、この送信処理をバックグランドで処理させたいと考えています。 色々調べて、 system()関数とexec関数を知りました。 しかし、動きが上手くいきません。解決策や糸口をご教授頂けないでしょうか? メールを送るファイル: back.php フロントで実行するファイル:mai.php で下記の様に書きました。 back.php <?php require_once('Mail.php'); $params = array( "host" => "smtp.gmail.com", "port" => 587, "auth" => true, "username" => "****@gmail.com", "password" => "****" ); $mailObj = Mail::factory("smtp",$params); mb_language('ja'); mb_internal_encoding('utf-8'); $rec ='**_com2@yahoo.co.jp'; $header = array( "To"=>$rec, "From"=>"admin@**-terakoya.jp", "Subject"=>mb_encode_mimeheader('これは件名') ); $com = 'メール本文'; $com = mb_convert_encoding($com,"UTF-8","auto"); $mes =$mailObj -> send($rec,$header,$com); if(PEAR::isError($mes)){ echo '<pre>'; var_dump($mes->getMessage()); echo '</pre>'; } ?> 実行するファイル mail.php var_dump(system("php www/htdocs/ac/back.php > /dev/null &")); です。 パスの指定方法が問題なのかもしれないと思い色々試してみましたが最終的には無理でした。 ちなみに、本番サーバーの環境とXampp環境では何か違う方法が必要なのでしょうか? 上記例は、本番サーバーで記述した物です。 どうぞご教授お願いします。

    • ベストアンサー
    • PHP
  • PHPバックグランド処理について

    初めて、質問させて頂きます。 コミュニティーサイトを運営しているのですが、登録メンバーが増えてきてメール送信の処理に時間がかかるようになってきました。 現在は、MYSQLのDBから 条件に会った人のアドレスを検出させて whileのループでmail関数で送信しています。 $result=mysql_query("**************"); while($value = mysql_fetch_array($result)){ $MAIL=$value["MAIL"]; mail($MAIL,$sbj,$msg,$header,"-fmail@mail.com"); } バックグラウンドで処理させる方法をインターネットで調べていたら 下記のURLにたどりつきました。 http://www.itboost.co.jp/phptips/view.php?fCID=21 呼び出しプログラムを mail.php 送信プログラムを send.php とし、mail.phpから ある条件下で send.phpを実行させるために system("send.php $1 $2 $3 $4 $5 > index.php &"); という感じにしてみましたが、うまくいきません。 パスの問題なのでしょうか?それとも根本的に間違っているのでしょうか? 解決策や、他の方法があれば教えてください。 お願いします。 環境:レンタルサーバ OS Redhat Linux Server Apache DB MYSQL PHP4.12 qmailは入っていません。

    • ベストアンサー
    • PHP
  • system関数でphpが動作しない

    phpプログラムからphpプログラムをバックグラウンドで動作させようと下記のようにsystem関数を使いましたが、phpが動作しませんでした。 system("/usr/local/bin/php /home/user/www/test.php > /dev/null &"); 「動作しない」様子が、異常でして、コマンドラインからtopで調べてみると、phpのプロセスIDが何度も立ち上がり、上記関数があるプログラムをサーバーから消さないと、その状態が続きます。しかし、プロセスは立ち上がっても、phpプログラムは正常に動作していなようです。 さくらインターネット(スタンダード)の共用サーバーを使っています。サーバーのOSは、FreeBSD 4.10です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • CentOSでcronからphp mail送れない

    こんにちは。 CentOSでcronの設定をしました。 */2 * * * * /usr/local/bin/php -f /usr/mail.php 1> /usr/log.txt 上記でmail.phpは2分置きに実行されていますが、 mail.php内のmb_send_mail関数がどうしても実行されません。 (ログよりmail.phpは実行されています。 print出力により確認) コマンドから直接 php /usr/mail.phpで実行するとメールは送信されます。 Centos 6.3 php 5.3.3 Cronでphpのmb_send_mailを実行する際には何か設定がいるのでしょうか。 アドバイス等ありましたら、よろしくお願いします。

  • crontabでPHPスクリプトが実行出来ない

    crontabで毎分PHPのスクリプトを起動する記述をしましたが、すべて下記エラーが出て実行されません。 phpスクリプトの先頭で「#!bin/usr/php」を書く方法と、crontabで「* * * * * /usr/bin/php test.php > dev/null」とする方法を試してみましたが両方ともダメでした。 解決索があればご教示下さい。 【エラー内容】 test.php: line 1: ?php: No such file or directory

    • ベストアンサー
    • PHP
  • Clam Antivirusの設定について

    CentOS上でClam Antivirusをインストールしたのですが、 ログのローテーションの設定が分かりません。 教えていただけないでしょうか。 http://centos.server-manual.com/centos5_clamav.htmlを参考にして設定をしました。 以下のログローテーション設定の部分ですが、この結果が現在clamscan.log-20120801というように 月単位のファイルでしか一覧にありません。 もしDailyで見たい場合を教えていただけませんでしょうか。 以下の2つを変更すれば良いのでしょうか? monthly→dailyに変更 rotate 4→rotate 7に変更 [root@centos ~]# vi /etc/logrotate.d/clamscan ↓下記を記入 /var/log/clamav/clamscan.log { monthly rotate 4 missingok } あと以下の設定につきましても変更する必要がありますでしょうか? [root@centos ~]# vi /etc/cron.weekly/clamscan ↓下記を記入 #!/bin/bash yum -y update clamd > /dev/null 2>&1 /usr/bin/freshclam > /dev/null /usr/bin/clamscan -i -r --remove /home >> /var/log/clamav/clamscan.log 2>&1

  • PHP の system コマンド

    ブラウザからtest.php を実行してperl スクリプトを実行したいのですが、 うまく動きません。アクセス権の問題なのでしょうか。 よろしくお願いします。 ---------------- test.php ---------------------- <? system("/usr/bin/perl /home/usr/public_html/test.pl > /dev/null &"); echo "OK."; ?> ---------------- End File ---------------------- ---------------- test.pl ----------------------- #!/usr/local/bin/perl $sendmail = '/usr/sbin/sendmail'; open(SENDMAIL,"| $sendmail -t -i"); print SENDMAIL <<'END'; From: hoge@hoge.com To: moga@moga.com Subject: test Hello This is test END close(SENDMAIL); --------------------- End File -------------------------

    • ベストアンサー
    • PHP
  • .qmailを使ってPHPをキックする場合のオプション

    .qmailを使ってPHPをキックする場合のオプション 以下のソースで.qmaiからPHPをキックしています。 | /usr/bin/php -d safe_mode=off /var/www/vhosts/hoge.jp/private/kick.php この場合、-dオプションはどういう意味なのでしょうか? オプションが一覧で乗っているようなサイトはありますか?

    • ベストアンサー
    • PHP

専門家に質問してみよう