मैं अपने php स्क्रिप्ट से एक phantomjs सर्वर चलाने के लिए चाहता था, फिर इसे एक कर्ल अनुरोध करें और इसकी प्रतिक्रिया पढ़ें (जो अंतिम संस्करण में जेनरेट पीडीएफ का मार्ग देगा) । कंसोल से phantomjs सर्वर फ़ाइल चलाते समय और ब्राउज़र में इसके पते पर नेविगेट करते समय, सब कुछ ठीक काम करता है। यही कारण है कि server.js फ़ाइल है:php से phantomjs सर्वर प्रारंभ करना और इसकी प्रतिक्रिया के लिए प्रतीक्षा
var server, service, page = require('webpage').create(), address, output,
html = '<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>';
server = require('webserver').create();
var rasterize = function(html, callback){
address = 'http://localhost';
output = '/Users/me/print.pdf'
page.viewportSize = { width: 600, height: 600 };
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
} else {
window.setTimeout(function() {
page.content = html;
page.render(output);
callback();
}, 2000);
}
});
}
service = server.listen(8080, function (request, response) {
response.statusCode = 200;
rasterize(html, function(){
response.write('<h1>BAR</h1>');
response.close();
phantom.exit();
});
});
मूल रूप से मैं, स्थानीय होस्ट addres खोलने कर रहा हूँ मेरी एचटीएमएल स्ट्रिंग के लिए पृष्ठ की सामग्री स्विचिंग और फिर पीडीएफ के रूप में प्रदान पेज बचत।
<?
function send_callback($data){
echo '{type: success, data: '.$data.'}';
}
function curl_post($url, array $post = NULL, array $options = array()) {
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 5,
CURLOPT_POSTFIELDS => http_build_query($post)
);
$ch = curl_init();
curl_setopt_array($ch, ($options + $defaults));
if(! $result = curl_exec($ch)) {
trigger_error(curl_error($ch));
}
curl_close($ch);
send_callback($result);
}
shell_exec('phantomjs '.escapeshellarg(dirname(__FILE__).'/server.js'));
//wait to allow server to start
sleep(5);
$data = array('html'=> 'foo');
curl_post('http://localhost:8080', $data);
?>
इसके अलावा कोई जादू यहाँ:
अब मेरी PHP स्क्रिप्ट आता है। मैं टर्मिनल में phantomjs server.js
कमांड निष्पादित करता हूं, और 5 के बाद (सर्वर में प्रवेश करने का समय) इसके लिए एक curlPOST अनुरोध करता है।
अब मैं दो मामलों है:
- अगर मैं कंसोल से php स्क्रिप्ट चलाने,
php script.php
के साथ सर्वर शुरू होता है के रूप में मैं इस प्रक्रिया चल देख सकते हैं और आइकन गोदी में दिख रहा है, लेकिन मैं कोई जवाब कभी नहीं मिल यह और पीडीएफ नहीं बनाया गया है। - यदि मैं ब्राउज़र से स्क्रिप्ट चलाता हूं, तो आइकन डॉक में दिखाई नहीं देता है, इसलिए सर्वर किसी अन्य तरीके से शुरू होता है। अभी भी कोई प्रतिक्रिया नहीं और न ही पीडीएफ।
क्या कोई मेरे कोड में कुछ भी गलत देख सकता है या इसे डिबग करने के किसी भी तरीके के बारे में सोच सकता है?
ओएसएक्स 10.7, php 5.3.6, phantomjs पर परीक्षण। उपयोगकर्ता _www सर्वर चल व्यवस्थापक विशेषाधिकार, फ़ोल्डर है जहाँ मैं फ़ाइलों को लिख रहा हूँ 777
डीबगिंग के मामले में, मैं 'shell_exec()' के आउटपुट को आउटपुट/लॉगिंग से शुरू करूंगा - बस 'echo' पर्याप्त होगा। चरण एक यह है कि इसे सीएलआई से काम करना है (यानी 'php script.php' चल रहा है) और उसके बाद इसे वेब से चलाने पर काम करें। जब आप कहते हैं "कोई प्रतिक्रिया नहीं है" - क्या phantomjs लटका है? क्या स्क्रिप्ट बाहर निकलती है या लटकती है? क्या आप स्क्रिप्ट द्वारा शुरू किए गए उदाहरण पर मैन्युअल रूप से phantomjs क्वेरी चला सकते हैं? – mjec