2013-04-06 3 views
9

exec()コマンドを使用してCasperJSがPHPによって呼び出されています。 CasperJSがWebページの一部を取得するなどの作業を行った後、取得したデータをどのようにPHPに返すことができますか?CasperJSがデータをPHPに戻す

答えて

8

stdoutの出力を配列にリダイレクトできます。 thisページで

それはあなたが行うことができます言う:

string exec (string $command [, array &$output [, int &$return_var ]]) 

それが言うように行く:

を出力引数が存在する場合、指定された配列は、のすべての行で満たされますコマンドからの出力。

したがって、基本的にexec( 'casperjs command here、$ array_here);を実行できます。

24

私はCasperJSからPHPのような別の言語にデータを転送する最善の方法は、サービスとしてCasperJSスクリプトを実行していると思います。 CasperJSはPhantomJSで書かれているため、CasperJSはMongooseというPhantomJSの組み込みWebサーバーモジュールを使用できます。内蔵Webサーバーは、ここでCasperJSスクリプトはWebサーバーを起動する方法について例をhere

を参照してくださいどのように機能するかについては

//define ip and port to web service 
var ip_server = '127.0.0.1:8585'; 

//includes web server modules 
var server = require('webserver').create(); 

//start web server 
var service = server.listen(ip_server, function(request, response) { 

    var links = []; 
    var casper = require('casper').create(); 

    function getLinks() { 
     var links = document.querySelectorAll('h3.r a'); 
     return Array.prototype.map.call(links, function(e) { 
      return e.getAttribute('href') 
     }); 
    } 

    casper.start('http://google.fr/', function() { 
     // search for 'casperjs' from google form 
     this.fill('form[action="/search"]', { q: 'casperjs' }, true); 
    }); 

    casper.then(function() { 
     // aggregate results for the 'casperjs' search 
     links = this.evaluate(getLinks); 
     // now search for 'phantomjs' by filling the form again 
     this.fill('form[action="/search"]', { q: 'phantomjs' }, true); 
    }); 

    casper.then(function() { 
     // aggregate results for the 'phantomjs' search 
     links = links.concat(this.evaluate(getLinks)); 
    }); 

    // 
    casper.run(function() { 
      response.statusCode = 200; 
      //sends results as JSON object 
      response.write(JSON.stringify(links, null, null)); 
      response.close();    
    }); 

}); 
console.log('Server running at http://' + ip_server+'/'); 
+8

私は、これは理論的には良い手法であることに同意一方で、実際のキャスパーのphantomjsリソースを解放しない、直線的にそれぞれの要求でメモリの使用を増加することが表示されます。私は '' casper.clear() '' 'を追加し、clear()を' ''( '' clear()の中から) '' 'を呼ぶようにハッキングしてみました。近くに電話をかけても、問題を解決できないように見えます。 – danmux

関連する問題