2010-09-10 19 views
8

मैं अपने php code.But मैं है.कोई के लिए वांछित उत्पादन नहीं मिल रहा है की बैकएंड में एक जार फ़ाइल को चलाने के कोशिश कर रहा हूँ एक जार फ़ाइल जो पृष्ठभूमि में चलता है और कीवर्ड में से किसी और की पेज रैंक देता है डोमेन को दिया गया। मैं कोड संलग्न कर रहा हूँ, कृपया मुझे किसी भी समाधान यह करने के लिए सुझाव है क्योंकि जब मैं टर्मिनल पर चला है, यह सही उत्पादन दे रहा है।PHP कोड के माध्यम से खोल कमांड कैसे चलाएं?

<?php 
set_time_limit(0); 
function returnJarPath() 
{ 
    $jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar"; 
    return $jarPath; 
} 
$jar = returnJarPath(); 
$command = "java -jar $jar aspdotnet/microsoft.com";//Passing the Argument to the Jar file. 


$shellOutput = shell_exec($command); 
    print "The Shell Output is : " ; var_dump($shellOutput);print "<br />"; 
exec($command,$executeCommmand); 
    print "The Exec returns the value : " ; var_dump($executeCommmand);print "<br />"; 
passthru($command,$passthruCommand); 
    print "The Passthru returns the value : " . $passthruCommand. "<br />"; 
?> 

मैं सिर्फ अपाचे के त्रुटि लॉग की जाँच की और अंतिम त्रुटि मैंने पाया था:

श: जावा:

यहाँ कोड है आदेश

नहीं मिला लेकिन के रूप में मैं पहले से ही कहा है, मैं SSH के माध्यम से एक ही आदेश का उपयोग जावा command.So चलाने के लिए वहाँ नहीं होने जावा server.Please पर स्थापित मेरी मदद बाहर के ऐसे कोई संभावना नहीं है किया गया है इस गंदगी के ...

+0

क्या आपको कोई आउटपुट मिल रहा है? कोई त्रुटि? – Buggabill

+0

@ बुगाबिल: नहीं। PHP के माध्यम से नहीं, लेकिन मुझे टर्मिनल (कंसोल) के माध्यम से सही आउटपुट मिल रहा है। –

उत्तर

3

यदि जार फ़ाइल मानक आउटपुट को लिखती है तो आप exec का उपयोग कर सकते हैं।

यहाँ एक उदाहरण है कि कैसे मैं इसे का उपयोग करें:

may be first: exec("cd jar dir"); // if jar fine needs to be executed from the same dir 
$output = exec("/usr/bin/java -jar $jar aspdotnet/microsoft.com"); 

लेकिन जैसा कि आप कहते हैं:

sh: java: command not found 

इसका मतलब है php से जावा के लिए कोई रास्ता उर्फ ​​होती है। निष्पादन योग्य/usr/bin/java पर बस पूर्ण जावा पथ का उपयोग करें।

+0

मुझे अपनी समस्या का समाधान करने के लिए अपने तरीके का उपयोग कैसे करना चाहिए? –

+0

पहले इस आदेश के साथ linux कमांड promtp पर जावा पथ पाएं: कौन सा जावा। यह वापस/usr/bin/java वापस आ जाएगा। इसे अपने आदेश में पूर्ण पथ के रूप में प्रयोग करें "/ usr/bin/java -jar $ jar aspdotnet/microsoft.com"। जार द्वारा वांछित अगर आपको जार निर्देशिका में सीडी करने की आवश्यकता हो सकती है। – darpet

+0

पहले से ही ऐसा किया है ... और यह काम किया। एक गुच्छा डार्को धन्यवाद! –

0

को देखते हुए आप java बुला रहे हैं। मेरी शर्त है कि आउटपुट जावा कंसोल में प्रदर्शित किया जा रहा है, न कि शैल में, जहां PHP टेक्स्ट जानकारी खींच सकता है।

कैसे इस दुविधा को हल करने के?

अच्छी तरह से आप परिणामों को लिखने के लिए जावा स्रोत को संशोधित करने के लिए, यदि आप जावा स्रोत को संशोधित करने के लिए परिणाम लिख सकते हैं, और फिर परिणाम प्राप्त करने के लिए php के माध्यम से उस फ़ाइल को पढ़ सकते हैं। यहां टकराव की संभावना बहुत अच्छी होगी। दूसरा विकल्प जावा अपने MySQL डेटाबेस से कनेक्ट (यदि आप एक था) और फिर चलाने जावा तो प्रतिक्रिया के लिए डेटाबेस क्वेरी है। बेशक, आपको जावा को उस रिकॉर्ड को सम्मिलित करने के लिए डेटा को इनपुट करने की आवश्यकता होगी, जिसे आप पहचान सकते हैं (किसी प्रकार का हैश), मैंने कभी जावा में ऐसा नहीं किया है, केवल एक सिद्धांत है कि आप कैसे सक्षम हो सकते हैं इसे करने के लिए

अद्यतन

आप के रूप में एक और विकल्प के रूप में darko petreski ने सुझाव दिया और साथ ही मानक आउटपुट की कोशिश कर सकते हैं।

0

यदि PHP कोड को सर्वर में निष्पादित किया जाना है (और कमांड लाइन के माध्यम से नहीं) उपयोगकर्ता जो जावा निष्पादन योग्य चलाता है वह www-data है, आप नहीं।उस स्थिति में सुनिश्चित करें कि www-data में जार फ़ाइल को पढ़ने और जावा निष्पादन योग्य

+0

त्रुटि संदेश कहता है "java: आदेश नहीं मिला", विशेषाधिकारों के बारे में नहीं। – darpet

0

पहली चीज़ जो मैं जांच/बदलता हूं वह उस कार्य में रेखा है जहां आप $jarPath वैरिएबल बना रहे हैं इस:

$jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar"; 
इस के लिए

:

$jarPath = $_SERVER['DOCUMENT_ROOT'] . "/myFolder/tools_new/includes/Rank.jar"; 

स्लैश $_SERVER['DOCUMENT_ROOT'] जो समस्याओं का कारण बन सकता है में मौजूद नहीं हो सकता है।

मैं जब आप कहते हैं कि यह कंसोल से चलाता है, तुम इतनी तरह जावा आदेश चला रहे संभालने हूँ:

$ java -jar /rest/of/path/myFolder/tools_new/includes/Rank.jar aspdotnet/microsoft.com 

मैं यह सुनिश्चित करना होगा कि आप $command चर की तरह में जावा बाइनरी पथ शामिल इसलिए ...

$command = "/path/to/java -jar $jar aspdotnet/microsoft.com"; 

उपयोगकर्ता वेब सर्वर प्रक्रिया का मालिक है एक $ पथ चर है कि जावा बाइनरी पथ शामिल नहीं हो सकता है।

संबंधित मुद्दे