2009-07-29 10 views
15

PHP कॉन्फ़िगरेशन सेटिंग क्या है जो डिबग आउटपुट में नई लाइनों से बचने से रोकती है या रोकती है?PHP त्रुटि लॉग और न्यूलाइन वर्ण

दो अलग-अलग इंस्टॉल (एक देव लैपटॉप चल रहा है एमएएमपी/ओएसएक्स, और एक देव सर्वर डेबियन चल रहा है) पर मैं डिबगिंग करते समय त्रुटि लॉग में अलग-अलग परिणाम देखता हूं।

error_log(print_r(array(1,2,4),1)); 

डेबियन पर इस

[Thu Jul 30 11:32:34 2009] [error] [client 118.93.246.104] Array\n(\n [0] => 1\n [1] => 2\n [2] => 4\n)\n, referer: http://dev.example.org/ 

रूप /var/log/apache2/error.log में प्रकट होता है पर OSX इस

[30-Jul-2009 11:34:00] Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 4 
) 
के रूप में/अनुप्रयोग/MAMP/लॉग/php_error_log प्रकट होता है

मैं डिबगिंग के लिए एमएएमपी तरीका पसंद करता हूं (लॉगफाइल को/अनुप्रयोग निर्देशिका में स्थानांतरित करने के अलावा)।

धन्यवाद!

उत्तर

12

क्रिस, आप फ़ाइल को इंगित करने के लिए डेबियन पर अपने php.ini में error_log निर्देश को बदलने में सक्षम होना चाहिए। यदि यह अपरिभाषित है, तो यह syslog के माध्यम से जाएगा जो एकाधिक लाइनों का समर्थन नहीं करता है।

विवरण:

error_log समारोह

error_log निर्देश

+0

यह भी उल्लेख किया जाना चाहिए कि यदि अपाचे चलाने वाला उपयोगकर्ता निर्दिष्ट त्रुटि_लॉग फ़ाइल (अनुमति समस्याओं के कारण) पर नहीं लिख सकता है, तो यह syslog या अपाचे लॉग पर भी जाएगा। – Pistos

-2

मैं इस के लिए एक अच्छी समाधान के साथ आया था और बस के बारे में ब्लॉग, लोगों के लिए उपयोगी हो सकता है: http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/। टीएल; डीआर: एक फ़ाइल को लिखें जिसे आप स्वयं/tmp में बनाते हैं, एक ऐसा फ़ंक्शन लिखें जो उस फ़ाइल में आपकी डीबग जानकारी लिखता है और अपाचे के लॉगिंग को भी रूट करता है (इसलिए आपको 2 त्रुटि फ़ाइलों को ट्रैक करने की आवश्यकता नहीं है)।

+0

धन्यवाद। AFAICT यह बहुत अधिक है "/ tmp में एक नई फ़ाइल बनाकर अनुमति प्रतिबंधों के आसपास काम करें"; उपरोक्त @ पिस्टोस से अनुमतियां सुराग अंत में मेरे लिए अनुपलब्ध घटक थीं। –

+0

लिंक नीचे है और उत्तर में दुर्भाग्यवश विस्तृत निर्देश नहीं हैं। – Innovaat

+1

यहां नवीनतम लिंक है, इसका एहसास नहीं हुआ: http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/ नीचे वोट प्राप्त करके कठिन परिश्रम महसूस करें, इससे मदद मिलेगी यदि आप मूल समस्या को हल नहीं कर सकते हैं, जिसे मैं करने में सक्षम नहीं था (इसलिए कामकाज)। – eclipse31

2

समस्या तब होती है जब अपाचे प्रक्रिया error_log फ़ाइल में नहीं लिख सकती है, इसलिए syslog फ़ाइल में लिखता है। Syslog लाइन ब्रेक गड़बड़ करता है।

तो बस कार्य करें:

chmod 777 error.log 

यह आपकी समस्या का समाधान करना चाहिए।

+3

एक फ़ाइल पर + x जाने की सावधानी बरतें जो हमलावर लिख सकते हैं। समूह को पढ़ने/लिखने और समूह स्वामित्व को इसके बजाय वेबसर्वर उपयोगकर्ता को सेट करें। लॉग रोटेशन (लॉगरोटेट कॉन्फ़िगरेशन में chmod सेटिंग, आदि) पर अनसेट होने की अनुमतियों के बारे में सावधान रहें। –

+0

सहमत हैं कि यह कुछ हद तक असुरक्षित है (हालांकि मुझे आशा है कि आपकी लॉग फाइलें वेब सर्वर के माध्यम से उपलब्ध नहीं हैं ...) लेकिन यह स्थानीय देव पर्यावरण के लिए एक तेज़ त्वरित है और यह मुख्य मुद्दा बताती है, जो कि अनुमति है लॉग फ़ाइल अपाचे को लिखने से रोक सकती है, जिसके कारण syslog का उपयोग किया जा सकता है। –

+1

मेरा स्वयं का समाधान क्रिस बर्गेस की सिफारिश की तरह था, मैंने अपना उपयोगकर्ता समूह में वेबसर्वर के रूप में जोड़ा, फ़ाइल की अनुमतियों को समूह में पूर्ण पहुंच की अनुमति देने के लिए बदल दिया, और फाइल के स्वामित्व को उस उपयोगकर्ता/समूह में बदल दिया जो वेबसर्वर के रूप में चलता है , यानी पूर्व-स्थापित अपाचे के साथ ओएसएक्स पर: '' 'sudo dseditgroup -o edit -a myusername -t user _www; सुडो चोउन _www: _www/var/log/apache2/error_log; सुडो chmod 770/var/log/apache2/error_log; '' –

संबंधित मुद्दे