शेल_एक्सच मुद्दों को डीबग कैसे करें
ठीक है, यहाँ हमारे पास एक समस्या है: कुछ चीज़ टर्मिनल में काम करती है और php के शेल_एक्सईसी (या निष्पादन, स्पॉन, जो भी हो) में काम नहीं करती है। आइए सोचते हैं: आप और php में क्या अंतर है? यहाँ तीन हैं:
PHP को HTTP सर्वर नियमों से निष्पादित किया जाता है
वास्तव में, आपका टर्मिनल yourname
उपयोगकर्ता से चल रहा है और php से निष्पादित किया गया है www-data
। इसलिए, पहला विचार www-data
उपयोगकर्ता से टर्मिनल खोलना और एक ही कमांड का प्रयास करना है। इसलिए....
/etc/passwd
फ़ाइल खोलें , www-data
उपयोगकर्ता के साथ लाइन ढूंढें और इसे /bin/false
(या जो भी) से लॉगिन शेल (पिछले एक) को बदलें /bin/bash
।
www-data
टर्मिनल खोलें :su www-data
- Php -v या जो भी आप php से निष्पादित नहीं कर सकते हैं, कोशिश करें। यदि यह काम नहीं करता है - तो आप अच्छे लॉग देखेंगे और समस्या को डीबग करने में सक्षम होंगे।
/etc/passwd
जब आप काम कर रहे हों तो बैक फाइल को ठीक करना न भूलें
PHP को PHP से निष्पादित किया जाता है ।
PHP अपभ्रंश है और अपाचे / nginx और php.ini कॉन्फ़िगरेशन में बहुत सारे विकल्प हैं जो आपके प्रयास को प्रभावित कर सकते हैं।
यह डिबग करने के लिए थोड़ा अधिक जटिल है। यहां दो विकल्प हैं:
ब्राउज़र में लॉग सक्षम करें और समस्या देखें। ब्राउज़र में त्रुटियों को देखने के लिए अपने को संपादित करें php.ini
, चालू करें display_errors
और अन्य सभी झंडे। वे आप पढ़ सकते हैं और उन्हें डिबग कर सकते हैं।
प्राप्त www-data
खोल (प्रथम खंड देखें) और कुछ निष्पादित करें
echo '<?php shell_exec("php -v"); ?>' | php
जो कंसोल में एक ही php कोड निष्पादित करेगा और आप त्रुटियों और डिबग को देख पाएंगे।
PHP को SELinux / apparmor से निष्पादित किया जाता है
सेलिनक्स और एपरमोर सुरक्षा चीजें हैं जो विशिष्ट कार्यों को करने के लिए अनुप्रयोगों को मना करती हैं (उदाहरण के लिए, अन्य अनुप्रयोगों या कुछ अन्य विशिष्ट अनुप्रयोगों को पैदा करना)। शायद यह आपके सर्वर पर सक्षम है।
जाँच करने के लिए - selinux / apparmor को निष्क्रिय करें और जाँच करें कि क्या समस्या मौजूद है।
ठीक करने के लिए - उचित मैनुअल पढ़ें और अपने मामले के लिए अनुमत नियम लिखें।