- ベストアンサー
PHPからPOSTで他のPHPを実行する方法
- 初心者が悩むPHPでアクセスログ収集する方法とは?
- PHPから他のPHPを実行する方法を探しています。
- file_get_contents以外でPHPからPOSTを送信する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すませんソースは全部見ません。 収集.phpの実行結果がhoge.phpの表示必要でないなら 例えば 収集.php を <? $poststr = serialize($_POST); $fp = fopen("filename","w"); fwrite($fp,$poststr); exec("/path/to/shori.php "&"); とでもすればいいではないですか? 動作確認も何もしてないしファイル名もわけないとダメでしょうから上記そのまま絶対動きませんが、
その他の回答 (2)
- muuming2001
- ベストアンサー率23% (202/847)
そのログを処理する部分てのは表示に関係ないのに、処理が終わるまで表示されないような作りになってるのが問題ってこと?? その処理結果が表示結果に反映されるのであれば、処理を待たないとどーしようもないと思います。 そうではないなら非同期処理剃れば良いと思います。 ・ exec( ) でコマンドを &付きにしてバックグラウンドで実行 ・データだけ書き込みさせて crontabでシェルスクリプトやPHPスクリプトで重い処理は別プロセスで実行 とか?
補足
すいません、本当に初心者が何とかやってる程度ですので、もう少し詳しくご説明いただいてもいいでしょうか? やはりソースが無いとわかりにくいと思いますので、現在の処理を下記にまとめましたのでご確認いただいてもいいでしょうか? ------------------------------------------------------- 【ユーザーが閲覧するページ】http://aaa.com/index.html ------------------------------------------------------- <!DOCTYPE html> <html lang="ja-JP"> <head> ~ </head> <body> <img src="https://bbb.com/収集.php" /> ~ コンテンツ ~ </body> </html> ------------------------------------------------------- 【ユーザー情報収集用PHP】https://bbb.com/収集.php ------------------------------------------------------- <?php header("Content-type: image/png"); header("Cache-control: no-cache"); readfile('https://bbb.com/111.png'); //各ユーザー情報取得処理 $user_ip = '取得したIPアドレス'; $user_data = '取得した全ユーザー情報'; $url = 'https://bbb.com/ログ書き込み.php'; $data = array( 'd1' => $user_ip, 'd2' => $user_data ); $data = http_build_query($data, "", "&"); $op = array('http' => array( 'method' => 'POST', 'content' => $data, )); $op = stream_context_create($op); $co = file_get_contents($url, false, $op);// 個々の処理に時間がかかってるみたい ?> ------------------------------------------------------- 【ログ書き込み用PHP】https://bbb.com/書き込み.php ------------------------------------------------------- <?php try{ $pdo = new PDO('mysql:host=ホスト;dbname=DB名;charset=utf8', 'ユーザー名', 'パスワード'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); }catch(PDOException $e){ // エラーログ書き出し処理 die(); } try{ // POSTで受け取った$user_ipを元に、DBから地域情報取得 $past_file_name = '生ログ.log'; if( !file_exists($past_file_name) ){ touch( $past_file_name ); chmod($past_file_name, 0606); } function addEndRow($str, $file_name) { $contents = file_get_contents($file_name); $contents = $contents . $str; $re = file_put_contents($file_name, $contents); } $str = $_POST['user_data'].','.$地域情報."\n"; addEndRow($str, $past_file_name); }catch(PDOException $e){ // エラーログ書き出し処理 die(); } $pdo = null; ?> ------------------------------------------------------- こんな感じになっています。 本当にお手数をおかけして申し訳ないのですが、ご助言いただけますとホントに助かります。よろしくお願いします。
- muuming2001
- ベストアンサー率23% (202/847)
直接の回答では無いですが、サーバーが複数にまたがってる訳でもないのにそのような事をしている理由がわかりません。 全部hoge.php内にかけるでしょ? 別プロセスにする理由がわかりません。
補足
すいません、説明が足りていませんでした。 サーバーはまたいでいます。 また、質問にもあるように、地域情報を取得するためにBIGデータにクエリを飛ばして結果を受け取るの処理に多少時間がかかります。その処理をfuga.phpに裏で頑張ってもらう事でhoge.phpの処理速度を早くして、ユーザーのページ閲覧をサクサクしたい、というのが趣旨になります。 huga.phpに全て書きこんでしまう事も出来ますが、それでは結局全体の処理に時間がかかってしまってユーザーのページ閲覧がサクサク動かなくなってしまい、意味が有りません。 それとも、全部hoge.phpに書いてもサクサク動かせる良い方法があるようでしたら、ぜひ教えてください。 必要であればソースを掲載します。
お礼
ありがとうございます! とりあえず頂いた物を基に、調べてみます。 まだまだ他にも御助言頂けそうなものがあれば受け付けていますので、よろしくおねがいします!