/ / PHP और Apache: shell_exec (xvfb के साथ wkhtmltopdf) कमांड काम नहीं करता है - php, Apache, wkhtmltopdf, shell-exec, xvfb

PHP और अपाचे: shell_exec (xvfb के साथ wkhtmltopdf) कमांड काम नहीं करता है - php, apache, wkhtmltopdf, shell-exec, xvfb

मैं एपाचे (2.4.2) पर php (5.4.2) के साथ wttmltopdf (0.11.0 rc1) को चलाने की कोशिश करता हूं। जब मैं लॉन्च करने की कोशिश करता हूं wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1, मैं अपना pdf ढूंढ सकता हूँ। यहाँ मेरा php कोड है

<?php
$cmd= "/usr/bin/wkhtmltopdf-i386 http://www.google.com google.pdf 2>&1";
$ret = shell_exec($cmd);
echo $ret;
?>

यह अपाचे और कमांड लाइन के रूप में काम करता है php test.php। क्योंकि मेरे लक्ष्य पृष्ठ में कई चित्र हैं औरकुछ "भारी" जेएस चार्ट। जब मैं इसे पीडीएफ में बदलने की कोशिश करता हूं तो मुझे wkhtmltopdf कमांड के साथ सेगमेंटेशन फॉल्ट मिला है। इसे काम करने का एकमात्र तरीका है Xvfb को X11 एमुलेटर के रूप में उपयोग करना। कोड इस तरह दिखता है:

<?php
$cmd= "/usr/bin/xvfb-run  /usr/bin/wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1";
$ret = shell_exec($cmd);
echo $ret;
?>

यह स्क्रिप्ट कमांड लाइन के साथ काम करती है php test.php लेकिन यह अपाचे के साथ काम नहीं करता है। अगर मैं एपाचे प्रक्रिया के साथ एक नज़र रखना चाहता हूं htop, मैं देख सकता हूं कि दो प्रक्रियाएं (साथ) हैं php test.php):

  • xvfb
  • wkhtmltopdf

जब मैं अपाचे के साथ लॉन्च करता हूं तो मेरे पास केवल xvfb प्रक्रिया होती है। यह अपाचे से एक टाइमआउट द्वारा समाप्त होता है क्योंकि यह wkhtmltopdf प्रक्रिया की प्रतीक्षा कर रहा है।

मैं इसे अपाचे (2.2.21) और php (5.3.10) के साथ काम कर सकता हूं।

वहाँ कुछ है जो मुझे याद आ रही है? शायद अपाचे में कुछ है विन्यास फाइल?

उत्तर:

उत्तर № 1 के लिए 1

मुझे भी यही समस्या आ रही थी। मैं फंक्शन फंक्शन का इस्तेमाल कर रहा था, लेकिन शेल_सेक्स पर वही लागू होता है। फ़ंक्शन निष्पादन php.ini में अक्षम किया गया था।

समाधान: php.ini फ़ाइल में disable_functions से shell_exec स्ट्रिंग निकालें।


जवाब के लिए 0 № 2

मुझे यकीन नहीं है कि आपका दूसरा संस्करण अपाचे से कॉल करने योग्य नहीं है (एक ही शेल का उपयोग नहीं किया जाना चाहिए, क्योंकि shell_exec एक शेल का उपयोग करता है?), लेकिन एक काम के रूप में आप (अपाचे PHP से) shell_exec("php test.php"); और अपना इच्छित परिणाम प्राप्त करें?

शायद इस तरह के रूप में अन्य प्रक्रिया निष्पादन कार्यों में से एक का प्रयास करें pcntl_exec.


जवाब के लिए 0 № 3

यह ज्यादातर स्वामित्व और अनुमतियों के कारण है, कोशिश करें

su www-data (for debian)
php test.php

आप शायद त्रुटि देखेंगे।