2012-02-24 18 views
0

私は別のPHPスクリプトを使用してバックグラウンドでPHPスクリプトを実行したいです。execを使用しないバックグラウンド・プロセスとしてPHPから起動PHPファイル()

私は心の中でこれを持っていた:

exec('/usr/bin/php background.php &'); 

私のウェブホストは)(幹部への唯一のアクセスを無効にしています。私は考えることができる

唯一の他の方法は、スクリプトにパイプされた電子メールフォワーダに)(メールを送信しているが、それはむしろソリューションよりも奇抜な回避策です。

誰か解決策を知っていますか?

+0

あなたは 'システム()'や 'もしくはshell_execを()'てみましたか? – Alex

+0

はい、無効になっています。そして、バックチックも。 – ONOZ

+0

私はバックグラウンドプロセスを実行するための解決策を見つけることができません – Alex

答えて

5

あなたはカールを使用して、それを実行できるようにWebリソースとしてスクリプトをロードすることによって、それを実現できました。 そのスクリプトは、要求が同じサーバから来たかどうかをチェックすることができ、公衆から保護する必要がある場合:スクリプトはに多くの時間を要するので、もし

if($_SERVER['SERVER_NAME'] != 'localhost' 
     || $_SERVER['REMOTE_ADDR'] != '127.0.0.1' 
     || stripos($_SERVER['HTTP_USER_AGENT'], 'wget')===false 
     ) 
{ 
    // Access Denied!! 
    die(); 
} 

は、カールとの非同期要求を行うようにしてください実行するか、元のユーザーの要求をハングしないでください(curl_setopt($handle, CURLOPT_HEADER, false);

したがって、スクリプトを実行する必要があることが分かっているページからの計画で、スクリプトへのHTTPリクエストを開始します。カールライブラリー):

$handle = curl_init(); 
curl_setopt($handle, CURLOPT_URL, 'http://localhost/your_script.php'); 
curl_setopt($handle, CURLOPT_HEADER, false); 
curl_exec($handle); 
curl_close($handle); 

スクリプトで、上記のスクリプトを使用して、現在のサーバーからの要求を保護し、そのジョブを実行します。

更新この質問で述べたように

// Send the response to the client 
header('Connection: Close'); 
// Do the background job: just don't output anything! 

更新II
私の確認:あなたはスクリプトとして接続が実行されて閉じるように、このヘッダを送信することができ、スクリプトジョブでsending a non-blocking HTTP POST request 自分自身の答え、私はcurl_setopt($handle, CURLOPT_HEADER, false);が非同期要求を作成しないことを確認しました。私はまだそれを行う方法を見つけていない。

+1

素敵な答えをありがとう! バックグラウンドプロセスが終了するのを待っています。 cURLで0秒のタイムアウトのようなものを設定する方法はありますか? – ONOZ

+2

ああ、持っています! 'curl_setopt($ handle、CURLOPT_TIMEOUT、1);' これは競合状態を生成しますが、接続に1秒以上かかる場合、これは動作しません。 また、ユーザーは1秒余分に待っていますが、私はそれを受け入れなければならないと思います。 – ONOZ

+2

ジョブがまだ動作している場合、バックグラウンドリクエストを実行するために2番目のビジターをブロックする方法を開発する必要があります。 –

1

私はこれをテストしていませんが、もしあなたがcurlを使用できるのであれば、ignore_user_abort()でbackground.phpを作成し、タイムアウトの少ないメインスクリプトからカールさせることができます。カール要求がタイムアウトするのを待たなければならないため、ユーザーに表示されるスクリプトはわずかに遅れますが、バックグラウンドは引き続き機能するはずです。

関連する問題