it-swarm.asia

تتبع أخطاء تجزئة في PHP؟

أنا أبحث عن طريقة غير مؤلمة نسبيًا لتعقب أخطاء التجزئة في PHP (كما ورد في سجل أخطاء Apache). هذا هو إعداد LAMP في الوقت الحالي:

Linux: OpenSUSE 11.3 x86_64
أباتشي: 2.2.15-3.7
MySQL: 5.1.46-2.18
PHP: 5.3.2-1.31

الكود المعني ليس رمزًا خاصًا بي ، فهو Gallery2: http://gallery.menalto.com سيناريو نموذجي هو أنني أذهب إلى الصفحة الرئيسية للمعرض ولا تظهر أي من الصور المصغرة ولكني أتلقى مجموعة جديدة من أخطاء خطأ تجزئة في سجل الخطأ.

نظرًا للتعقيد النسبي لهذا البرنامج ، فهو غير مناسب بشكل خاص لأشكال بسيطة من تصحيح الأخطاء. أود أن أكون قادرًا على تصفح التعليمات البرمجية ومعرفة ما يحدث بالضبط. "الحلول" التي رأيتها حتى الآن للقيام بذلك كانت بعيدة كل البعد عن "غير مؤلمة نسبيا".

لقد نجحت في استخدام Gallery2 على هذا الخادم (الإصدارات السابقة من حزم برامج LAMP) وعلى الخوادم الأخرى ، لذلك افترض أن هناك شيئًا ما معيبًا في التكوين الحالي ، لكن دون أن أتمكن من معرفة مكان حدوث الخطأ ، لا يمكنني إصلاح أو العمل من حوله.

3
S. W.

هل يمكنني اقتراح البحث في http://sourceforge.net/tracker/index.php؟func=detail&aid=1692166&group_id=7130&atid=1071 و http://gallery.menalto.com/ عقدة/62436 # تعليق-22857 ؟

يبدو أن هناك مشكلات شائعة عند استخدام Apache_setenv أو gzipping لعنوان URL مرتين (اعتمادًا على السيناريو - يبدو أن السابق يبدو أكثر احتمالًا مع عدم ظهور الصور المصغرة):

أعتقد أن المشكلة تكمن في أن mod_deflate يحاول gzip البيانات مرة ثانية بناءً على عنوان URL ، مما يؤدي إلى تعطل بعض الأنظمة. إن إخبارها بعدم gzip الملفات التي نرسلها يساعد في هذه الحالة.


قد يكون هناك خطأ في PHP. حاول إضافة $gallery->setConfig('apacheSetenvBroken', 1); إلى ملف config.php لتعطيله باستخدام وظيفة Apache_setenv ()

نقدر أن هذا ليس هو الحل على السؤال الذي تطرحه (بعد استخدام Zend Framework مع الإضافات أو سطر الأوامر php و gdb لا أعرف كيفية تصحيح الأخطاء في PHP) ولكنها قد تساعد.

2
Metalshark

لتصحيح PHP segfaults ، ستقوم عادةً بإنشاء ملف .php جديد (بحيث لا يتعارض مع الكود الرئيسي) مثل ذلك (ندعوه my_first_debugger.php):

<?php
include('annoying_caller_page_that_crashes.php');
?>

ثم قم بتشغيل gdb php. إذا لم يتم تثبيت gdb أو لم تكن ثنائيات gdb/php في المسار الخاص بك ، فستكون هناك أخطاء ، لذا استخدم YaST2 لتثبيت كل ما هو مطلوب (احصل على مكتبات التطوير/تصحيح الأخطاء لـ php أيضًا لأنها تتضمن عادةً رموز تصحيح).

ستحصل على الإخراج مثل:

GNU gdb x.x
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
(gdb) 

ثم فقط قم بعمل run my_first_debugger.php في سطر الأوامر.

ابحث عن حزم -dev و -dbg إذا كانت هناك رسائل مثل (no debugging symbols found) أو قد لا ترى اسم الوظيفة التي يتم استدعاءها.

0
Metalshark