उपयोगकर्ता अपाचे के तहत लिबर ऑफिस का उपयोग करके पीडीएफ में फाइल कन्वर्ट करें (यानी PHP का उपयोग करते समय)


10

मैंने libreoffice-headless स्थापित किया और सामान्य उपयोगकर्ता के रूप में शेल में लॉग ऑन करने पर दस्तावेज़ परिवर्तित कर सकता है।

[root@desktop ~]# yum install libreoffice-headless
[root@desktop ~]# yum install libreoffice-writer
[root@desktop ~]# su NotionCommotion
sh-4.1$ /usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc
convert /tmp/ayb/document_34.doc -> /tmp/ayb/document_34.pdf using writer_pdf_Export

मैं अब वही काम करना चाहता हूं, लेकिन PHP और इसलिए उपयोगकर्ता एपाचे के रूप में, हालांकि, निम्नलिखित फ़ाइल को रूपांतरित नहीं करेगा।

<?php
  shell_exec('/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc');
?>

समस्या निवारण के प्रयास में, मैंने शेल के माध्यम से उसी एप को यूजर अपाचे के रूप में चलाया, लेकिन फिर भी यह फाइल को रूपांतरित नहीं करेगा:

[root@desktop ~]# su -s /bin/sh apache -c "/usr/bin/libreoffice --headless -convert-to pdf --outdir /tmp/ayb /tmp/ayb/document_34.doc"

सामान्य उपयोगकर्ताओं के विपरीत अपाचे के पास घर नहीं है, और मुझे याद है कि मुझे सुनने की आवश्यकता है कि मुझे HOME=/tmp/aybरूपांतरण करने का प्रयास करने से पहले एक घर निर्दिष्ट करना होगा , लेकिन यह मदद नहीं करता है (मुझे लगता है कि सेंटोस 5.8 का उपयोग करते समय और शायद लिब्रे ऑफिस का एक अलग संस्करण है, यह किया, लेकिन कुछ निश्चित नहीं है)।

उपयोगकर्ता अपाचे के रूप में इसे चलाने पर मैं एक फाइल को पीडीएफ में कैसे परिवर्तित कर सकता हूं?

स्थापित प्रणाली:

CentOS 6.4
httpd.x86_64                    2.2.15-28.el6.centos              @updates
libreoffice-headless.x86_64     1:3.4.5.2-16.1.el6_3              @base

जवाबों:


15

यहां पर दो समस्याएं हैं। पहला यह है कि www-data(अपाचे उपयोगकर्ता) के पास कोई $HOMEलिबेरोफ़ाइस नहीं है यदि कोई $HOMEपरिभाषित नहीं है तो वह नहीं चल सकता है। दूसरी समस्या यह है, जब तक आप इसे विशेष रूप से सेट नहीं करते (और आप वास्तव में वास्तव में नहीं करना चाहिए), apacheसिस्टम /tmpनिर्देशिका तक पहुंच नहीं है । एक वेब सर्वर आम तौर पर एक प्रतिबंधित वातावरण में चलता है और बहुत वैध सुरक्षा कारणों से फाइल सिस्टम तक पूरी पहुंच नहीं है।

तो, आपको i) को Apache के उपयोगकर्ता को एक घर देने की आवश्यकता है और ii) इसे एक निर्देशिका दें जिसमें इसे लिखने के लिए एक्सेस है। इसलिए, tmpउसी फ़ोल्डर में एक निर्देशिका बनाएं जहां आप अपना वेबपृष्ठ संग्रहीत करते हैं और फिर निम्न phpकोड चलाते हैं :

<?php
  shell_exec('export HOME=/tmp && libreoffice --headless -convert-to pdf --outdir ./tmp /tmp/ayb/document_34.doc');
?>

मैंने अभी परीक्षण किया है और यह मेरी मशीन पर पूरी तरह से काम करता है। सुनिश्चित करें कि आपके ./tmpपास इसकी अनुमतियाँ 777 पर सेट हैं। इसके अलावा, यदि आपको इसके साथ बहुत अधिक बजाना है, तो आपको अपाचे को पुनः आरंभ करने की आवश्यकता हो सकती है। इसने कुछ समय बाद मेरे लिए काम करना बंद कर दिया जब मैंने बदलाव किया और मुझे इसे पुनः आरंभ करने की आवश्यकता थी।


धन्यवाद टेराडन, मेरे लिए भी सही काम करता है। सवालों के जोड़े। क्यों नहीं उन्हें / tmp में रखा जाए, और उसी फ़ोल्डर में नहीं जहां वेबपेज संग्रहीत हैं (मैंने इसे परीक्षण किया, यह काम करता है)। export HOME=/tmp/ayb libreoffice --headless ...काम क्यों नहीं करता? का उद्देश्य क्या है exportऔर HOME=/tmp/ayb; libreoffice --headless....काम क्यों नहीं करता है?
user1032531

यदि आप वास्तव में लिख सकते /tmpहैं तो आप ऐसा करने के लिए स्वतंत्र हैं। हालाँकि, अपने वेब सर्वर को उन निर्देशिकाओं तक पहुँच प्रदान नहीं करना है, जो बाहर हैं /var/wwwexportचर का निर्यात करता है, जो इसे बाद के सभी गोले को उपलब्ध कराता है और &&यह सुनिश्चित करता है कि यह तभी चलता है जब निर्यात सफल होता है। मैं विवरणों के बारे में निश्चित नहीं हूं, अपाचे अनुमतियों के बारे में काफी बारीक हो सकता है, हमेशा अपने wwwफ़ोल्डर के तहत सब कुछ रखना बेहतर होता है ।
टेराडॉन

मुझे tmp का उपयोग करने पर मिलाया जाता है। हां, अपाचे इसे लिख सकता है /tmp, और इसका उपयोग करने के बारे में एक अच्छी बात (मुझे लगता है) यह है कि यह स्वचालित रूप से पुरानी फ़ाइलों को शुद्ध करता है। लेकिन फिर, मैं सब कुछ रखने के बारे में आपकी बात देखता हूं /var/www
user1032531

उबंटू के लिए भी वास्तविक (घर निर्देशिका के बिना संदेश के libreoffice --headlessबाद मर जाता है X11 connection rejected because of wrong authentication)।
स्टानिस्लाव इवानोव

3

मुझे डेबियन पर इसी तरह की समस्या थी और मैंने इसे हल किया।

अपना कमांड चलाएं, लेकिन straceशुरुआत में, इस तरह से:
strace -f -o output.txt soffice --headless --convert-to pdf (...)

यह सिस्टम एपीआई और इसके परिणाम के लिए हर पहुंच के साथ विशाल लॉग फ़ाइल का उत्पादन करेगा।
मेरे मामले में, लाइन 5000 के पास कुछ इस तरह था:
open("/var/spool/libreoffice/uno_packages/cache/uno_packages", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 EACCES (Permission denied)

इस राह के बाद, मैंने फ़ोल्डर के /var/spool/libreofficeलिए पुनरावर्ती अनुमति बदल दी 777

उसके बाद, रूपांतरण ने प्रत्येक उपयोगकर्ता के लिए काम करना शुरू कर दिया।

हो सकता है कि आप Permission deniedकिसी अन्य फ़ाइल पर भी जाएं , यह चुपचाप संभाला जाता है, और आपको अपने उपयोगकर्ता के लिए अनुमतियाँ ठीक करने की आवश्यकता है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.