2012-01-29 15 views
11

मैंने प्रोग्रामेटिक रूप से दस्तावेजों को परिवर्तित करने के लिए अपाचे के साथ एक फ्रीब्स-सर्वर पर libreoffice हेडलेस स्थापित किया है (उदा। Odt-> pdf)। यह कमांड लाइन से काम करता है! लेकिन मेरा लक्ष्य php से ऐसा करने में सक्षम होना है। यह मांग करता है कि वेब-उपयोगकर्ता (www) libreoffice चला सकते हैं। लेकिन ऐसा नहीं हो सकता।PHP निष्पादन से libreoffice चल रहा है()

जब अपने ही उपयोगकर्ता के रूप में लिब्रे ऑफिस चल रहा है, मैं:

%libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc 
javaPathHelper: not found #This should not be a problem, says people on the net. 
convert /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.doc -> 
/usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.pdf using writer_pdf_Export 
% 

अगर मैं रूट के रूप में एक ही आदेश की कोशिश, यह काम नहीं करता।

sp# libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc 
javaPathHelper: not found 
sp# 

समस्या यह है कि मैं लिब्रे ऑफिस से कोई जानकारी प्राप्त नहीं है, इस प्रकार मैं नहीं जानता कि क्यों लिब्रे ऑफिस अलावा किसी अन्य उपयोगकर्ता के रूप में चलाने के लिए नहीं चाहता है: एक ही php से www-उपयोगकर्ता के साथ समस्या यह है मेरा अपना।

मेरा प्रश्न है: मैं php में exec() के माध्यम से libreoffice चलाने के लिए www-user अनुमति कैसे दे सकता हूं?

+2

यह सिर्फ एक पथ मुद्दा है? उनके संबंधित '$ पाथ' में क्या है? – Wrikken

+1

आपने रूट उपयोगकर्ता, '% sudo php program.php' के साथ कमांड लाइन द्वारा परीक्षण किया है, क्योंकि ग्राहक के पास अनुमति है? –

उत्तर

3

सख्ती से कोई जवाब नहीं, बल्कि PHP के निष्पादन का उपयोग करने के बजाय, आप PUNO का उपयोग करने पर विचार कर सकते हैं, एक PHP5 मॉड्यूल जो OpenOffice.org यूएनओ प्रोग्रामिंग एपीआई तक पहुंच प्रदान करता है।

1

मुझे एक ही समस्या हो रही थी और हां (धन्यवाद Wrikken) /usr/local/sbin को पाथ पर्यावरण चर के लिए तैयार करने के बाद मैं अपरिपक्व के तहत www-data के रूप में libreoffice चलाने में सक्षम था।

+0

@nikyspag सर, कृपया आप मेरे साथ अपना कोड साझा कर सकते हैं। –

3

क्या आपने इस ब्लॉग पोस्ट को देखा था?

http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx

+0

मैं एक छोटे से पक्षपाती, स्पष्ट कारणों के लिए कर रहा हूँ, लेकिन मुझे लगता है यह सबसे अच्छा समाधान :) –

10

मैं परिवर्तित कमांड चलाने से पहले एक त्वरित export HOME=/tmp के साथ इस मुद्दे को ठीक करने में कामयाब रहे, यह कहीं लिब्रे ऑफिस देता है यह जादू है काम करने के लिए लिखने योग्य।

+0

कि बहुत होशियार है ... तुम शायद मुझे बहुत समय बचा लिया। धन्यवाद। – Scalpweb

+0

यह मेरे लिए PHP से रूपांतरण फांसी, लेकिन आप मुझे बता सकते हैं क्या यह वास्तव में करता है को हल करती है? यह फांसी रूपांतरण क्यों हल करता है? – Rvanlaak

+0

लिब्रे ऑफिस उपयोगकर्ता की (उपयोगकर्ता चल पीएचपी, सामान्य रूप से अपाचे या http या www-डेटा) होम निर्देशिका के लिए छाया/अस्थायी/छिपी हुई फ़ाइलें लिखता है। उपयोगकर्ता एक वेबसर्वर (CLI से नहीं) से पीएचपी चल कभी नहीं सामान्य रूप से एक घर निर्देशिका है, तो $ HOME env चर खाली या सेट नहीं किया जाएगा और लिब्रे ऑफिस/करने के लिए नहीं लिख सकते हैं। तो इसे स्पष्ट रूप से tmp पर सेट करने से लिखने की अनुमति के साथ libreoffice थोड़ा सा स्थान देता है। HTH –

0

बारे Universal Network Objects (UNO), वहाँ कुछ "प्लग-एंड-प्ले" अंतिम-उपयोगकर्ता उपकरण हैं देख Docvert और JODConverter (jODconverter और pyODconverter)। तब सभी को वेब-सेवा या PHP द्वारा निष्पादित किया जा सकता है।

0

मैं config पथ पहले आप कार्यकारी चलाने()) डाल या shell_exec (की सिफारिश करेंगे;

आईई:

// Vars 
putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin'); 
putenv('HOME=' . $outputdir); 

$ outputdir = chmod 777 और LibreOffice आदेश से ही forlder "--outdir"

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