2012-02-22 12 views
0

私は、ユーザーがログインする必要のあるWebサイトを構築しており、認証はSESSION変数とDBに基づいています。システム関数呼び出し、任意の提案?

簡略化のため、このように説明します。 グループに所属する単純なユーザーがいて、グループ管理者がいます。それらのすべてがサブスクリプションを所有しています。グループマネージャーがサービスのアップグレードを決定すると、そのサービスはすべてのユーザーに対して直ちに実行されます。私はすべてのサブスクリプションを更新する必要があり、私は個々のサブスクリプションごとに個別に料金を請求する必要があります。

So.私は何をする必要があることはDBに移動して、一つずつ行く開始です:

1. charge 
2. receive status from cc company. 
3. update the DB entry accordingly. 
4. repeat for next simple user 

事は、グループマネージャがサービスを更新しているとき、私はこれかもしれない、バッチ処理を発射する必要があること、です完了するまでに時間がかかりますが、何らかの理由でグループマネージャーがブラウザを閉じると(停止ボタンを押すと、電源が切れ、接続が外れて何百もの理由があります)、アクションは完了しません。ユーザーは未処理のままになります。

これについては、PHPスクリプトを使用してシェルコマンドを起動する方法があると思いました。私はシステム( "php batch.php?ID = $ group_id?process = all")のようなスクリプトにパラメータを送りますが、これはおそらくジョブを完了させるでしょう。

私の問題は、SESSIONパラメータなどによって、ウェブサイト全体のユーザーとデータを認証することに慣れていることです。しかし、この場合(システムコマンドを呼び出す)、実際に誰が実際にそのスクリプトを解雇した。それはユーザーかもしれません、私が意図したスクリプトかもしれません。

ユーザーがそのスクリプトにアクセスすることを防ぎたいと思います。そのスクリプトが発行された後でそのスクリプトを完了させたいと思います。

どうすれば実現できますか?その他の提案はありますか?

ありがとうございます!

+0

システムコールを起動する前に認証を行い、bach.phpへのWebサーバアクセスを妨げます。 –

+0

このスクリプトへのアクセスを阻止するにはどうすればよいですか? – Ted

+0

ウェブサーバーのドキュメントを確認してください... google?そう? –

答えて

2
  1. php batch.php $group_id all)ARGVパラメータとして値を渡すこれらのレコードについて$_SERVER['argv']

に存在するかどうかをチェックし、$_SERVER['argv']は、コマンドラインの$_GETあります。 Webページはargv値を設定できないため、安全です。

もちろん、このファイルをWebディレクトリに置かない方がいいでしょう。

+0

まあ、私は$ _SYSTEM配列を見つけることができませんでしたが、明らかに予約された$ argv []、$ argcが役に立ちました、ありがとう! – Ted

+0

待って、何?私は '$ _SERVER'を意味しました。私の答えを更新しました。間違いなく$ argvと$ argcの使用を避けるべきです。 –

+0

ああ...なぜargvとargcを使用しないのですか? – Ted