2013-05-25 31 views
6

tôi đã viết các chức năng sau đây trong phpunoconv công trình từ thiết bị đầu cuối sử dụng www-data nhưng không phải từ kịch bản php cũng như www-data

public static function convert($originFilePath, $outputDirPath, $toFormat) 
{ 
    $command = 'echo $PATH & UNO_PATH=/usr/lib/libreoffice unoconv --format %s --output %s %s'; 
    $command = sprintf($command, $toFormat, $outputDirPath, $originFilePath); 
    exec($command, $output, $result_var); 

    return compact('output', 'result_var', 'outputDirPath', 'originFilePath', 'toFormat'); 
} 

Nó không tạo ra bất kỳ thông báo lỗi, hoặc bất kỳ tập tin pdf là tốt.

Trong thiết bị đầu cuối, khi tôi chạy unoconv trực tiếp dưới dạng dữ liệu www, tôi không có vấn đề gì.

Đây là kết quả của tôi sau khi thực hiện:

2013-05-26 03:05:30 Error: Array 
(
    [output] => Array 
     (
      [0] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
     ) 

    [result_var] => 1 
    [outputDirPath] => /var/virtual/storyzer.com/cake-json/ltequotationapp/webroot/outputfiles/Excel/2 
    [originFilePath] => /var/virtual/storyzer.com/cake-json/ltequotationapp/webroot/outputfiles/Excel/2/dsadas.xlsx 
    [toFormat] => pdf 
) 

Xin cho biết.

Trả lời

5

Vấn đề là tôi đang sử dụng Nginx và PHP-FPM.

Trong Nginx PATH KHÔNG được khai báo theo mặc định.

Vì vậy, có 2 giải pháp.

1) bạn khai báo nó trong thông số fastcgi cho Nginx.

Xem here.

2) bạn khai báo nó trong tập lệnh bằng cách sử dụng putenv() ngay trước khi bạn chạy mã unoconv.

như

putenv('PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/node/bin');

Tôi cũng muốn nói thêm rằng một phương pháp xử lý sự cố nào đó đã giúp tôi nhận ra vấn đề này. Xem here.

+1

Mất hơn một tuần nhưng cuối cùng tôi đã tìm ra! :) Internet thật tuyệt vời! ~~ –

2

Để biết các giải pháp có thể xem here.

Trích từ bài ...

Đây là những gì tôi đã làm để làm cho công việc unoconv qua apache mã/php chạy trên hệ điều hành Cent 6.2 (phiên bản 0.6 unoconv và LibreOffice 3.4.5.2): (Đây là chỉ có một nguyên nhân gốc rễ - không được biết đến với tôi)

Thay đổi người dùng apache từ/sbin/nologin sang/bin/bash (Điều này được thực hiện trong/etc/passwd) Thêm người dùng mới unoconv Đã thêm mới tệp /etc/sudoers.d/unoconv với các nội dung sau:

apache ALL = (unoconv) NOPASSWD:/usr/bin/unoconv (lưu ý rằng chương trình unoconv của tôi là ở vị trí này/usr/bin/unoconv - bạn tìm thấy nó bằng cách sử mà unoconv)

Sử dụng visudo ghi chú bên ngoài dòng followin (bằng cách thêm một dấu # ở đầu dòng)

#Defaults requiretty

khởi động lại sshd và httpd dịch vụ

Run unoconv như thế này với php exec() chức năng (bạn sẽ cần phải thay đổi tên tệp và thư mục đầu ra):

exec ('sudo -u unoconv/usr/bin/unoconv -f pdf -o bankgenerated Teacher_bulk_upload.csv');

Hope này làm việc ra cho bạn

+0

Tôi đã thấy điều này trước khi trong khi googling. Tôi đã thử các giải pháp khả thi khác trước khi tôi muốn thử cách này. Tôi sẽ chờ đợi các giải pháp khả thi khác. Nếu không có gì tốt đẹp, tôi sẽ giải quyết vấn đề này. Cảm ơn! ~ –

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