2012-01-29 37 views
11

Tôi đã cài đặt libreoffice không đầu trên máy chủ freebsd với apache để chuyển đổi tài liệu theo chương trình (ví dụ: odt-> pdf). Nó hoạt động từ dòng lệnh! Nhưng mục tiêu của tôi là có thể làm điều đó từ php. Điều này yêu cầu người dùng web (www) có thể chạy libreoffice. Nhưng tôi không thể.Chạy libreoffice từ php exec()

Khi chạy libreoffice là người dùng của riêng tôi, tôi nhận được:

%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 
% 

Nếu tôi cố gắng lệnh tương tự như root, nó không hoạt động. Điều này cũng là vấn đề với www người dùng từ php:

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

Vấn đề là tôi không nhận được bất kỳ thông tin từ libreoffice, vì vậy tôi không biết tại sao libreoffice không muốn chạy như những người dùng khác hơn của riêng tôi.

Câu hỏi của tôi là: Làm cách nào để cho phép người dùng www chạy libreoffice qua exec() bằng php?

+2

Là nó chỉ là một vấn đề PATH? Có gì trong '$ PATH' của họ? – Wrikken

+1

Bạn đã thử nghiệm bằng dòng lệnh với người dùng root, '% sudo php program.php', mà khách hàng có quyền? –

Trả lời

3

Không hoàn toàn là câu trả lời, nhưng thay vì sử dụng lệnh exec của PHP, bạn có thể xem xét sử dụng PUNO, một mô-đun PHP5 cung cấp quyền truy cập vào API lập trình UNO của OpenOffice.org.

1

Tôi đã gặp vấn đề tương tự và có (cảm ơn Wrikken) sau khi thêm /usr/local/sbin vào biến môi trường PATH Tôi đã có thể chạy libreoffice dưới dạng www-data dưới apache.

+0

@nikyspag Thưa ngài, vui lòng chia sẻ mã của bạn với tôi. –

10

tôi quản lý để khắc phục vấn đề này với một cách nhanh chóng export HOME=/tmp trước khi chạy lệnh chuyển đổi, điều này mang đến cho libreoffice ở đâu đó có thể ghi để làm việc đó là kỳ diệu.

+0

Điều đó rất thông minh ... Bạn có thể đã cứu tôi rất nhiều thời gian. Cảm ơn. – Scalpweb

+0

Điều này giải quyết treo chuyển đổi từ PHP cho tôi, nhưng bạn có thể cho tôi biết điều này chính xác không? Tại sao điều này giải quyết treo chuyển đổi? – Rvanlaak

+0

Libreoffice ghi tệp bóng/tạm thời/ẩn vào thư mục chính của người dùng (người dùng đang chạy PHP, thường là apache hoặc http hoặc www-data). Người dùng chạy PHP từ máy chủ web (không phải từ CLI) không bao giờ thường có thư mục chính, do đó biến $ HOME env sẽ trống hoặc không được đặt và libreoffice không thể ghi vào /. Vì vậy, thiết lập này rõ ràng để tmp cho libreoffice một chút không gian với sự cho phép để viết. HTH –

0

Tôi sẽ khuyên bạn nên đặt đường dẫn cấu hình trước tiên bạn chạy exec() hoặc shell_exec();

IE:

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

$ outputdir = chmod 777 Và forlder cùng từ lệnh libreoffice "--outdir"

Các vấn đề liên quan