• ベストアンサー

一定時間毎に同じ動作を繰り返し行うには・・・

色々試行錯誤していますが・・・うまく行きません・・・ どなたかお助けください!! PHP4.xx SQLite3.xxです。 初心者です。 DBに登録されているメールアドレスリストに10秒ごとにメールを送信するプログラムです。 メールリストは300人くらいですが、一気に送るのはサーバー的に負荷がかかると考え一人目にメールを送り、10秒経ったら次の人・・・また10秒経ったら次の人・・・に送信という形にしたいです。 最初はPHPのファイルでFORで回して処理の最後にsleep(10)で遅延させたらいけると(浅はかにも)思ってやってみましたが、ブラウザの表示でtimeoutするようでダメでした。 そこで今はjava scriptでリフレッシュさせてリフレッシュ先のURLの最後にfilename.php?id=●の数字の部分を順番に+1して行って終わったら処理終わるという手法を考えましたが・・・それがうまく行きません。 1人目の処理はうまく行ってメールも送信されますが次の人へ送信するURLへのリフレッシュがうまく行きません。 考え方がおかしいのでしょうか? それとも発想はいいけど、単にコードの問題なのでしょうか・・・? ちなみに処理する毎に毎回「●●さんにメールを送信しました」と表示されるようにしたいのです。(つまりbodyでリフレッシュかけると何も表示されずに次の処理に行くので見てる方は実際に送られているかどうか心配。わざわざ毎回にみんなに電話して「メール来た?」といか確認してられないですし・・・) 実際に作ってみたコードはこのような感じです。 -------------(ここから)---------------------------------- <? ■■ここにメール送信のコードがあります。これは実際に届いているのでOKです。 if (!$mail->send()){ echo("メールが送信できませんでした。エラー:".$mail->getErrorMessage()); } else { $message = "会員No:".$id." <b>".mb_convert_encoding($row["name"], "SJIS", "EUC-JP")."</b>様にメール配信しました。"; ■■↑毎回処理する毎に会員NOと名前+「送信しました」メッセージが表示されるようします。 sleep(5); $id++; //次の人に行くためにidを追加します。 } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ■■リフレッシュのjs部分 $idはDBから取得してます。GETがでid指定がない時は「1」が入るようになっていてそこからスタートします。 <SCRIPT language="JavaScript"> <!-- function refresh() { location.href = "haishin_send01.php?id=<?=$id?>"; setTimeout('refresh()', 5000); //5秒にリフレッシュする予定 } // --> </SCRIPT> <title>メルマガ配信テスト</title> <p> <?=$message?> </p> ■■ここで処理が終わって次のURLへリフレッシュする <SCRIPT language="JavaScript"> <!-- refresh(); // --> </SCRIPT> </body> </html>

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

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

案1.タイムアウト延長 300人×10秒=3000秒 とのことなのでサーバー(apache)のタイムアウトが先に引っかかるかもしれませんが、 set_time_limit(3000);//実際は余裕を持った時間に でまずはPHPのタイムアウトを防止します。 ブラウザのタイムアウトは、定期的にデータを送って回避します。 例は、下記 http://kikky.net/pc/php_timeout.html 案2.バックグラウンド実行 サーバーにcli版のphpが入っている前提ですが (注 絶対にレンタルサーバーでデバッグはしないこと) system("/usr/local/bin/php sendml.php > /dev/null &"); バックグラウンド実行用のスクリプト sendml.php とそれを実行させるスクリプトで構成します。 進行状況を知りたい場合は、ファイルに定期的に進捗を吐き出して それを読むスクリプトが必要です。 案2はバグが有ると悲惨なことになりますので十分ローカルでチェックした後に運用すること。自己責任で!

その他の回答 (1)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

時間の掛かる処理をサーバサイドで実行するには、いくつか方法があるでしょうが、 一件送信する毎に、 1件目送信しました。<br> などをブラウザに送ってみてはいかがですか。

noguri999
質問者

補足

それは具体的にはどうするのでしょうか・・・? またレンタルサーバーなのでCRON等は使えません。

関連するQ&A

  • phpでGoogle Analyticsを使う場合

    小さな会社で、突然ホームページを任されました。 htmlは基本はわかるのですが、phpは全く理解していません。(これから勉強するつもりです。) すでに会社のホームページはあり、そこにGoogle Analyticsを使うことになりました。 phpは、問い合わせフォームの確認画面とメール送信関連にだけ使われているようです。 htmlのページは、Google Analyticsのトラッキング コードを</body>タグの直前に貼り付けたのですが、phpのページはbodyタグがありません。<?php で始まり、?> で終わっていますが、どこにトラッキング コードを入れたらよいのでしょうか? 下記のように<?php --- ?>の外側にhtmlと同じタグを付けて、</body>タグの直前にトラッキングコードを入れて問題はないでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <?php | | | ?> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> var pageTracker = _gat._getTracker("UA-xxxxxx-x"); pageTracker._trackPageview(); </script> </body> </html> 以前の担当は離職して連絡が取れず、どうしたらよいか困っています。 どうぞよろしくお願いします。

  • PHPを動作させたいのと・・・ダウンロード回避

    携帯向けのサイトを作成しているのですが、サーバーの設定と構文でいろいろつまずいています。 かなり検索して調べてみたのですが、なかなか肝心な所が見つかりません。 また、設定をしても、「出来ていたのが出来なく」なったりと壁にブチ当たり質問に来ました。 サーバー環境 さくらインターネット(レンタルサーバー) PHP バージョン4.4.8(変更の予定はありません) 状況 PHPでホームページを作成していますが、拡張子を.phpのまま作成しており.htmlでもPHPが動作させたいのですが、設定がうまく出来ずに.phpのままやる事にしました。 作成して行くうちにxml形式で作成した方がいい事がわかり.xhtmlでPHPを動作させようと思いました。 しかし、.htaccessと宣言等は簡単に出来てxmlで記述&動作する事を確認しました。 そこで、最初の問題と同じく.xhtmlでPHPが動作させようとしましたが、これが全くうまく行きませんでした。 作業が進まないので、PHP自体でxml宣言してみたらうまく行っているようです。 .htaccessの内容 AddType text/html .php .html .htm .xhtml AddType application/x-httpd-php .htm .html .xhtml AddType application/xhtml+xml .php sample.phpの内容(http://www.samle.ne.jp/sample.php) <? header('Content-Type: application/xhtml+xml'); echo '<?xml version="1.0" encoding="Shift_JIS"?>'."\n"; require_once( "ick/cons.inc" ); require_once( "ick/db.inc" ); require_once( "ick/bas.inc" ); require_once( "ick/prokeitai.inc" ); $db = new CDatabase( DBNAME ); $tbl = new CRecordset; switch($g_info["carrier"]) { case "Do": ?> <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.3) 1.0//EN" "i-xhtml_4ja_10.dtd"> <? break; case "au": ?> <!DOCTYPE html PUBLIC "-//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtml-basic.dtd"> <? break; case "So": //まだdocは設定していない ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <? break; default: ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <? } ?> 以下省略(してもよかったかな) 【問題発生】 この状態だと各キャリアで見た時はまったく問題無いのですが、パソコンのブラウザで見ると問題が発生しました。 URLにhttp://www.samle.ne.jp/sample.phpを入れて実行すると【ダウンロードしますか】となってしまいます。 (一部のブラウザFirefoxでは正常に動作しました。) 同じくhttp://www.samle.ne.jp/、http://www.samle.ne.jp/index.html、http://www.samle.ne.jp/index.htmと入れても【ダウンロードしますか】となります。 .htaccessの設定だと思うのですが、知識が浅いので検索した先でみたものを理解するにも難しくここに来ました。 どのような設定にすればうまく出来るか良きアドバイスお願いします。 【希望】 (1)拡張子.xhtmlでPHPを動作させたい (2)(1)にしなくてもいいので、パソコンのブラウザで【問題発生】の症状を回避したい ホームページとして認識して欲しいもの .html .xhtml .htm .php PHPが機能して欲しい拡張子 .html .xhtml .htm .php よろしくお願いします。

    • 締切済み
    • XML
  • ASP記述式

    今、PHPの勉強をしているのですが・・最初の方でいきなりASPの記述式についてコードが書いていました。物凄く簡単なコードなのですが、下記のコードの中でASP記述式の「はじめまして(*^_^*) 」だけが表示されません。どうしたら表示されるのでしょうか?ご教授よろしくお願いします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <p> <b>基本形:</b><br> <?php echo"はじめまして(*^_^*)"; ?> <p> <b>短縮形:</b><br> <? echo"はじめまして(*^_^*)"; ?> <p> <b>スクリプト記述形:</b><br> <script language="PHP"> echo "はじめまして(*^_^*)"; </script> <p> <b>Active Server Page(ASP)式記述:</b><br> <% echo"はじめまして(*^_^*)"; %> </body> </html>

  • クッキー送信

    以下のコードでクッキーが送信できると思ったのですができません。 どこがいけないでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> <?PHP if(!isset($_COOKIE['visited']))// { //はじめての訪問 $count=1; echo"<p></p>"; } else { echo"cookie up<br />"; $count = $_COOKIE['visited']; $count++; } setcookie('visited',$count);// echo "Hello!!<br />"; echo "your ${count} visited!<br />"; echo '<a href="cookie.php">cookie</a>' ?> </body> </html>

    • 締切済み
    • PHP
  • phpのフォーム入力で

    phpの勉強初日なのですが、さっそくつまづいてしまいました。 買った本に沿って、簡単なフォーム入力のhtmlファイルと、 その処理のphpファイルを下記のように作ってみたのですが、上手く行きません。 htmlのフォームからのpostは出来ているようなのですが、 phpファイルがコールされると、phpファイルのソースがそのまま表示されてしまって、 postした文字列がechoされません。。。 初日でつまづいてしまっていきなり挫折しそうです。。。 どなたかお詳しい方、お教えいただけると幸いです。 ■input.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>input</title> </head> <body> <form action="inputphp.php" method="post"> <label for="my_name">お名前:</label> <input id="my_name" type="text" name="my_name" size="15" maxlengh="255" value=""/> <input type="submit" value="送信"/> </form> </body> </html> ■inputphp.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>inputphp.php</title> </head> <body> <?php print($_REQUEST['my_name']); ?> </body> </html>

    • ベストアンサー
    • PHP
  • phpでreadfile(include)した結果に?が出力される

    phpで以下のようなA,Bの2つのファイル構成にした際に ブラウザでAをアクセスし、ソースを表示するとreadfileした結果の前に「?」が出力されます。 「?」と出力されるのが何か問題だと思うのですが、分かりません。 ご指南をお願いいたします。 ?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> Aファイル <?php readfile('inc/xhtml.inc'); include('inc/dbcon.php'); include('inc/cm468_2.inc'); ?> ----------- Bファイル <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> -------------------------------- 出力結果 ?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

    • ベストアンサー
    • PHP
  • document.locationで変数使用したい

    document.locationに変数の値を使用しようとしたのですが、どうすればできるかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 なお、下記がサンプルソースとなりますが、js_urlにPHPで取得した値は入っております(alertで確認しました)。 その為、本件はPHPとJavaScriptの連携の問題ではなく、document.location内で変数を使用する際の書き方に問題があると思います(ブラウザ上で確認した所、「'document.location = "http://oshiete.goo.ne.jp/"'」と出力されていれば動作するのではと思いますが、「'document.location = js_url'」と出力されており、変数の中身が展開されていませんでした(シングルクォーテーションで囲まれている為、変数と認識していないと思われますが、どう記述変更すればよいか分かりませんでした))。 【ソースコード】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sample</title> <?php $php_url = "http://oshiete.goo.ne.jp/"; ?> <script type="text/javascript"> window.onload = function() { // setTimeout('document.location = "http://oshiete.goo.ne.jp/"', 2000); var js_url = "<?php echo $php_url; ?>"; alert(js_url); setTimeout('document.location = js_url', 2000); } </script> </head> <body> <p>Sample</p> </body> </html> 以上、よろしくお願いします。

  • スクロールメニューが宣言を入れるとIEだけでしか動作しないので、困っています。

    サイドメニューバーをスクールに合わせて動く、スクリプトを使っていますが、 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">を入れると、 IEでしか、動きません。 また、上記の宣言を抜くと、IE以外では動きますが、 IEでのCSS表示が崩れてしまいます。 原因を教えてください。 使用しているスクリプトは下記です。 <script type="text/javascript"> var timer window.onload = scrolltop; window.onunload = stoptimer; function scrolltop() { var menu = document.getElementById('scrollmenu'); var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; menu.style.top = scrollTop; timer = setTimeout("scrolltop()",10); } function stoptimer() { clearTimeout(timer) } </script> 何卒、宜しくお願いします。

  • PHP 問い合わせフォームの文字化け

    はじめまして。 会員648です。 Websiteを作成し、問い合わせフォームで 入力をHTML、チェック・確認画面、送信をPHPで 作成しました。 初心者なので、サイトでの作成事例をまねております。また文字化けは UTF-8を書けば良い ということも サイトにあったので、とりあえずそうしました。 しかし 他のHTMLは正常に表示しますが、HTMLの入力画面、PHPチェック画面 すべて  文字化けします。 入力画面は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <form method="post" action="check.php"> ですが 文字化け表示となります。 内容確認画面は check.php で <?php // フォームデータが空の場合は処理終了 if (empty($_POST)) { echo "処理終了"; exit; } // セッションの開始 session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> で始まります。 詳しくPHPを知りませんので、どこが問題なのか 教えていただけませんでしょうか。 なお、テスト環境は 自分のPCで Xampp をインストールして、htdocs 配下に すべての HTML, CSS, image,php を 置いております。 なにとぞ よろしくお願いいたします。

    • 締切済み
    • PHP
  • DOCTYPE宣言とdocument.body.clientHeight

    お世話になります。 ブラウザのサイズを取得するにはどうすればよいのでしょうか? document.body.clientHeightで取得出来るのは分かりましたが DTDにより動作したり、しなくなるのも分かりました。 ×動作しない <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ○動作する <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 後者のものですとIEでは動作しますが、firefoxでは動作しません。 何か対処法は、御座いませんでしょうか? 一番望む形は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> の宣言で、ブラウザサイズが取れるようになるのがベストです。 CSSを使用しているので<?xml version="1.0" encoding="UTF-8"?>を入れると 表示モードが互換になるので・・・。 対応したいブラウザはIE6.0、firefox,Safariです。 一応ソース <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script> function init(){ var bodyHeight = document.body.clientHeight; alert(bodyHeight); } </script> </head> <body onload="init();"> <div> ほげ </div> </body> </html>