2017-08-01 3 views
0

申し訳ありませんが、長いテキストです。別途PHPコール関数があります

私は、特定の行為が発生したときにphp関数の実行をトリガーするアイデアを探しています(異なるディレクトリにあり、テスト済みで同じディレクトリにあります)。

システムはDebianとphp framework yiiです。

APIを使用すると、リモートサーバーから新しいデータを受信し、受け取ったデータの特定の値に対して、別のプロセスで機能を開始する必要があります。完了を待つ必要はありません。 API応答時間のため、この関数をAPI応答時間に統合することはできず、統合によってAPIを使用できなくなりました。

私はStackoverflowと他の多くの例について数十の答えを読んだことがあります。

テストのために、特定の場所に新しいフォルダを作成しようとしましたが、ファイルが作成されませんでした(アクセス権の問題ですが、メインコード-apiから実行すると確認できません)。 2つの引数が、それはPDFファイルを印刷するにはFPDFを使用しています

  • コール内部クラスは存在しない場合は、フォルダを作成し
  • を機能させるAPIから受け取った

    • パスを: は、次の操作を行うことになっています。
    • ドキュメントを保存してPHPMailerで郵送してください。

    追加インストールが必要なためpcntl_forkを使用できません(これは許可されていません)。

    扱うトピック:

    • pcntl_forkとフォーク(。実行は、それに到達すると停止します)
    • のpopen/pclose、幹部、は、proc_open/proc_close(無応答と実際に入力された機能を、それを確認することはできません)。

    もちろん、この状況ではincludeとrequireの使用の可能性は除きます。

    は、APIコードをリリースするが、ここで私はやってそれを求めていたものであることはできません。

    background.php

    $docs_dir='test_folder'; 
    if (!file_exists('/var/www/created_documents/'.$docs_dir)) 
    { 
        mkdir('/var/www/created_documents/'.$docs_dir, 0777, true); 
        chmod('/var/www/created_documents/'.$docs_dir, 0777); 
    } 
    

    そして、それは何もしません。

    私はそれにジャンプするために私がAPIコードで使用した例はほとんどありません(他の多くは作業中に削除されました)。

    $proc = popen('php ' . __DIR__ . '/background.php &', 'r'); 
    return $proc; 
    while (!feof($proc)) 
    { 
        $data = fgets($proc); 
        var_dump($data); 
    } 
    
    
    exec("php background.php"); 
    
    
    $cmd = "php background.php"; 
    $timer = popen("start ". $cmd, "r"); 
    pclose($timer); 
    
    
    exec($cmd . " > /dev/null &"); 
    pclose(popen("php background.php &","r")); 
    
  • +0

    キューの使用のように聞こえますが、スタックはジョブを実行してバックグラウンドで処理します。 –

    +0

    darでの開発が難しい場合は、次の2行のファイルにエラーを記録してください。ini_set( "log_errors"、1); ini_set( "error_log"、path_to_file); –

    答えて

    1

    curl and its async funcionalityを使用して内部httpリクエストを個別に行うことができます。

    または、1つの部分がイベントを発生させ、もう1つの部分がそれを消費しているキューイングメカニズムを使用することができます。 RabbitMQまたはGearmanがこれを行うことができます。

    +0

    新しいものをインストールすることができないので、Curlはオプションとしてしか見えません。そのアプローチで試し続けます。 – Aleks

    +0

    ありがとうございます。私はその間に別のサブプロジェクトに変更しなければならなかったので、後でそれを試してみます。 – Aleks

    関連する問題