みなさん、こんにちは。簡単なスクリプトをホストできる優れたホスティング会社の推奨事項が必要です。
スクリプトのコードは無限ループであり、ループが終了するまでに 6 時間以上実行されることを期待しています。 しかし、手動で終了するまで永久に実行できれば幸いです。
set_time_limit(0);
while ($play != 'stop'){
// keep running this code
sleep(5);
}
私のホスティング会社は 3 分後に終了し、500 サーバー エラー リクエスト タイムアウトが発生します。
set_time_limit(0); がある場合でも。
スクリプトで、サーバーでの最大実行時間は1500です
それでも、タイムアウトが発生します。また、ホスティング会社に連絡しましたが、原因について積極的な回答はありませんでした.彼らはまだチェックしていると言いました. 推奨事項が必要です。タイムアウトせずにホスティングで同様のコードを実行する場合はお知らせください。
明けましておめでとうございます
これを許可するホスティング会社はないと思います。 必要なく、高い CPU 使用率が生成されます。 全体として達成したいことを教えてください。 スクリプトを 5 ミリ秒ごとに無限に実行する必要がない方法があるに違いありません。
2いいね
本当に、私も同じ恐怖を感じていました。
私がやろうとした簡単なことは、バイナンス注文が約定または約定されるまでチェックすることです。
$sendorder = binance_check_order(): // this returns a set of ids
While($sendorder != 'FILLED'){
// Keep checking
}
それは単純なphpで動作し、他の言語よりもphpを少しよく知っていますが、問題はタイムアウトです。
また、このループを手動でトリガーする必要がないわけではありません。ループは、tradingview から送信されたシグナルからトリガーされるため、すべてが自動フローです。
そのため、コマンドラインまたは CLI で開始できるものではありません。
実際にphp ifステートメントでCLIを開始できない限り。
ほとんどの調査から、無限ループは非常に悪い考えであることがわかりました。
実装方法がわからない場合でも、頭に浮かぶこの2つの方法を使用して目的を達成する必要があります。
-
チェックを行う php ファイルを作成し、次に ajax スクリプトまたは JavaScript を使用して、 setInterval () を使用してスクリプトにデータを呼び出したりポストしたりします。
そのため、php ファイルがポスト データを受信すると、チェックが実行されます。 したがって、これは 5 秒ごとに発生します。これは、JavaScript を nodejs 環境または JavaScript をリモートで実行する環境で実行またはホストする必要があることを意味します。 -
この機能を 5 秒ごとにチェックするように php デーモンを開始しますが、デーモンが実行されているかどうかを確認する時間を設定します。
言及された 2 つの方法はすべて、それらを実装する方法、それらの深刻な影響、およびセキュリティ ループ ホールまたは露出について非常に無知です。
これがあなたが取る必要がある重要なことだと思います。
わかりますが、ハンマーを持っていると、すべてが釘に見えます。
あなたの目的が正確にわかっていれば、誰かがその仕事に適したツールを教えてくれるでしょう。
PHP は、スクリプトを実行し、実行を完了し、最後にその結果を提供するように設計されています。 連続して実行することは想定されていません。 cron ジョブを定期的に実行することはできますが、それが高い頻度でどれほど効率的かはわかりません。
あなたのニーズにより適した他の方法があると確信しています。
cron ジョブは実際には見当がつきません。何をアーカイブしようとしているのかを説明しました。また、2 つのオプションを念頭に置いています。
CLIアプローチを考えています。
スクリプトとして実行されているphpで無限ループが発生するため、悪い考えです。
この手順を考えています。
- php デーモンを手動で開始して 5 秒ごとにデータベースをチェックし、ステータスが保留中のレコードをデータベースで確認すると、orderid 列から orderid を取得し、check.php という名前のスクリプトを呼び出します。
したがって、check.php が応答 FILLED を返すたびに、update.php という名前の別のスクリプトを呼び出します。このスクリプトは、テーブルを更新し、id が orderid である close にステータスを送信します。
その後、ループはデータベースを再度チェックし続け、ステータスが保留中の行を探します。
そのようなものは無期限に。
では、誰がデータベースの変更を行っているのでしょうか?
複雑な分析を使用していると思いますが、単純化させてください。 5 秒ごとにデータベースをチェックして、データベースで BREAD という単語がいつ検出されたかを確認して、削除できるようにしたいと考えています。
だから私はdelete.phpというファイルを作成しました
ファイル内にはこのコードがあります
$sql = $con->query("delete from table where box = 'BREAD'");
通常、追加することで、このスクリプトを無期限に実行できます
while (true){
$sql = $con->query("delete from table where box = 'BREAD'");
}
シグナルまたはトレーディングビューからの応答から作成されます。
私はtradingviewからシグナルを受け取ると、データベースに詳細を追加し、ステータスを保留に設定します.次に、無限ループがorderidを取得し、バイナンスのチェックを開始して、注文がいつFILLEDになったかを認識し、満たされると、完了ステータスでデータベースを更新します
最初にワークフローをどのように設計したかはそれです。
- トレーディングビューからシグナルを受け取りました
- データベースにレコードを追加します
- 注文を送信し、binance からの応答として orderid を取得します。
- orderid が空でない場合はループを開始し、ループは注文がいつ約定されるかをチェックします。
- orderid が満たされると、データベースが更新され、ステータスが完了に設定されます
- 次にループ出口。
シグナルがtradingviewから送信されるたびに、再び開始されるのを待っています。
これはうまく機能しますが、注文が約定または実行されるまでに数分または数時間かかる場合があり、それまでに while ループがタイムアウトする場合があります。
CLI を使用してこのワークフローを達成したい場合、停止しない無限ループを開始する必要がある場合を除いて、それは不可能です。 次に、デーモン内で、ループ内でさまざまなタスクを実行します。
または、スクリプト関数として while ループを使用する代わりに、ステージ 4 に達したときに CLI またはデーモンを開始する方法がある場合は、CLI を自動的に開始します。
CLI を起動してデーモンを実行する方法を確認し、スクリプト Web サーバー関数として直接呼び出される while ループと比較して、デーモンが 2 時間以上続くかどうかを確認します。
わからないこと…
何かが変化した場合、取引ビューからシグナルを受け取り、注文をデータベースに入れます。 では、注文がそのステータスを変更したときに、なぜ取引ビューからシグナルを受け取らないのでしょうか? これはそれを処理する正しい方法です
ステータスは TradingView からではなく、注文後に Binance からのみ取得されます。
- このレートまたは価格での購入を求める Tradingview からのシグナル。
- シグナルの詳細をデータベースに追加し、デフォルト値を保留に設定します。
- 注文をバイナンスに投稿する
- 注文ステータスが NEW 注文から FILLED 注文にいつ変わるかを知るために、binance への API 呼び出しを行うデーモンを開始します。
- データベースを更新し、注文を完了としてマークします。
- ループを終了します。
これは、Binance である種のスクリーン グラブを行っているように聞こえますか? Binance には API があります。 ドキュメント全体を読みたくないのですが、これが正しい使い方だと思いますか?
画面グラブとは? 私はそれが何であるかわかりません。binance が提供する API は、アクセスするために orderid または clientOrderId が必要な注文ステータスを確認します。
この API 呼び出し fapi/v1/order を使用します
注文をバイナンスに送信するためのいくつかのパラメーターを使用します。
fapi/v1/openOrder
‘orderid’ => ‘685884678’,
‘シンボル’ => ‘BTCUSDT’,
上記のコードを使用して、注文ステータスとして NEW、FILLED、CANCELED を返す注文ステータスを確認します。
したがって、すべての質問または私の質問の本質は、ステータスが FILLED になるまでこのコードを自動的に実行する方法です。
だから私はwhileループを使用していましたが、タイムアウトし続けます
これはホスティング会社ではできないと思います。 この場合、サーバーをレンタルする必要があります。
これは関係ないかもしれませんが、この方向に目を向けるべきです。
root アクセスできる VPS をセットアップします。 これを管理するマイクロプロセスを作成します。 このようなもの (Apache/Nginx なしで 10 MB 未満)。 Cron を使用して毎晩データベースから ftp サーバーにエクスポートしています。
1 いいね
https://cron.go4webdev.org/repeat
これは、誰かがブラウザでアクセスせずにページを更新してアーカイブできますか?
gocron の最小間隔は 60 秒ですが、5 秒間隔のプロセスを見ているためです。
高価なアプローチのように聞こえますか? コストを知ることができますか?