ইউজার অ্যাপাচে (যেমন পিএইচপি ব্যবহার করার সময়) এর অধীনে লিব্রিঅফিস ব্যবহার করে ফাইলকে পিডিএফে রূপান্তর করুন


9

আমি লাইব্রোফাইস-হেডলেস ইনস্টল করেছি এবং শেলটিতে লগ ইন করার সময় সাধারণ ব্যবহারকারী হিসাবে নথি রূপান্তর করতে পারি।

[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
  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রূপান্তর করার চেষ্টা করার আগে আমার কোনও বাড়ি নির্দিষ্ট করার প্রয়োজন হতে পারে , তবে এটি কোনও লাভ করে না (আমি মনে করি CentOS 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

উত্তর:


14

এখানে দুটি সমস্যা আছে। প্রথমটি হ'ল www-data(অ্যাপাচি ব্যবহারকারী) কোনও সংজ্ঞা না থাকলে $HOMEলিব্রোফাইস চালাতে পারে না $HOME। দ্বিতীয় সমস্যাটি হ'ল, যদি না আপনি নির্দিষ্টভাবে এটি সেট আপ করেন (এবং আপনার সত্যই সত্যই সত্যই হওয়া উচিত নয়), apacheসিস্টেম /tmpডিরেক্টরিতে অ্যাক্সেস নেই । একটি ওয়েব সার্ভার সাধারণত একটি সীমাবদ্ধ পরিবেশে চলে এবং খুব বৈধ সুরক্ষার কারণে ফাইল সিস্টেমে সম্পূর্ণ অ্যাক্সেস পায় না।

সুতরাং, আপনি আমি প্রয়োজন) একটি বাড়িতে দিতে Apache এর ব্যবহারকারী এবং ২) এটি একটি ডিরেক্টরির মধ্যে এটি যখন অ্যাক্সেস আছে লিখতে দিতে সুতরাং, একটি তৈরি করুন। tmpএকই ফোল্ডারে যেখানে আপনি আপনার ওয়েব পেজ সংরক্ষণ এবং তারপর নিম্নলিখিত চালানো ডিরেক্টরিতে phpকোড:

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

আমি কেবল পরীক্ষা করেছি এবং এটি আমার মেশিনে পুরোপুরি কাজ করে। আপনার ./tmpএর অনুমতিগুলি 7 777 এ সেট করা আছে তা নিশ্চিত করুন Also এছাড়াও, আপনি যদি খুব বেশি পরিমাণে জেগে খেলেন তবে আপনাকে অ্যাপাচি পুনরায় চালু করতে হবে। যখন আমি পরিবর্তন করেছি এবং এটি পুনরায় চালু করার দরকার পরে এটি আমার জন্য কাজ করা বন্ধ করে দিয়েছে।


ধন্যবাদ টেরডন, আমার জন্যও নিখুঁত কাজ করে। দু'পক্ষের প্রশ্ন। কেন সেগুলিকে / টেম্পে রাখবেন না এবং ওয়েবপৃষ্ঠাগুলি যেখানে সংরক্ষণ করা হয়েছে ঠিক একই ফোল্ডারে নেই (আমি এটি পরীক্ষা করেছি, এটি কাজ করে)। কেন export HOME=/tmp/ayb libreoffice --headless ...কাজ করে না ? এর উদ্দেশ্য কী exportএবং কেন HOME=/tmp/ayb; libreoffice --headless....কাজ করে না ?
ব্যবহারকারী 1032531

আপনি যদি সত্যিই লিখতে পারেন তবে তা করতে নির্দ্বিধায় /tmp। তবে আপনার ওয়েব সার্ভারকে বাইরের ডিরেক্টরিতে অ্যাক্সেস না দেওয়ার জন্য ভিউর নিরাপত্তার দিক থেকে এটি একটি ভাল ধারণা /var/wwwexportপরিবর্তনশীল রফতানি করে, এটি পরবর্তী সমস্ত শেলের জন্য উপলব্ধ করে &&তোলে এবং নিশ্চিত করে যে রফতানি সফল হলে কেবল এটি চালিত হয়। আমি বিশদ সম্পর্কে নিশ্চিত নই, অ্যাপাচি অনুমতিগুলি সম্পর্কে বেশ চতুর হতে পারে, সবকিছু আপনার wwwফোল্ডারের নীচে রাখা ভাল always
টেরডন

আমি tmp ব্যবহার করে মিশ্রিত হয়েছি। হ্যাঁ, অ্যাপাচি /tmpএটিতে লিখতে পারে এবং এটি ব্যবহার সম্পর্কে একটি ভাল জিনিস (আমার মনে হয়) এটি স্বয়ংক্রিয়ভাবে পুরানো ফাইলগুলি পরিষ্কার করে। তবে তারপরে, আমি সবকিছুকে আওতায় রাখার বিষয়ে আপনার বক্তব্যটি দেখছি /var/www
ব্যবহারকারী 1032531

উবুন্টুর পক্ষেও সত্য (হোম ডিরেক্টরি ছাড়া মেসেজের 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)

এই পথচিহ্ন অনুসরণ, আমি ফোল্ডারের জন্য যাও recursively অনুমতিগুলি পরিবর্তন /var/spool/libreofficeকরতে 777

এর পরে, রূপান্তর প্রতিটি ব্যবহারকারীর জন্য কাজ শুরু করে।

হতে পারে আপনি Permission deniedঅন্য কোনও ফাইলও পেতে পারেন , এটি নিঃশব্দরূপে পরিচালিত হয় এবং আপনার ব্যবহারকারীর জন্য অনুমতিগুলি ঠিক করতে হবে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.