
いつもお世話になっております。
ある処理で重たい部分をバックエンド側に送っています。(/path/index.php)
$cmd = '/usr/local/bin/php /path/test.php '. $q_str1 .' '. $q_str2 .' > /dev/null &';
exec($cmd);
test.php内で処理が完了した場合に元の画面へ知らせる方法などあるのでしょうか?
今はしょうがないので、(/path/index.php)の完了画面に「ボタン」を設け、何分か経過後任意に押下すれば、
(/path/to/test.php)の結果を取得するというアナログ(?)な方法をとっています。
以下はtest.phpの処理後に書いた1行です。馬鹿げたもので勿論動作しませんが、希望はこんな感じです(汗)。。。
header( "Location: "."http://". $SERVER_NAME ."/path/index.php?id=FromBack" );
exit;
バックエンドでの処理終了後、結果を表示させたい。
PHPだけで可能でしょうか?
もう1つ。
バックエンド側に渡す時に引数も渡しているのですが、$argv内で4つまでしか配列が取れず、5つめ以降は以下のように4つめで結合して取得されます。
[argv] => Array
(
[0] => /path/index.php
[1] => q_str1
[2] => q_str2
[3] => q_st3q_str4q_str5
)
これはargvの制限なのでしょうか?
以上、宜しくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
JavaScriptで非同期に並列でやるとして簡単に考ると、
------
download.php // 1URLをDLするページ
search.php // DLしたものを検索
------
検索ボタンを押下。
1000回非同期にdownload.phpにリクエスト。
1000回レスポンスがたまればsearch.phpにリクエスト。
検索結果を表示。
------
DLする時に以前と更新日が同じものは内容まではDLしないとか
何日以内にDLしていればDLしないとかすれば多少は速くなるでしょうけど、
目的が検索エンジンの類ならまぁ仕様はいまいちですね。
No.3
- 回答日時:
たとえば本体として、
<div id="display"></div>
を用意し、読み込むファイルを
<?php
sleep(10);
echo '完了';
?>
として用意するとします。ここで何か送信ボタンを押すと
<div id="display">読み込み中</div>
にかわり(ページのリロードはありません。画面の一部がリロードされる感じでしょうか。)、さらに十秒後に
<div id="display">完了</div>
が得られるような、そのようなことを可能にする仕組みです。
ただし、ある程度Javascriptの知識が必要になりますので、いろいろと時間がかかるかもしれません。
ですのでむしろ、この場合フレームをうまく工夫して使うと手軽でいいかもしれません。
No.2
- 回答日時:
execやsystemなどで
> /dev/null
をつけると、実行したあと即座に次の行に進むようですので、実行した向こう側で何が起こったかなどは一切わかりません。
$hoge=exec(....);
などとすれば何か結果を得ることが可能ですが、こうすると実行した向こう側の処理が終わるのを待つので結局バックグラウンドでの処理ではなくなってしまいます。
「完了したことを元の画面へ知らせる」必要があるのであれば、
ajaxなどを試してみたほうがやりたいことができるのではないかと思いますが、どうでしょうか...
この回答への補足
>ajaxなどを試してみたほうが...
PHPをかじりたてでして、ajaxは名前しか。。。
どういった事が可能なのかイメージだけでも教えて頂けないでしょうか。
No.1
- 回答日時:
前回のつづき?
execでコマンド実行しても、非同期じゃないのでなんら高速化に
つながらないのでは?
前回もかきましたが、cronなどの定期処理でwgetをあらかじめ
実行しておき、その結果をテキストで取っておけばよいのでは?
処理の終了時点で、最終更新日時をログにおとしておけば、
それを見て更新済みかどうか判断できるので。
この回答への補足
>前回のつづき?
はい。。。
>execでコマンド実行しても、非同期じゃないのでなんら高速化に
>つながらないのでは?
前回、バックエンドで実行する前は、file関数で1000行以上を処理する場合、2分以上かかり、httpのレスポンスがタイムアウトしてしましまいたが、同じ処理をバックエンドで実行すると問題なくスムーズに処理できました。
>cronなどの定期処理でwgetをあらかじめ実行しておき..
あらかじめには実行はしたくありません。
処理に多少時間がかかっても、「入力→検索実行→結果一覧取得」の流れはセットにしたいのです。
今回の質問は、検索実行が終了後『何らか』のタイミングで処理終了を取得し、自動で検索一覧が取得できないかと考えています。
質問でも書きましたが、完了画面の「ボタン」を押下すれば、一覧が取得完了した場合は取得できるプログラムは完成したのですが、もっとスマートなやり方が存在するのかと思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ECCUBE4のページ管理でPHPを実行させたい 1 2023/04/06 11:42
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP 「teratail」での回答内容がいまいちわかりません。 1 2022/09/10 05:05
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(プログラミング・Web制作) .htaccessファイルの修正がこれで問題ないかどうか 1 2022/04/21 08:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPで文字列の検索
-
Cronで同じ処理を複数同時に実...
-
phpをオフラインで動かしたい
-
phpでお問い合わせフォームを作...
-
if文が入れ子の場合の条件の解釈
-
PHPがどうしても反映されません
-
Content-Typeが機能していない?
-
PHP関数mb_send_mailで送信する...
-
ApacheとPHPの連携
-
header関数について
-
初めまして、
-
ファイルシステム関数関係
-
下記のコードなのですが「C:\\H...
-
ブラウザのページキャッシュ機...
-
プログラミング作業効率を上げ...
-
マルチバイト関数
-
Xoops Cubeの設置がうまくゆき...
-
PHPでCSVファイルのデータを表...
-
サンプルソースのコロンの意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPが処理を途中でやめる。原因...
-
phpの処理中に画面表示ををする...
-
Smartyにて、文字検索
-
PHP内、ボタン押下と同時にリロ...
-
インスタンス化に伴うメモリ消...
-
フォームが送信されたかの確認...
-
APIで出てきたXMLをPHPで表示さ...
-
大量チェックボックスの実装方...
-
デバッグの仕方・・・
-
PHPの変わった閉じタグの必要性...
-
入れ子になっているHTMLタグも...
-
デフォルト、フロントコントロ...
-
タイムアウト時に次の処理へ移...
-
PHPで偶数と奇数を判断するには
-
CakePHPでのemptyの 0 判定に関...
-
Cronで同じ処理を複数同時に実...
-
チェックボックスをビット演算...
-
PHPの書き方について
-
条件分岐 if(elseif) switchの...
おすすめ情報