PHP จัดเก็บบันทึกข้อผิดพลาดที่ไหน (php5, apache, fastcgi, cpanel)


392

ฉันอยู่ในพื้นที่สาธารณะและมี Cpanel, Apache, PHP ดำเนินการโดย fastcgi PHP จัดเก็บบันทึกข้อผิดพลาดที่ไหน

มีวิธีอื่นที่ฉันสามารถค้นหาบันทึกข้อผิดพลาดในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันแทนที่จะต้องผ่านโครงสร้างเว็บไซต์ทั้งหมดเพื่อค้นหาไฟล์ error_log หรือไม่

ฉันสามารถเข้าถึงphp.ini(ฉันใช้ PHP เวอร์ชัน 5.2.16)


25
บน Linux ทั้งหรือ/var/log/httpd/error_log /var/log/apache2/error.logไฟล์เหล่านี้เป็นของ root ดังนั้นคุณต้องเป็น root หรือใช้sudoเพื่อดูหรืออ่าน
Eric Leschinski

112
php --info | grep error
sjas

8
สำหรับผู้ที่มองหาโซลูชัน Windows ให้ใช้php --info | findstr /r /c:"error_log"เพื่อดูว่าล็อกไฟล์อยู่ที่ใด
บูม

1
มันค่อนข้างแปลกสำหรับฉัน ... ฉันได้โฮสต์เว็บไซต์และบันทึก PHP ถูกเก็บไว้ในไฟล์เดียวกับ Apache log ... บนแผง admin ของฉันในบันทึกมีตัวเลือกที่จะแสดงบันทึกข้อผิดพลาด Apache แบบเต็มเมื่อฉันคลิก มีข้อผิดพลาดเกี่ยวกับผู้ใช้ที่เข้าสู่สถานที่ที่ไม่ควรยกตัวอย่างเช่น แต่ในไฟล์เดียวกันก็มีข้อผิดพลาดที่ PHP แสดง
RedClover

@soaku ถ้าคุณใช้ apache fastcgi ตัวเองไม่ได้เรียกใช้ PHP เมื่อคุณใช้ mod_php ซึ่งเป็นโมดูล apache apache จะจัดการ php นั่นหมายถึงข้อผิดพลาดสามารถและอาจจะอยู่ในบันทึก apache เมื่อใช้ mod_php แต่จะไม่เป็นกรณีเมื่อใช้ cgi หรือ fastcgi
Gall Annonim

คำตอบ:


314

PHP เก็บบันทึกข้อผิดพลาด/var/log/apache2หาก PHP เป็นโมดูล apache2 โฮสต์ที่ใช้ร่วมกันมักจะเก็บไฟล์บันทึกไว้ใน/logโฟลเดอร์ย่อยของไดเรกทอรีราก แต่ ... หากคุณมีสิทธิ์เข้าถึงphp.iniไฟล์คุณสามารถทำได้:

error_log = /var/log/php-scripts.log

ตามความคิดเห็นของrinogo : หากคุณใช้ cPanel ไฟล์บันทึกหลักที่คุณอาจมองหาถูกเก็บไว้ (โดยค่าเริ่มต้น) ที่

/usr/local/apache/logs/error_log

หากทุกอย่างล้มเหลวคุณสามารถตรวจสอบตำแหน่งของไฟล์บันทึกโดยใช้

<?php phpinfo(); ?>

20
"Php เก็บบันทึกข้อผิดพลาดใน / var / log / apache2 ถ้า php เป็น apache2" ไม่ได้อยู่ใน RHEL ฯลฯ โดยที่ชื่อของแพ็คเกจคือ 'httpd' มีใครไม่สามารถสันนิษฐานได้ว่าชื่อของแพคเกจนั้นสอดคล้องกันทั่วทั้ง distros
chelmertz

28
FYI to Googler - หากคุณใช้ cPanel ไฟล์บันทึกหลักที่คุณอาจมองหาจะถูกเก็บไว้ (โดยค่าเริ่มต้น) ที่/usr/local/apache/logs/error_log
rinogo

5
แต่ให้ตรวจสอบส่วน 'error_log' ของ<?php phpinfo(); ?>เพื่อยืนยันเส้นทาง
doub1ejack

จะทำอย่างไรถ้าไม่ใช่โมดูล apache2 ตัวอย่างเช่นมันอาจเป็นแพ็กเกจ fpm ของเดเบียนที่ทำงานบน nginx
n611x007

2
มันจะแสดงที่ไหนในส่วนของ phpinfo ใน error_log ทั้งหมดที่ฉันเห็นสำหรับคีย์ / ค่าคือ 'error_log' และไม่มีเส้นทางที่แท้จริง
Robert Sinclair

86

ลองphpinfo()และตรวจสอบ "error_log"


13
มันเพิ่งบอกว่าerror_logไม่ได้ระบุพา ธ ฉันเดาว่ามันอาจเป็นเพราะมันอยู่ในสภาพแวดล้อมแบบโฮสติ้งที่ใช้ร่วมกันและถ้าเราเข้าถึงมันเราจะเห็นข้อผิดพลาดของเว็บไซต์ทุกคน
PHPLOVER

8
@PHPLOVER มันพูดแบบเดียวกันไหมถ้าคุณลองecho ini_get('error_log');?
chelmertz

ฉันไม่ได้ลอง แต่มันบอกว่าเหมือนกันในไฟล์ php.ini ดังนั้นสิ่งที่ฉันทำคือเปลี่ยนพา ธ ในไฟล์ php.ini และตรวจสอบเพื่อดูว่ามันใช้งานได้หรือไม่ มันยังคงบันทึกข้อผิดพลาดทั้งหมดแม้ว่าฉันจะเปลี่ยนเส้นทางเพื่อบันทึกข้อผิดพลาด (นอกรูทเอกสาร) หรือไม่ Thanks phplover
PHPLOVER

2
@PHPLOVER: คุณสามารถควบคุมระดับการรายงานได้อย่างง่ายดายด้วยการตั้งค่าerror_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php
chelmertz

3
Mine บอกว่า error_log ด้วยเช่นกันไม่รู้จะหามันที่ไหน นี่เป็นที่นิยมใน google แต่ไม่ตอบ
HMR

54

ลินุกซ์

php --info | grep error 

เทอร์มินัลจะส่งออกตำแหน่งบันทึกข้อผิดพลาด

ของ windows

php --info | findstr /r /c:"error_log"

พรอมต์คำสั่งจะส่งออกตำแหน่งบันทึกข้อผิดพลาด

เพื่อกำหนดตำแหน่งบันทึก

เปิดของคุณphp.iniและเพิ่มบรรทัดต่อไปนี้:

error_log = /log/myCustomLog.log

ขอบคุณ@chelmertez , @Boomสำหรับสิ่งเหล่านี้ (ความเห็นเกี่ยวกับคำถาม)


5
im บน linux นี่ไม่ได้พูดถึงตำแหน่งบันทึกสำหรับฉัน
Sirex

1
@Sirex ทำphp -infoอะไรออกมาบ้าง? คุณต้องตรวจสอบให้แน่ใจว่าคุณphpกำลังเรียกใช้ PHP เพื่อให้ทำงานจริง ๆ ...
Cullub

1
นอกจากนี้ยังเป็นไปได้ว่า php ไม่ได้บันทึกสิ่งใดในขณะนี้ หากเป็นกรณีนี้คุณสามารถเปิดphp.iniและตั้งค่าerror_reportingเป็นE_ALL & ~E_DEPRECATED & ~E_STRICTหรือข้อผิดพลาดใด ๆ ที่คุณต้องการดูจากนั้นตั้งค่าerror_logเป็นพา ธ ไปยังไดเรกทอรีที่คุณต้องการให้ข้อผิดพลาดของคุณเข้าสู่ระบบ (หมายเหตุ: นี่ไม่ใช่เส้นทางแบบเต็มไปยังไฟล์เพียงไปยังไดเรกทอรี)
Cullub

1
ฉันพบบันทึกเก่า ๆใน / var / log / httpd / ที่คนส่วนใหญ่แนะนำให้ค้นหาเท่านั้น แต่การรันphp --info | grep logชี้ไปที่ / var / www / บันทึกซึ่งเป็นที่ตั้งของบันทึกล่าสุด
ChrisBob

1
เมื่อคุณตั้งค่าตำแหน่งบันทึกอย่าลืมรีสตาร์ท Apache:sudo /etc/init.d/apache2 restart
BrianHenryIE

31

ในสภาพแวดล้อมของหลอดไฟข้อผิดพลาด php จะถูกนำไปยังไฟล์ด้านล่างนี้เป็นค่าเริ่มต้น

/var/log/httpd/error_log

บันทึกการเข้าถึงทั้งหมดอยู่ภายใต้:

/var/log/httpd/access_log

ดังนั้นแสดงความคิดเห็นออกข้อกำหนดไฟล์บันทึกข้อผิดพลาด php และมันจะเขียนที่นี่?
ผู้ใช้

17

ค้นหาบันทึกข้อผิดพลาด PHP บน Linux ได้อย่างไร:

eric@dev /var $ sudo updatedb
[sudo] password for eric:
eric@dev /var $ sudo locate error_log

/var/log/httpd/error_log

อีกวิธีที่เทียบเท่า:

eric@dev /home/eric $ sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log

12

ปรากฏว่าโดยค่าเริ่มต้น php ไม่ได้บันทึกข้อผิดพลาดทุกที่error_logสำคัญใน php.ini จะแสดงความคิดเห็นในทุกการติดตั้งที่ฉันเคยเห็น

โดยทั่วไปฉัน:

  1. ค้นหาไฟล์ php.ini locate php.ini.
  2. ค้นหาไฟล์เหล่านี้เพื่อหาerror_reportingค่า

    ซึ่งควรตั้งค่าการรวมกันของระดับ php log ที่เพียงพอสำหรับคุณ ,

    เช่น: E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. ตรวจสอบerror_logค่าเพื่อให้แน่ใจว่ามันชี้ไปยังสถานที่จริงและไม่ได้ใส่ความคิดเห็น

    ค่าเริ่มต้นไม่ได้ให้เส้นทางแบบเต็มมีเพียงชื่อไฟล์เท่านั้นฉันไม่รู้ว่าเส้นทางนี้แก้ไขได้ตามปกติ อาจเป็น/var/log/ไปได้


11

คุณควรใช้พา ธ สัมบูรณ์เมื่อตั้งค่าตัวแปรerror_logในไฟล์ php.ini มิฉะนั้นบันทึกข้อผิดพลาดจะถูกจัดเก็บตามเส้นทางสัมพัทธ์ของคุณ

error_log = /var/log/php.errors

โซลูชันอื่น ๆ จะเขียนสคริปต์อย่างง่ายซึ่งจะแสดงรายการไฟล์บันทึกข้อผิดพลาดทั้งหมดจากแผนผังไดเรกทอรี


10

อาจเป็นได้/var/log/apache2/error.logหากคุณอยู่ในโปรแกรมคำนวณของ Google

และคุณสามารถดูหางแบบนี้:

tail -f /var/log/apache2/error.log

5

หากคุณมีการสร้าง Apache และ PHP จากแหล่งที่มาแล้วบันทึกข้อผิดพลาดโดยค่าเริ่มต้นจะถูกสร้างขึ้น${Apache install dir}/logs/error_logโดยทั่วไปของ/usr/local/apache2/logs/error_logคุณ มิฉะนั้นถ้าคุณได้ติดตั้งได้จากพื้นที่เก็บข้อมูลคุณจะพบว่าที่/var/log/apache2/error_logเตอร์คุณสามารถกำหนดเส้นทางในของคุณและยังตรวจสอบได้โดยการกล่าวอ้างphp.iniphpinfo()


5

วิธีที่ดีที่สุดคือดูในไฟล์ httpd.conf ของคุณและดูว่าค่าเริ่มต้นคืออะไร มันอาจถูกแทนที่โดยโฮสต์เสมือนของคุณโดยเฉพาะ ฉันเริ่มต้นด้วยการดู/etc/httpd/conf/httpd.confหรือ/etc/apache2/httpd.confค้นหา error_log มันอาจจะระบุว่าเป็นอย่างใดอย่างหนึ่ง / var / log / httpd / error_log หรือแต่มันอาจจะยังถูกระบุว่าเป็นเพียงแค่/var/log/apache2/error_loglogs/error_log

/etc/httpd/logs/error_logในกรณีนี้มันเป็นเส้นทางญาติซึ่งหมายความว่ามันจะอยู่ภายใต้ หากคุณยังไม่พบมันให้ตรวจสอบที่ด้านล่างของไฟล์ httpd.conf และดูว่าโฮสต์เสมือนของคุณอยู่ที่ไหน มันอาจจะอยู่ใน /etc/httpd/conf.d/<- เป็น "อื่น ๆ " หรือ "พิเศษ" โฮสต์เสมือนของคุณสามารถแทนที่ได้ด้วย ErrorLog "/ path / to / error_log"


4

เมื่อกำหนดค่าไฟล์บันทึกข้อผิดพลาดของคุณใน php.ini คุณสามารถใช้พา ธ สัมบูรณ์หรือพา ธ สัมพัทธ์ เส้นทางสัมพัทธ์จะได้รับการแก้ไขตามตำแหน่งของสคริปต์ที่สร้างและคุณจะได้รับไฟล์บันทึกในแต่ละไดเรกทอรีที่คุณมีสคริปต์หากคุณต้องการให้ข้อความแสดงข้อผิดพลาดทั้งหมดของคุณไปยังไฟล์เดียวกันให้ใช้พา ธ สัมบูรณ์เพื่อ ไฟล์

ดูเพิ่มเติมได้ที่นี่: http://www.php.net/manual/en/ref.errorfunc.php#53025


ขอบคุณสิ่งนี้แก้ปัญหาของฉันได้ พฤติกรรมอ่อนแอสำหรับคำจำกัดความที่เกี่ยวข้องจริงๆการมีล็อกไฟล์แพร่กระจายไปทั่วโฟลเดอร์ htdocs และไม่ทราบว่าจะเริ่มดูที่ใด ฉันคาดว่าจะสัมพันธ์กับโฟลเดอร์การติดตั้งเช่นเดียวกับการตั้งค่าอื่น ๆ +1
Eduardo


4
php --info | grep error

สิ่งนี้มีประโยชน์ แสดงความคิดเห็นโดย sjas กับคำถาม ดังนั้นฉันรวมมันเป็นคำตอบ


2
(ดูเหมือนว่า) สิ่งนี้ส่งออกค่าสำหรับการตั้งค่าบรรทัดคำสั่ง PHP (เช่น /etc/php/7.1/cli/php.ini) แทนการตั้งค่า Apache
BrianHenryIE


2

ทุกที่ที่คุณต้องการถ้าคุณตั้งค่าการเรียกใช้ฟังก์ชันของคุณ: error_log ($ errorMessageforLog. "\ n", 4, 'somePath / SomeFileName.som');


2

ค้นหาไฟล์ httpd.conf ErrorLogด้วยการรันcat <file location> | grep ErrorLogบนบรรทัดคำสั่ง ตัวอย่างเช่น:

$ cat /etc/apache2/httpd.conf | grep ErrorLog

เอาท์พุท:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

ค้นหาบรรทัดที่ขึ้นต้นด้วย ErrorLogและมีคำตอบของคุณ

หมายเหตุ: สำหรับโฮสต์เสมือนคุณสามารถแก้ไขไฟล์โฮสต์เสมือนhttpd-vhosts.confเพื่อระบุตำแหน่งไฟล์บันทึกอื่น


2

บันทึกข้อผิดพลาด cPanel อยู่ใน:

/ usr / local / cPanel / logs /

/ usr / local / Apache / logs /

โดยค่าเริ่มต้นบันทึก Apche จะอยู่ภายใน:

/ var / log / Apache

หรือ

/ var / log / apache2

หากใครก็ตามกำลังใช้ตำแหน่งบันทึกที่กำหนดเองคุณสามารถตรวจสอบได้โดยใช้คำสั่งนี้:

cat / etc / apache2 / conf /httpd.conf | ErrorLog grep

หากคุณได้รับข้อผิดพลาดที่ไม่มีไดเรกทอรี apache2 คุณสามารถเรียกใช้คำสั่งนี้เพื่อค้นหาตำแหน่งที่ถูกต้องโดย:

โดยที่ apache

หรือ

โดยที่ apache2


1
  1. คุณสามารถไปในโฟลเดอร์ตัวจัดการตรวจสอบไฟล์ได้
  2. ตรวจสอบไฟล์บันทึกในโฟลเดอร์ public_html
  3. ตรวจสอบไฟล์ "php phpinfo ()" ที่เก็บบันทึก

1

คุณอยู่ในสภาพแวดล้อมที่ใช้ร่วมกันและไม่สามารถค้นหาบันทึกข้อผิดพลาดตรวจสอบว่า cPanel มีตัวเลือกข้อผิดพลาดบนแผงควบคุม cPanel ของคุณหรือไม่ หากคุณไม่พบบันทึกข้อผิดพลาดคุณสามารถค้นหาได้ที่นี่

บนแถบค้นหา cPanel ค้นหาข้อผิดพลาดมันจะแสดงหน้าข้อผิดพลาดซึ่งเป็นรายการของหน้าข้อผิดพลาด http ที่แตกต่างกันโดยทั่วไปและข้อผิดพลาดอื่น ๆ คือที่แสดงบันทึกข้อผิดพลาด

สถานที่อื่น ๆ เพื่อดูสภาพแวดล้อมที่ใช้ร่วมกัน: / home / yourusername / logs / home / yourusername / public_html / error_log


1

บางสิ่งเช่นนี้

sudo locate error.log | xargs -IX grep -iH "errorlog" X

หรือ

sudo locate error_log | xargs -IX grep -iH "errorlog" X

หรือ

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.